MEL How-To #06 | ||
| ||
How do I get the global or world-space coordinates of an object or component?Querying the global, or world-space, coordinates of an object and component can be achieved with the same MEL command: ‘ Say you have one object parented to another. The child object is offset from the parent, and the parent is moved and rotated in its own local space. How do you determine the global position of the child? // Create two objects for the purpose of this example string $sphereA[] = `polySphere -r 1 -sx 16 -sy 8 -ax 0 1 0 -tx 1`; string $sphere = $sphereA[0]; string $cubeA[] = ` polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -tx 1`; string $cube = $cubeA[0]; // Move the cube to some arbitrary location move 1.23 3.14 5.55 $cube; // Parent the cube to the sphere; parent $cube $sphere; // Move and rotate the sphere in some arbitrary fashion move 8.22 4.87 9.99 $sphere; rotate 12 34 45 $sphere; // Now, where's the cube?? // Use the 'xform' command with the -worldSpace flag to -query -translation: float $position[3] = `xform -worldSpace -query -translation $cube`; print ( "Cube's location in world-space: { " + $position[0] + ", " + $position[1] + ", " + $position[2] + " }\n" ); // And to prove it, place a locator at the cube's center: spaceLocator -p $position[0] $position[1] $position[2] -name "centerOfCube"; If you look at the coordinates of a vertex or CV in the Attribute Editor from Maya's UI, it will often report a position of {0, 0, 0} for all points. This is because you are getting the coordinate of the component based on the local coordinate space for the component. You may think this is truly less than useful -- I know I did -- but there is some method behind Maya's madness. Try this: Make a nurbsSphere with construction history. Select a CV. Open the Attribute Editor and expand the "CVs (click to show)" area. Note that all CVs have a location of {0, 0, 0}. They have no offset from the input of the 'makeNurbSphere' node. Tweak one of the CVs by moving it. Now its local coordinates will be slightly offset, but all the others will remain at their local origin. Now delete history for the sphere and look again. Since the CVs' local space is not being acquired from the ' To get the world-space coordinates for the CV, use the ' xform -ws -q -t nurbsSphere1.cv[4][3] ; // Result: 0.4612167 0.9553883 -0.7423176 // The ' This works for polygon vertices as well: float $coords[] = `xform -ws -q -t pSphereShape1.vtx[14]`; // Result: 0.3535534 -0.9238795 0.1464466 // The ' | ||
Copyright ©2005 by Bryan Ewert, maya@ewertb.com Maya is a Registered Trademark of Alias |