Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
max_Script синтаксис.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
196.1 Кб
Скачать

Часть 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        массив со всеми элементами интерфейса (только для чтения)

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]