MAXScript Extensions > MAXScript Extensions for 3ds Max CAT >

# 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

| 3ds Max CAT - Quick Navigation

#### See Also

- MAXScript Access To CATRigs

- MAXScript Access To CAT Layers

- Navigating CATRig Hierarchies using MAXScript