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.

Example:

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

)

)

plugin light threeLights

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

)

)

)

)

See also