Читайте также:
|
|
MAXScript позволяет вносить изменения в плугин во время работы 3ds max. При этом объекты текущей или вновь загруженной сцены, созданные плугином предыдущих версий автоматически дополняются до новой. Делается это с помощью простого сравнения имен локальных переменных, блоков параметров и самих параметров. При этом локальные переменные и параметры с совпадающими переменными сохраняются, вновь созданные заполняются значениями по умолчанию, а удаленные отбрасываются. Имеются, однако, следующие ограничения
Следует учитывать, что такой механизм работает только для тех плугинов, в определении которых явно задан параметр classID.
Вы можете взять управление процессом доработки объекта до новой версии в свои руки. Для этого надо определить обработчик события update, которое происходит, если загружается объект, созданных одной из предыдущих версий плугина. В этом случае может пригодиться значение локальной переменной version, которая содержит номер версии плугина, создавшего объект. Например
plugin name: “Some Object” classID: #(786543,345678) version: 3
(…
on update do
(if version = = 1 then … -- Доработка объекта первой версии
if version = = 2 then … - Доработка объекта второй версии
)
…
)
После доработки переменная version будет содержать уже значение новой версии. Однако подобные меры надо предпринимать только в том случае, если необходимы специальные операции по переводу объектов из старой версии в новую. В большинстве случаев вполне достаточно автоматически выполняемых MAXScript действий. Если же Вы заведомо не собираетесь работать с файлами, содержащими объекты предыдущих версий Вашего плугина, то не следует усложнять программу излишними действиями.
Срипт плугины класса Geometry
Скрипт плугины этого класса требуют наличия метода create, если они не являются временными, невидимыми, или не расширяют другие плугины.
Пример
plugin geometry rowbar_plugin_def name:"RowBar"
category:"Scripted Primitives"
(local boxes, clickAt
-- Свиток параметров с единственным задатчиком, который задает
-- расстояние между box-ами
rollout dist "Parameters"
(spinner dist "Distance" range:[-1000,1000,20]
)
-- Средство создания объектов
tool create
(on mousePoint click do
(clickAt = worldPoint
boxes = for i in 1 to 10 collect box pos:([dist.dist.value*i,0,0] + clickAt)
#stop
)
)
)
В результате выполнения приведенного плугина создается кнопка на панели Create. После нажатия кнопки мыши в видовом окне, в указанном месте создается колонка из 10 примитивов box. Это простейший вид плугина, который не имеет дело со специфическими объектами, или с сохраняемыми параметрами.
А вот более сложный пример плугина, позволяющего создавать примитивы box с одинаковой длинной ребер, или, попросту говоря, кубы.
Пример
plugin geometry Cuboid name:"Cuboid" classID:#(0x133067, 0x54374)
category:"Scripted Primitives" extends:Box
(-- Локальная функция для определения максимума из двух чисел
fn fmax val1 val2 = if val1 > val2 then val1 else val2
-- Средство создания объекта
tool create
(on mousePoint click do
case click of
(1: nodeTM.translation = gridPoint
2: #stop
)
on mouseMove click do
if click == 2 then delegate.width = delegate.length =
delegate.height = 2 * fmax (abs gridDist.x) (abs gridDist.y)
)
)
Дата добавления: 2015-10-31; просмотров: 66 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Функции, применяемые при разработке скрипт плугинов | | | Скрипт плугины класса SimpleObject |