List Controllers
float_list : floatController
point3_list : point3Controller
position_list : positionController
rotation_list : rotationController
scale_list : scaleController
Constructor
float_list ... point3_list ... position_list ... rotation_list ... scale_list ...
The List controller combines multiple controllers into a single effect. It is a compound controller with tools for managing the order in which its internal controllers are calculated. Controllers are evaluated in a top to bottom order; the controller at the top of the list is evaluated first. The contribution of the single sub-controllers can be weighted allowing for animation mixing.
When you assign a List controller to a parameter, the current controller is moved one level below the List controller; it becomes the first controller in the list. A second parameter is added below the List controller and is named Available. This is an empty placeholder for the next controller you add to the list.
Properties
.weight ArrayParameter default: #() -- float array
An array of the weight values of the sub-controllers.
.average Boolean default: false -- boolean; Average_Weights
Controls the averaging of the Weights.
.available
The .available
property has a controller
property, which contains a "phantom" controller. To add a controller to a list controller, assign the controller to the available.controller
property. The following script shows an example of creating and adding controllers to a list controller.
.<subcontroller>...
The property list for a list controller also contains the sub-controllers in the list controller (if any). The type of these controllers depends on the type of the list controller. For example, a float_list can contain any number of bezier_float controllers.
EXAMPLE
p=float_list ()-- create a list controller showproperties p-- show its properties p.available.controller-- the "phantom" controller p1=bezier_float ()-- create a new bezier float controller p.available.controller=p1-- add it to the list controller p2=bezier_float ()-- create a new bezier float controller p.available.controller=p2-- add it to the list controller getpropnames p-- show the list controller properties showproperties p-- show the list controller properties p.numSubs-- the number of list controller subAnims getsubanimnames p-- show the list controller subAnim names p[2].object-- retrieve the second bezier float controller
OUTPUT
Controller:Float_List-- result line 1 .weight : float array .average (Average_Weights) : boolean .available : float-- output line 2 false-- output line 2 Controller:-- result line 3 (the "phantom" controller) Controller:Bezier_Float-- result line 4 Controller:Bezier_Float-- result line 5 Controller:Bezier_Float-- result line 6 Controller:Bezier_Float-- result line 7 #(#weight, #average, #bezier_float, #available)-- result line 8 .weight : float array-- output line 9 .average (Average_Weights) : boolean-- output line 9 .bezier_float : float-- output line 9 .bezier_float : float-- output line 9 .available : float-- output line 9 false-- output line 9 4-- result line 10 #(#bezier_float, #bezier_float, #available, #Weights)-- result line 11 Controller:Bezier_Float-- result line 12 OK
EXAMPLE
lst = $.pos.controller-- if this is a list controller showInterfaces lst-- interface name is "list"
List Controllers Interfaces:
Interface:list
Properties
.count: integer : Read
This property contains the number of items that appear in the List controllers list box.
.active: index : Read|Write
Gets/Sets the index of the currently active item.
.tag: string : Read|Write
Gets/Sets the tag string of the list controller.
Available in 3ds Max 2026.
Methods:
<integer>getCount ()
This method returns the number of items that appear in the List controllers list box.
<void>setActive <index>listIndex
This method allows you to set the indexed item in the list active, so its parameters appear in the motion panel and any input is directed to the indexed sub controller.
<index>listIndex
: The index of the item to set as the active item.
<integer>getActive ()
This method returns the index of the currently active item.
<void>delete <index>listIndex
This method allows you to delete the indexed sub controller from the list.
<index>listIndex
: The index of the item to delete from the list.
<void>cut <index>listIndex
This method allows you to cut the index sub controller from the list and stores it in the buffer to paste later.
<index>listIndex:
The index of the item you wish to cut.
<void>paste <index>listIndex
This method allows you to paste the sub-controller from the buffer into the indexed slot in the list.
<index>listIndex:
The index of the slot to paste into.
<string>getName <index>listIndex
This method returns the class name of the indexed sub-controller if a user defined name does not exist.
<index>listIndex:
The index of the item for which to get the name.
<void>setName <index>listIndex<string>name
This method allows you to set the name of an indexed item.
<index>listIndex:
The index of the item.
<string>name:
The name to set it to.
See also Class IlistControl in the SDK Help file accompanying this product.
EXAMPLE
b = Box lengthsegs:1 widthsegs:1 heightsegs:1 length:65.7611 width:32.0211 height:39.8261 pos:[-15.6972,-84.9615,0] isSelected:on b.pos.controller = position_list () b.pos.controller.Available.controller = Position_XYZ () b.pos.controller.Available.controller = tcb_position () b.pos.controller.Available.controller = bezier_position () lst = b.pos.controller-- the list controller showInterfaces lst-- interface name is "list" lst.getCount()-- count function lst.count-- count property (read only) lst.SetActive 3-- set active function lst.GetActive()-- get active function lst.active-- active property lst.cut 2-- cut the second sub-controller lst.paste 1-- paste it to the top of the list lst.delete lst.count-- delete the second to last sub-controller lst.setName 2 "My Bezier"-- sets the name of the second sub-controller lst.getName 2-- gets the name of the sub-controller
ListCtrl Methods
The following methods were available in 3ds Max prior to version 4. They are still supported for backwards compatibility, but their functionality is covered by the new methods described above.
listCtrl.getName <list_controller> <index_integer>
Returns the name of the indexed subcontroller in the list controller.
listCtrl.setName <list_controller> <index_integer> <string>
Sets the name of the indexed subcontroller in the list controller. If the string is a null string (""), the default controller name is used.
listCtrl.getActive <list_controller>
Returns the index of the active subcontroller in the list controller.
listCtrl.setActive <list_controller> <index_integer>
Sets the indexed subcontroller in the list controller as the active controller.