Interface: maxOps


.productAppID : enum : Read

productAppID enums: {#none|#max|#viz|#gmax,#vizR}

The enum values returned are as follows:

#none - no ID

#max - 3ds Max

#viz - Autodesk VIZ

#gmax - gmax

#vizR - VIZrender

.productVersion : enum : Read

productVersion enums: {#productVersionDevel|#productVersionTrial|#productVersionOrdinary|#productVersionEdu|#productVersionNFR}

Returns the Product Version type.

The enum values returned are as follows:

#productVersionDevel - debug build, or licensed in-house

#productVersionTrial - trial license

#productVersionOrdinary - commercial license

#productVersionNFR - not for resale

#productVersionEdu - educational or student license


It should be noted that all copies of 3ds Max return a hardwarelockid of "-1" while under the grace period and until they have been authorized. You can also check for that number and initiate your own demo mode .

.licenseBehavior : enum : Read

licenseBehavior enums: {#licenseBehaviorPermanent|#licenseBehaviorExtendable|#licenseBehaviorNonextendable}

Returns the License Behavior.

The enum values returned are as follows:

#licenseBehaviorPermanent - permanent license, or hardware lock

#licenseBehaviorExtendable - term license, can be extended

#licenseBehaviorNonextendable - term license, cannot be extended

.licenseDaysLeft : integer : Read

Its return value is an integer indicating the number of full days left in the term of the license. A value of 0 means that today is the last day of validity. For permanent licenses, a fixed value is returned indicating greater than 10 years are left.


The property is read-only, with a boolean value: true means a network license, false means a local license.


--This example displays the values of your Cdilla license:

rollout CdillaOPS "License Properties" width:220 height:270


groupBox grp1 "License Values" pos:[18,18] width:180 height:265

button btn5 "Days until Expiration" pos:[50,45] width:119 height:18

editText edt5 "" pos:[50,75] width:119 height:18

button btn6 "License Version" pos:[50,105] width:119 height:18

editText edt6 "" pos:[50,135] width:119 height:18

button btn7 "License Behavior" pos:[50,165] width:119 height:18

editText edt7 "" pos:[50,195] width:119 height:18

button btn8 "Hardware Lock ID" pos:[50,225] width:119 height:18

editText edt8 "" pos:[50,255] width:119 height:18

on btn5 pressed do

edt5.text = (maxOps.licenseDaysLeft as string)

on btn6 pressed do


version = maxOps.productVersion as string

edt6.text = substring version 15 version.count


on btn7 pressed do


version = maxOps.licenseBehavior as string

edt7.text = substring version 16 version.count


on btn8 pressed do

edt8.text = (hardwarelockid as string)


rof = newRolloutFloater "License Status" 230 380

addRollout CdillaOPS rof


.trackbar : Interface : Read

Returns a Trackbar Interface.


hideFrozenObjects : boolean : Read|Write

Gets/Sets the state of the Hide Frozen Objects checkbox in the Display tab.

Note: You have to call completeRedraw() after setting this property.

.setKeyMode : boolean : Read|Write

Get/set the SetKey mode state

.setKeySuspend : boolean : Read|Write

Get/set the SetKey Suspend mode state

.setKeyFilters : enum by value array : Read

setKeyFilters enums: {#all|#position|#rotation|#scale|#ikParams|#objParams|#custAttribs|#modifiers|#materials|#other}

Always returns the fixed list of the filter names.

.setKeyNodeSets : String array : Read

Returns an array of node sets.


The array does not include "Selected".

.setKeyNodeSetCurrent : String : Read|Write

Returns "" if the current setKey node set is "Selected", setting it to "" sets the current setKey node set to "Selected".


A "SetKey NodeSet" is what is shown in the dropdown list above the Key Filters button in the status panel. The first entry in this dropdown is "Selected", which corresponds to a set name of "". The remaining items are all character nodes in the scene and all named selection sets in the scene.

.pivotMode : enum : Read|Write

pivotMode enums: {#none|#pivotOnly|#objectOnly|#hierarchyOnly}

This property corresponds to the pivot buttons in the Pivot subpanel of the Hierarchy Panel.

.autoGrid : boolean : Read|Write

Enable/Disable the AutoGrid option.

.startNewShapeLock : boolean : Read|Write

Enable/Disable the Start New Shape option checkbox.

.inProgressiveMode : boolean : Read

Returns true if 3ds Max is in Progressive mode, false otherwise.

When a time sequence of matrices is computed and has to be assigned to the transformation matrix of a node that employs the standard PRS controller and the standard Euler XYZ controller for the rotation, we would achieve a better animation result if the euler angles for the current frame were calculated based on the angles from the previous frame. The Progressive Mode tells the Euler controller to derive angles based on the previous frame. It is assumed that in this mode, the node transformation is set in strictly forward time order.

Also see beginProgressiveMode() and endProgressiveMode() methods below.

.paintSelBrushSize : integer : Read|Write

Get/Set the size of the Paint Selection brush. The Paint Selection is a selection mode accessible through the Selection Region flyout. The value corresponds to the "Paint Selection Brush Size" value under Customize>Preferences>General>Scene Selection. Note that right-clicking the Paint Selection icon in the main toolbar will open the Preferences dialog.

.overrideControllerRangeDefault : boolean : Read|Write

When set to true, new procedural controllers that normally require a range will be set to infinite range. When set to false (default behavior prior to 3ds Max 8), the range of such controllers will be set explicitly to the current animation range, causing the controllers to stop updating after the last frame of the range should the scene animation range be increased later. Available in 3ds Max 8 and higher.



Enables Progressive mode. See also maxOps.inProgressiveMode property above.


Disables Progressive mode. See also maxOps.inProgressiveMode property above.


Start the creation of a new Shape.

canImportBitmap <filename>fileName

Returns true if a bitmap importer is present for the extention in the file name, false otherwise. Does not check to see if the file exists or if it is a valid bitmap file.


Deletes selected animation.


If the active view is a Camera view and a multi-pass effect is turned on in the camera's properties, then this function returns true. Otherwise it does nothing and returns false.

setActiveViewportTransparencyDisplay <integer>transparencyLevel

Takes a single integer argument:

0 - turns off transparency in the active viewport

1 - sets it to screendoor

2 - sets it to blended transparency.

loadCUIFile <filename>fileName

Returns true if successful and false otherwise.

isFeatureLicensed <integer>featureNumber

Returns true if successful and false otherwise.


Gets the current render element manager.

GetRenderElementMgr <enum>


Gets a specific render element manager.


The #Draft renderer was retired in 3ds Max 6. Calling this method with #Draft argument will return undefined in 3ds Max 6 and higher.


CollapseNode <node>node <boolean>noWarning

Collpases the complete modifier stack of the node. When noWarning is set to true, no prompt will be issued. Returns true if successful and false otherwise.

CollapseNodeTo <node>node <index>modIndex <boolean>noWarning

Collpases the modifier stack up to the indexed modifier. The modifiers are counted from top of the stack. All modifiers below and INCLUDING the specified one will be collapsed.

When noWarning is set to true, no prompt will be issued. Returns true if successful and false otherwise.

CloneNodes <&node array>nodes offset:<point3> expandHierarchy:<boolean> cloneType:<enum> actualNodeList:<node array> newNodes:<node array>

This method will return true if successful, otherwise it will return false.

<&node array>nodes

This is the list of nodes that you want to clone. nodes is In parameter.


The positional offset that will be applied to the cloned nodes. offset is In parameter.


expandHierarchy default value: false

Indicates if children will be cloned in hierarchies. Default is false.


cloneType enums: {#copy|#instance|#reference}

cloneType default value: #copy

actualNodeList:<node array>

actualNodeList default value: #()

This node array will be filled in with the original nodes to be cloned. The reason for this is that there can be dependencies between nodes that causes other nodes to be added to the list. For example light/camera targets, nodes part of systems, part of groups or expanded hierarchies etc.

newNodes:<node array>

newNodes default value: #()

This node array will be filled in with the new cloned nodes. There is a one to one relationship between the nodes returned in the actualNodeList array and the newNodes array.


actualNodeList and newNodes take an argument of <&node array>, and are Out parameters. This is important because:

1) the variables should be passed by reference, and

2) we don't need to intitialize the variables to arrays since they are only Out parameters (MAXScript doesn't try to convert the value passed in to an array).

For example:


-- variables not passed by reference, does not work rightmaxops.clonenodes s actualNodeList:a newNodes:b

a --> undefined

b --> undefined

-- variables passed by reference without initializing, works rightmaxops.clonenodes s actualNodeList:&c newNodes:&d

c --> #($sphere01)

d --> #($sphere03)

Also note that the first argument type is specifed as <&node array>nodes, In parameter. Since it is an In parameter, we know that the method does not change the contents of the array passed, so there is no point in passing this array by reference.

In addition, MAXScript automatically wraps the single argument passed into a temporary array, so we can use s instead of #(s) to supply the node array.


You may not use maxOps.cloneNodes inside an undo off context. Doing so will crash 3ds Max when using the Undo function!


setSelectionType <boolean>auto <enum>method

Returns true if successful and false otherwise.


method enums: {#window|#crossing|#leftToRight|#rightToLeft}

true 1: Enables auto Win/Cross: moving left-to-right is crossing selection

true 0: Enables auto Win/Cross: moving right-to-left is crossing selection

false 1: Disables auto Win/Cross, turns ON crossing selection

false 0: Disables auto Win/Cross, turns OFF crossing selection

The integer relates to the radiobutton index in Customize/Preferences.

getNodeByHandle <DWORD>handle

Return a node associated with a given handle.


Returns the interface to the trackbar. See Trackbar Interface for details.


This method returns true if Set Key mode is active, false if not active.

getSetKeyFilterState filter

filter enums: {#position|#rotation|#scale|#ikParams|#objParams|#custAttribs|#modifiers|#materials}

Returns the state of the specified SetKey filter.

setSetKeyFilterState filter onOff

filter enums: {#position|#rotation|#scale|#ikParams|#objParams|#custAttribs|#modifiers|#materials}

Sets the state of the specified SetKey filter.


-- print SetKey Filters state

for filter in maxops.setKeyFilters do

format "% : %\n" (filter as string) (maxops.getSetKeyFilterState filter)

-- turn all on

for filter in maxops.setKeyFilters do maxops.setSetKeyFilterState filter true


<void>getDefaultTangentType <&enum>dfltInTangentType <&enum>dfltOutTangentType

dfltInTangentType enums: {#smooth|#linear|#step|#fast|#slow|#custom|#flat}

dfltInTangentType is Out parameter

dfltOutTangentType enums: {#smooth|#linear|#step|#fast|#slow|#custom|#flat}

dfltOutTangentType is Out parameter

Returns the default In and Out tangent types into the two Out parameters passed by-reference. Available in 3ds Max 8 and higher.

<void>setDefaultTangentType <enum>dfltInTangentType <enum>dfltOutTangentType writeInCfgFile:<boolean>

dfltInTangentType enums: {#smooth|#linear|#step|#fast|#slow|#custom|#flat}

dfltOutTangentType enums: {#smooth|#linear|#step|#fast|#slow|#custom|#flat}

writeInCfgFile default value: true

Sets the default In and Out tangent types. When writeInCfgFile is set to true (default), the changes will be also recorded in the configuration file, making them sticky between 3ds Max sessions. Available in 3ds Max 8 and higher.

<void>colorById <DWORD>id <&color>color

color is Out parameter

Returns a specific color for each unique ID passed. The result is written to the Out parameter by reference. This method is used internally to generate colors representing Material and Object IDs in the respective RenderElements. Available in 3ds Max 8 and higher.

For example:

for i = 0 to 9 do


maxops.colorById i &theColor

format "ID:% Color:%\n" i theColor



ID:0 Color:(color 100 100 100)

ID:1 Color:(color 213 16 100)

ID:2 Color:(color 70 188 100)

ID:3 Color:(color 183 104 100)

ID:4 Color:(color 40 20 100)

ID:5 Color:(color 153 192 100)

ID:6 Color:(color 10 108 100)

ID:7 Color:(color 123 24 100)

ID:8 Color:(color 236 196 100)

ID:9 Color:(color 93 112 100)