Scripted Plug-in Methods

The addPluginRollouts() is used within scripted plug-in create tools, specifically for level 1 plug-ins that don't create instances of themselves in the scene but might create other objects within their create tool. This method lets you install rollouts for a specified object in the Create panel, typically one of the objects being created in the create tool, so that its parameters can be adjusted directly during creation.

The form is:

addPluginRollouts <obj>

In the following example, a variation of the three light mouse tool example presented in Mouse Tool Clauses is set into permanent, editable classes. It defines two new classes. The helper class lightMaster is used as a master object for the light system. The light class threeLights is what you create to layout the initial system. It also creates a lightMaster and sets its parameters to point at the lights. The lightMaster rollout allows subsequent editing of the system in the Modifier panel, and storing the lights in a parameter block makes the setup persistent over scene saves and loads.

SCRIPT

plugin helper lightMaster
name:"Light Master"
classID:#(12345,54321)
extends:Dummy
replaceUI:true
invisible:true
(
parameters main rollout:params
(
key type:#node subAnim:true
fill type:#node subAnim:true
back type:#node subAnim:true
height type:#worldUnits default:0 ui:height
spread type:#worldUnits default:0 ui:spread
angle type:#angle default:90 ui:angle
-- check value of key since lights don't exist at initial creation
on height set val do if key != undefined then coordsys key.target
(
key.pos.z = val
back.pos.z = val * 1.5
fill.pos.z = val * 0.5
)
on spread set val do if key != undefined then coordsys key.target
(
-- compute normal vector pointing at key in the target's XY plane
-- (kuv) and reposition everything based on that and the current
-- spread and angle values
local kuv = normalize ([key.pos.x, key.pos.y, 0])
key.pos = [kuv.x * spread, kuv.y * spread, height]
back.pos = [kuv.x * -spread, kuv.y * -spread, height * 1.5]
-- position fill by placing it under the key and then rotating in
-- about the target
fill.pos = [kuv.x * spread, kuv.y * spread, height * 0.5]
about key.target rotate fill angle z_axis
)
on angle set val do if key != undefined then coordsys key.target
(
fill.pos = [key.pos.x, key.pos.y, height * 0.5]
about key.target rotate fill angle z_axis
)
)
rollout params "Light Parameters"
(
spinner height "Height" type:#worldUnits range:[-1e32, 1e32, 0]
spinner spread "Spread" type:#worldUnits range:[0, 1e32, 0]
spinner angle "Angle" range:[-180, 180, 30]
on params open do flagForeGround #(key, back, fill) true
on params close do
if key != undefined and back != undefined and fill != undefined then
flagForeGround #(key, back, fill) false
)
)

SCRIPT

plugin light searchlights
name:"Three Lights"
(
local master
tool create
(
on mousePoint click do
(
if click == 1 then -- create key, back & fill lights at mousedown
(
coordsys grid
(
master = lightMaster pos:gridPoint
master.dummy.boxsize = [10,10,10]
in master
(
local targObj=targetobject pos:gridPoint
master.key = targetspot pos:gridPoint name:"key" \
target:targObj
master.back = targetspot pos:gridPoint name:"back" \
target:targObj
master.fill = targetspot pos:gridPoint name:"fill" \
target:targObj
)
)
addPluginRollouts master
)
if click == 3 then
(
select master
master = undefined
#stop
)
)
on mouseMove click do
(
if click == 2 then -- drag out & round on x-y plane
(
-- place the key on the grid then set the spread and the
-- 'on set spread' handler will
-- move the lights to the correct heights
master.key.pos = worldPoint
master.spread = distance master.key master.key.target
)
else if click == 3 then -- drag up to elevate lights
master.height = gridDist.z
)
on mouseAbort click do
(
if master != undefined then
(
if master.fill != undefined then delete master.fill
if master.back != undefined then delete master.back
if master.key != undefined then delete master.key
delete master
)
)
)
)

Parameter Type Convenience Functions

The following functions allow you to convert parameter type names to their corresponding integer values used in the C++ API, or from an integer value to the corresponding name value. The integer values correspond to the values for ParamType and ParamType2 enums found in the maxsdk/include/paramtype.h header file. Available in 3ds Max 2021 and higher.

<type_name> ParamTypeToTypeName <int>

Returns the name value corresponding to the specified integer.

<int> TypeNameToParamType <type_name>

Returns the integer value for the enum corresponding to the specified type name.

For Example

ParamTypeToTypeName 4
--> #boolean

TypeNameToParamType #filename
--> 9