3ds Max CAT and MAXScript

 

   

3ds Max CAT - Quick Navigation

3ds Max CAT (CAT stands for Character Animation Tools) feature introduced in 3ds Max 2011 and refactored in 3ds Max 2013 provides a powerful platform for character animation that is also highly customizable. An important aspect of this is its accessibility to scripting.

MAXScript Access to 3ds Max CAT

3ds Max CAT implements a character rig as a tree hierarchy of controllers and objects.

All the standard MAXScript calling conventions for navigating hierarchies, accessing subanims, as well as getting, setting and inspecting controller properties work with 3ds Max CAT.

The 3ds Max CAT Function Publishing Interfaces expose Properties, Methods and Actions which allow you to use MAXScript to access objects written in C++. Many different types of objects can expose the same interface, thus allowing them to share the same MAXScript exposure. An example of this is that every controller in the CATRig provides the interface ICATControlFPInterface.

More specialized controllers such as HubTrans can additionally provide Interfaces that expose features relevant only to these types of controllers.

To find out what functions are available on controllers and objects, you can use two different MAXScript calls:

Syntax

ShowProperties <MaxObject>
Show <MaxObject>--alternative

Use Show() or ShowProperties() to find out what properties are available on an object or controller.

ShowInterfaces <MaxObject>

Use ShowInterfaces() to find out what functions/methods and properties are available on an object or controller.

FOR EXAMPLE:

ShowProperties $Character001
.CATMode : integer
.CATName : TSTR by value
.CATUnits : float
.ColourMode : integer
.LengthAxis : TSTR
.Node : node
.RootHub : control
.CATVersion : integer
.CATRigSpace : matrix3
.CATRigNodes : node by value array
.CATRigLayerCtrls : control by value array
.RootTransformNode : node
.NumLayers : integer
.SelectedLayer : integer
.SoloLayer : integer
.TrackDisplayMethod : integer
.Layers : float
false
 
ShowInterfaces $Character001
Interface: CATParentFPInterface
Properties:
.CATMode : integer : Read|Write|Validated by Validator function
.CATName : TSTR by value : Read|Write
.CATUnits : float : Read|Write|Validated by Validator function
.ColourMode : integer : Read|Write
.LengthAxis : TSTR : Read|Write|Validated by Validator function
.Node : node : Read
.RootHub : control : Read
.CATVersion : integer : Read
.CATRigSpace : matrix3 : Read
.CATRigNodes : node by value array : Read
.CATRigLayerCtrls : control by value array : Read
.RootTransformNode : node : Read
Methods:
 <void>AddHub()
 <boolean>LoadRig <TSTR>filename
 <boolean>SaveRig <TSTR>filename
 <node>GetBoneByAddress <TSTR by value>Address
 <void>UpdateUserProps()
 <void>AddRootNode()
Actions:
Interface: LayerRootFPInterface
Properties:
.NumLayers : integer : Read
.SelectedLayer : integer : Read|Write
.SoloLayer : integer : Read|Write
.TrackDisplayMethod : integer : Read|Write
Methods:
 <integer>AppendLayer <TSTR>name <name>method
method Validated by Validator function
 <boolean>InsertLayer <TSTR>name <integer>layerID <name>method
method Validated by Validator function
 <void>RemoveLayer <integer>layerID
 <void>MoveLayerUp <integer>layerID
 <void>MoveLayerDown <integer>layerID
 <boolean>SaveClip <TSTR>filename <time>starttime <time>endtime <integer>startlayer <integer>endlayer
 <boolean>SavePose <TSTR>filename
 <node>LoadClip <TSTR>filename <time>starttime scaledata: <boolean> transformdata: <boolean> mirrordata: <boolean> mirrorworldX: <boolean> mirrorworldY: <boolean>
scaledata default value: true
transformdata default value: true
mirrordata default value: false
mirrorworldX default value: false
mirrorworldY default value: false
 <node>LoadPose <TSTR>filename <time>starttime scaledata: <boolean> transformdata: <boolean> mirrordata: <boolean> mirrorworldX: <boolean> mirrorworldY: <boolean>
scaledata default value: true
transformdata default value: true
mirrordata default value: false
mirrorworldX default value: false
mirrorworldY default value: false
 <TSTR>CreatePasteLayerTransformNode()
 <TSTR>GetFileTagValue <TSTR>filename <TSTR>tag
 <boolean>LoadHTR <TSTR>filename <TSTR>camfile
 <boolean>LoadBVH <TSTR>filename <TSTR>camfile
 <boolean>LoadFBX <TSTR>filename <TSTR>camfile
 <boolean>LoadBIP <TSTR>filename <TSTR>camfile
 <void>CollapsePoseToCurLayer()
 <boolean>CollapseTimeRangeToLayer <time>StartTime <time>Endtime <time>Frequency regularplot: <boolean> NumPasses: <integer> PosDeltaThreshold: <float> RotDeltaThreshold: <float>
regularplot default value: false
NumPasses default value: 2
PosDeltaThreshold default value: 1.0
RotDeltaThreshold default value: 5.0
 <void>CopyLayer <index>LayerID
 <void>PasteLayer Instance: <boolean> CopyLayerInfo: <boolean>
Instance default value: false
CopyLayerInfo default value: true
Actions:
OK

Note that the properties exposed by an Interface will also appear as results of the ShowProperties() call.

You can also call

ClassOf <MaxObject>

This returns the class name of the specified object.

To access the transform controller of a 3ds Max CAT bone object which represents the bone inside the controller tree hierarchy of a CATRig, use the following syntax:

$<NodeName>.transform.controller

A shorthand way of doing the same thing is:

$<NodeName>[3].controller

or, since the CAT Bone objects also provide a dedicated variable to access the transform controller,

$<NodeName>.TMcontroller

See Also