Читайте также:
|
|
Функция addPluginRollouts () используется внутри средства create, чаще всего для плугинов, которые не создают объектов собственного класса. Обычно такие плугины создают несколько объектов существующих классов с заранее заданными свойствами. С помощью функции addPluginRollouts можно разместить свиток одного или нескольких объектов на панели Create с тем, чтобы задавать его параметры перед созданием. В качестве параметра функции передается ссылка на объект
addPluginRollouts Объект
В приведенном примере рассматривается плугин, создающий три источника света. Он определяет два новых класса. Класс lightMaster,базой которого служит класс Helper, используется как главный объект для системы источников света. В свою очередь эта система является объектом класса threeLights, базирующегося на классе Light. Свиток LightMaster позволяет редактировать параметры системы на панели Modify. Эти параметры, кроме того, сохраняются и восстанавливаются при записи и загрузке файла сцены.
Пример
-- Данный плугин создает объект Dummy, который служит
-- точкой направления трех направленных источников света:
-- key, fill и back
plugin helper lightMaster name:"Light Master" classID:#(12345,54321)
extends:Dummy replaceUI:true invisible:true
(-- Блок параметров объекта класса lightMaster
parameters main rollout:params
(key type:#node subAnim:true -- Источник света Key
fill type:#node subAnim:true -- Источник света Fill
back type:#node subAnim:true -- Источник света Back
-- Расстояние от источника света Key до объекта LightMaster по оси Z
height type:#worldUnits default:0 ui:height
-- Величина, определяющяя насколько источники света
-- разнесены друг от друга
spread type:#worldUnits default:0 ui:spread
-- Угол поворота источника света Fill относительно Key по оси Z
-- объекта LightMaster
angle type:#angle default:90 ui:angle
-- При установка параметра Height проверяется существование
-- источников освещения и устанавливаются их координаты Z
-- в координатной системе объекта LightMaster
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
)
-- При установке параметра Spread проверяется существование
-- источника света Key и если он есть, устанавливаются координаты
-- всех трех источников света
on spread set val do if key!= undefined then coordsys key.target
(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]
-- Вначале источник Fill размещается на одной оси с источником
-- Key, а затем поворачивается на угол angle
fill.pos = [kuv.x * spread, kuv.y * spread, height * 0.5]
about key.target rotate fill angle z_axis
)
-- При установке параметра angle перемещается только источник fill
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
)
)
-- Плугин создающий три источника света Key, Back и Fill
plugin light threeLights name:"Three Lights"
(local master
-- Средство создания объекта
tool create
(-- Обработчик нажатий на кнопку мыши
on mousePoint click do
(-- При первом нажатии создаются источники света и объект
-- класса lightMaster
if click == 1 then
(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
)
)
-- Кроме того добавляется свиток объекта LightMaster
addPluginRollouts master
)
-- При третьем нажатии средство create прекращает работу
if click == 3 then
(select master
master = undefined
#stop
)
)
-- Обработчик перемещения курсора мыши
on mouseMove click do
(-- После второго нажатие перемещение мыши задает параметр
-- spread
if click == 2 then
(master.key.pos = worldPoint
master.spread = distance master.key master.key.target
)
else -- После третьего - параметр height
if click == 3 then 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
)
)
)
)
Дата добавления: 2015-10-31; просмотров: 57 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Определение параметра | | | Внесение изменений в плугин |