MAXScript Access To CATRigs

The following page provides an overview of the various major components of the 3ds Max CAT animation system, their Function Publishing Interfaces, and possible MAXScript access approaches.

CATParent

The CATParent Helper Object stores the common shared information about a character rig including the name of the rig and the [CATUnits Ratio] value.

It also holds the layers system details including the name of each layer and its global weight.

It provides some useful arrays listing all controllers and all nodes used in the rig for fast iterations through all components using MAXScript.

The CATParent exposes the following two Function Publishing Interfaces:

Interface: CATParentFPInterface

Interface: LayerRootFPInterface

To create a new character using a pre-saved Rig file, you can simply create a new CATParent Helper and call the LoadRig() function of the CATParentFPInterface:

EXAMPLE

   theParent = CATParent()--create a new CATrig parent:
   $Object:Character001 @ [0.000000,0.000000,0.000000]
   theParent.LoadRig (GetDir #plugcfg +"\\CAT\\CATRigs\\Marine\\Marine.rg3")
   true
   theParent--note that loading a rig deletes the original parent!
    <Deleted scene node>

CATControl

3ds Max CAT can be described as a hierarchy of controllers and nodes. Each bone is represented by a controller (CATControl) managing the bone's behavior, animation and functionality, and a CATBone scene object used mainly for display, Skin Deformations, and rendering.

Every bone controller in the CATRig structure exposes the CATControlInterface. This means that every bone can return the CATParent and a name and can be used to save or load clip files or paste a layer.

You can use the .CATPatent property exposed by the CATControlInterface to access the CATParent from any CATBone. For example, if you have a pointer to a finger or an arm bone, you can easily find out the CATParent and perform all the loading, saving, and layer operations using it.

EXAMPLE

   theParent = CATParent()--create a new CATrig parent:
   --> $Object:Character001 @ [0.000000,0.000000,0.000000]
   rig_path = GetDir #maxroot + "\\plugcfg_ln\\CAT\\CATRigs\\Marine\\Marine.rg3"
   theParent.loadRig rig_path
   --> true
   theParent--note that loading a rig deletes the original parent.
   --><Deleted scene node>

Each bone controller also exposes the CATNodeControlFPInterface interface that provides properties and methods related to arbitrary bones management, transformation matrix access in various coordinate systems, ans so on.

The ExtraRigNodesInterface lets you add and remove extra rig nodes and access the array of extra rig nodes.

You can always access the corresponding scene node of a bone controller by using its .node property:

EXAMPLE

If you select a bone that has extra bones added to it such as, a head bone that has facial bones, you can use the following:

   theHeadCtrl =$MarineHead[3]--get the Head's controller:
   theArbBone = theHeadCtrl.GetArbBone 1--get its first arbitrary bone:
   theArbBone.node--get the scene node of that bone:

You will now have the node of the first extra bone that is attached to the head bone.

Note:

Internally, an "Extra" bone is called an "Arb" (shot for "Arbitrary") bone.

An ArbBone has no predefined use, unlike digit, limb, spine, or tail bones that provide respective built-in behavior to simulate fingers, arms, legs, spines, and tails.

Hubs

The Hub is a special bone where multiple specialized bone groups such as, limbs, spines, and tails can be connected to the rig.

The Hub bone exposes a unique HubFPInterface for features available only to Hubs. This includes the adding of spines, arms, legs, and tails.

Limbs

Limbs are bones dedicated to the creation of arms and legs.

All Limb Bone controllers expose the following Interfaces:

Interface: LimbFPInterface

Interface: CATControlInterface

Tails

Tail bone controllers are dedicated to the creation of tails.

The TailTrans controller exposes the following Interfaces:

Interface: CATControlInterface

Interface: CATNodeControlFPInterface

Interface: ExtraRigNodesInterface

CATObjects

All CATBones use a CATObject to display their geometry in the viewport.

The CATObject exposes the CATObjectFPInterface that provides control over the custom mesh display.