Контроллеры управления по выражению и по сценарию

Контроллер управления по выражению позволяет управлять свойствами объекта по математическому выражению, а контроллер управления по сценарию — по коду. Каждый из этих способов находит применение и имеет свои достоинства и недостатки.

В версии 3dsMax 8 контроллер управления по выражению был переработан и теперь доступен для сценариев MAXScript посредством интерфейса IExprCtrl.


Приложение

А контроллер управления по сценарию использует общий базовый код и имеет почти такое же диалоговое окно, как и контроллер управления по выражению. Он доступен для сценариев MAXScript посредством интерфейса iScriptCtrl. Помимо изменений в диалоговом окне, контроллер управления по сценарию был значительно усовершенствован.

В следующем упражнении оба контроллера сравниваются и противопоставля­ются на конкретном примере.

1. Введите в новом окне редактора MAXScript Editor следующий фрагмент кода

и вычислите его:

delete objects

clearListener()

objE = box name:"objE"

objS = box name:"objS" pos: [50,0,0]

2. Назначьте контроллер управления по выражению с плавающей точкой для

свойства length объекта objЕ следующим образом:

objEctrl = objE.length.controller = float_expression()

3. Назначьте контроллер управления по сценарию с плавающей точкой для свойства

length объекта objS следующим образом:

objSCtrl = objS.length.controller = float_script()

4. Откройте приемник команд и вычислите следующую строку кода:

ShowInterfaces objECtrl

В итоге выводится только один интерфейс, называемый IExprCtrl.

 

5. Откройте приемник команд и вычислите следующую строку кода:

ShowInterfaces objSCtrl

В итоге выводится только один интерфейс, называемый IScriptCtrl.

При ближайшем рассмотрении обнаруживается, что у каждого интерфейса имеется ряд следующих общих методов: GetExpression, SetExpression, GetDescription, SetDescription, GetOffset, Setoffset, GetValue, DeleteVariable, RenameVariable, Update и VariableExists. У них также имеется общее свойство ThrowOnError.

6. Вычислите следующие строки кода:

objECtrl.setExpression "F"

objSCtrl.setExpression "currentTime"

7. Воспроизведите анимацию.

Продолжительность анимации соответствует числу кадров. "F" — это специальный символ, используемый в выражениях для обозначения номера текущего кадра. Анимация обоих параллелепипедов получается практически одинаковой.

8. Откройте редактор кривых в окне Track View. Перейдите к треку свойства length объекта objE. Выделите его, щелкните правой кнопкой мыши и выберите команду Properties из контекстного меню, чтобы открыть диалоговое


Приложение

 

окно свойств данного объекта. Сделайте то же самое для объекта
objS. Обратите внимание на большое сходство диалоговых окон.

9. Далее внесите некоторую произвольность в увеличение размеров параллелепипеда. Этого нельзя добиться с помощью контроллера управления по выражению, но можно сделать с помощью контроллера управления по сценарию. Вычислите следующую строку кода:
objSCtrl.setExpression "currentTime + random 0 20"

10. Воспроизведите анимацию.

Окончательный код сценария должен выглядеть следующим образом:

delete objects
clearListener()

 

objE = box name: "objE"

objS = box name: "objS" pos: [50,0,0]

 

objECtrl = objE.length.controller = float_expression()
objSCtrl = objS.length.controller = float_script()

 

showInterfaces objECtrl -- Имеется один интерфейс: IExprCtrl.
showInterfaces objSCtrl -- Имеется один интерфейс: IScriptCtrl.

 

objECtrl.setExpression "F"

objSCtrl.setExpression "currentTime"

 

objSCtrl.setExpression "currentTime + random 0 20"

 

11. Для обратной совместимости сценарий из контроллера управления по сценарию можно получить и установить с помощью свойства .script.

Например, для получения сценария вычислите следующую строку кода:

objS.length.controller.script

В приемнике команд появится следующий результат:
"currentTime + random 0 20"

12. Для установки сценария вычислите следующую строку кода:
objSCtrl.script = "random -20 20"

Параллелепипед начнет подрагивать.

Это было очень краткое введение в контроллеры управления по выражению и сценарию. Дополнительные сведения по данному вопросу можно
найти в справочном руководстве по MAXScript.