Читайте также:
|
|
Панель скрипт-утилиты создается с помощью определяющего утилиту выражения. Это выражение выглядит так
utility Имя_переменной Символьная_строка
rolledUp: Логическое_выражение SilentErrors: Логическое_выражение
Далее идет текст скрипта, заключенный в круглые скобки, и представляющий собой тело утилиты.
Имя переменной – это имя автоматически создаваемой переменной, с помощью которой можно манипулировать созданной утилитой.
Второй параметр выражения – символьная строка, которая появится в списке утилит после ее определения.
Необязательный параметр rolledUp управляет состоянием свитка утилиты в момент его появления на панели. Если этот параметр равен true, то свиток свернут, если false – раскрыт. Значение по умолчанию равно false.
Параметр silentErrors так же необязателен и управляет порядком выдачи сообщений об ошибках. При значении false сообщения об ошибках появляются в окне интерпретатора и, возможно, в диалоговом окне, после чего выполнение утилиты прекратится. При значении true сообщение об ошибке не появится, а работа утилиты продолжится. Значение по умолчанию – false.
В теле утилиты содержатся определения компонентов пользовательского интерфейса, локальные переменные, функции и обработчики событий. Подробно организация тела утилиты описывается далее. В качестве примера рассмотрим утилиту, которая разносит выбранные объекты от их общего центра. После открытия свиток утилиты Spread Objects содержит три чек-бокса и один задатчик. Чек-боксы предназначены для того, чтобы назначать или отменять сдвиг объектов по соответствующей оси, а величина сдвига определяется задатчиком.
utility spread "Spread objects" -- определение имени утилиты и
-- строки описания
(local last_amt = 0 -- определение и инициализация
-- локальной переменной
checkbox x "Spread in x" -- создание трех чек-боксов
checkbox y "Spread in y"
checkbox z "Spread in z"
spinner spread "Spread amount:" range:[-1000,1000,0] -- создание
-- задатчика
on spread changed amt do -- при изменении значения задатчика...
(delta = amt - last_amt -- вычисление разницы между текущим
-- и предыдущим значением
for obj in selection do -- значения для каждого выбранного значения
(
-- вычисление новой позиции объекта на основании текущей позиции
-- и выбранног центра
p = obj.pos + normalize (obj.pos - selection.center) * delta
if x.checked then obj.pos.x = p.x -- если x-чек-бокс отмечен,
-- изменим позицию X
if y.checked then obj.pos.y = p.y -- если y-чек-бокс отмечен,
-- изменим позицию Y
if z.checked then obj.pos.z = p.z -- если z-чек-бокс отмечен,
-- изменим позицию Z
)
last_amt = amt -- Запомним новое значение задатчика
) -- конец обработчика изменения задатчика spread
) -- конец утилиты
Вот как выглядит панель Utilites после выбора утилиты Spread Objects из списка. Кнопка Close автоматически создается MAXScript-ом и закрывает свиток утилиты.
При определении утилиты происходит следующее. Создается новый объект. Во избежание путаницы с ключевым словом rollout, класс этого объекта называется RolloutClass. Переменная spread принадлежит именно к этому классу, в чем нетрудно убедиться с помощью функции classOf. Далее идет описание утилиты, в нашем случае строка “ Spread Objects ” которое и помещается в список утилит свитка MAXScript. После этого пользователь может выбрать ее из списка и работать с ней. Если снова выполнить скрипт с определением утилиты для этой же переменной, то новая утилита заместит старую, что позволяет Вам тестировать утилиту в процессе ее отладки.
Дата добавления: 2015-10-31; просмотров: 96 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Массивы модификаторов | | | Составные части тела утилиты |