
- •Часть 1
- •Окно maxScript Listener
- •Окно maxScript Editor
- •Простейшие математические операторы и выражения
- •Пропуск проходов и принудительный выход из циклов
- •Часть 2 Функции
- •Объекты и классы в объектно-ориентированном программировании
- •Определения
- •Операции со строками
- •Операции с массивами
- •Команды 3ds max в maxScript
- •Часть 3 Создание свитков
- •События
- •Элементы интерфейса
- •Часть 4 Сплайны
- •Класс SplineShape
- •Часть 5 Простейшие диалоговые окна
- •If queryBox “Хотите продолжить?” beep:false then ... Некоторые из методов работы с объектами
- •Характерные точки объектов
- •Системы координат
- •Координатные сетки
- •Определение угла между двумя векторами
- •Представление ориентации при помощи кватернионов (quaternions)
- •Создание вспомогательных объектов-пустышек Dummy
- •Изменение общих параметров анимации
- •Анимация вершин сплайнов
- •Примеры контроллеров анимации path constraint и link constraint
- •Методы print и format
Часть 3 Создание свитков
Один из видов интерфейсов, создаваемых в MAXScript – свитки (rollouts) на панели Utility. В свитках содержатся элементы интерфейса: кнопки, текстовые поля, выпадающие списки и т.д. Любой свиток можно и нужно редактировать при помощи средства Visual MAXScript, которое вызывается кнопкой F2 из окна Editor, когда курсор находится внутри тела свитка. Основной свиток, с которого необходимо начинать, создается при помощи конструкции utility:
utility <var_name><description_string>[rolledUp:<boolean>][silentErrors:<boolean>]
(<utility_body>), где:
<var_name> – имя глобальной переменной, в которой хранится данный свиток.
<description_string> – название утилиты в списке Utilities свитка MAXScript.
rolledUp: – необязательный параметр, определяющий, будет ли изначально развернут свиток утилиты. Значения: true – свернут, false – развернут (значение по умолчанию).
silentErrors: – необязательный параметр, определяющий, будут ли появляться сообщения об ошибках в окне Listener и в диалоговых окнах во время работы утилиты, в этом случае выполнение утилиты прекращается (все это происходит, если для параметра установлено значение false – оно же по умолчанию). Если установлено значение true, то никаких сообщений об ошибках не выводится, и работа утилиты не прерывается.
<utility_body> – тело утилиты, в котором описывается весь интерфейс, функции и события, происходящие при взаимодействии пользователя с элементами интерфейса (нажатие на кнопку, прокрутка спиннера и т.д.)
Следующий пример создает утилиту, которая перемещает выделенные объекты по прямой от центра выделения до позиции каждого объекта, учитывая оси координат.
utility spread "Spread objects" -- определяем имя и название утилиты
( local last_amt = 0 -- определяем и задаем значение локальной переменной
checkbox x "Распространить по x" -- создаем три флажка
checkbox y "Распространить по y"
checkbox z "Распространить по z"
spinner spread "Величина:" range:[-1000,1000,0] -- создаем спиннер
on spread changed amt do -- когда изменяется значение в поле спиннера...
(
delta = amt - last_amt -- разница между текущим и предыдущим значением
for obj in selection do -- значения для каждого выделенного объекта
(
-- вычисление новых координат на основе текущего положения и центра выделения
-- функция normalize создает вектор того же направления, но единичной длины
p = obj.pos + normalize (obj.pos - selection.center) * delta
if x.checked then obj.pos.x = p.x -- если включен флажок х, изменять положение по X
if y.checked then obj.pos.y = p.y
if z.checked then obj.pos.z = p.z )
last_amt = amt -- сохранить значение спиннера, как предыдущую величину
) -- конец события изменения величины спиннера
) -- конец определения утилиты
В утилиту можно вставить дополнительные свитки следующим образом:
utility <utility_name> <description_string>
(
...
rollout <rollout_name> <description_string>
[rolledUp:<boolean>] [silentErrors:<boolean>]
(<rollout_body>)
...
on <utility_name> open do -- при открытии утилиты…
(
...
-- добавляем свиток, поскольку просто так он не появится
addRollout <rollout_name> [rolledUp: <boolean>]
...
)
on <utility_name> close do -- при закрытии утилиты…
(
...
removeRollout <rollout_name> -- удаляем свиток
...
)
)
Параметры конструкции rollout те же самые, что и у utility.
У свитков и утилит есть свойства, вот некоторые из них:
Свойство Описание
<rollout>.name название свитка (строковая величина только для чтения)
<rollout>.title заголовок свитка
<rollout>.open свернут (false) или развернут (true) свиток
<rollout>.controls массив со всеми элементами интерфейса (только для чтения)