GENERATE/PREV.gifGENERATE/NEXT.gif

Transform Properties

The following transform properties are always interpreted with respect to the current working coordinate system as defined by the currently active coordsys context. The default coordsys is world.

The transform properties are derived from and modify the values of the transform controllers associated with the node, they are not associated directly with the node's main transformation matrix. This has a number of consequences:

  1. Assigning to a transform property with animation enabled plants keyframes only in the associated controller. If you modify the node's transform matrix directly, keyframes are generated for all the transform controllers for that node.
  2. Rotation properties and in fact all rotation-related functions in MAXScript reflect the direction convention used in the MAX user interface. This convention is the right-hand rule, namely, positive angles rotate counter-clockwise about positive axes. Internally, however, MAX stores rotations in node matrices using the left-hand rule. It is important to remember this inversion when working directly with node transform matrices using the .transform and .objectTransform properties. You'll need to invert rotations (for example, by multiplying axes by [-1,-1,-1] or using the inverse() function on quaternions) when mixing them with MAX and MAXScript standard rotations.
  3. Certain controllers, such as the path controller with bank or follow enabled, affect the rotation of a node by adjusting the node's transform matrix directly and this rotation is not reflected in rotation controller values. This means, in this example for instance, that bank and follow rotations are not directly accessible through the .rotation property, you need to dig them directly out of the node's transformation matrix using something like:

r = $foo.transform.rotationPart

which returns a quaternion. Remember, however, that the MAX rotation direction convention is not reflected when directly accessing a transform matrix, so to use this value in other rotation operations you would need to invert it:

$baz.rotation = inverse r.

<node>.pos      -- can use .position synonym throughout

<node>.pos.controller

<node>.pos.isAnimated

<node>.pos.keys

<node>.pos.track

<node>.pos.x

<node>.pos.y

<node>.pos.z

<node>.rotation

<node>.rotation.controller

<node>.rotation.isAnimated

<node>.rotation.keys

<node>.rotation.track

<node>.rotation.angle

<node>.rotation.axis

<node>.rotation.x_rotation

<node>.rotation.y_rotation

<node>.rotation.z_rotation

<node>.scale

<node>.scale.controller

<node>.scale.isAnimated

<node>.scale.keys

<node>.scale.track

<node>.scale.x

<node>.scale.y

<node>.scale.z

<node>.dir      -- local z-axis direction vector

<node>.max

<node>.min

<node>.center

<node>.transform      -- the node's main transformation matrix

Note that rotation in the internal transformation matrices is left-handed in contradiction to the MAX UI and MAXScript. Take care when mixing rotation derived from these matrices and rotation used in rotation-related functions or from rotation properties.

<node>.pivot

<node>.pivot.x

<node>.pivot.y

<node>.pivot.z

<node>.objectoffsetpos

<node>.objectoffsetrot

<node>.objectoffsetscale

<node>.objecttransform      -- pivot offset tm

<node>.ishidden

<node>.boxmode

<node>.alledges

<node>.backfacecull

<node>.wirecolor

<node>.castshadows

<node>.receiveshadows

<node>.motionblur

<node>.gbufferchannel

<node>.isselected

<node>.isdependent

<node>.istarget

<node>.visibility

This is a boolean property (unlike its value as a signed float in the MAX track view) - true or on denotes visible, false or off invisible. Animate this property to control an object's visibility at render-time, for example:

animate on

(

at time 0 $foo.visibility = on

at time 35 $foo.visibility = off

at time 57 $foo.visibility = on

)