Экземпляр

Копия

Введение

В 3dsMax имеется немало элементов пользовательского интерфейса, включая панели команд, свитки, диалоговые и обычные окна. Кроме того, в пользователь­ском интерфейсе 3dsMax можно выполнять немало тех действий, которые обычно выполняются в видовых окнах, а также команды доступа к внешним файлам. Столь глубокая структура пользовательского интерфейса 3dsMax становится причиной значительных потерь времени при решении сложных или часто повторяющихся задач. Подобные задачи, как правило, автоматизируются полностью или частично с помощью сценариев.

В MAXScript имеется достаточно функций и команд для работы практически со всеми элементами пользовательского интерфейса. Поэтому в интересах индивидуальных пользователей или студий — уделить серьезное внимание вопросам эффективного использования интерфейса 3dsMax, чтобы найти пути повышения производительности своего повседневного труда.

Тема доступа к пользовательскому интерфейсу средствами MAXScript слишком обширна, чтобы охватить ее в одной главе. Поэтому в данной главе рассмат­риваются лишь самые важные вопросы.

Получение копии, экземпляра и ссылки

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

Следует, однако, иметь в виду, что копирование и получение экземпляра рас­пространяется не только на объекты, находящиеся на сцене, в том виде, в каком они представлены в MAXScript, но и на многие типы данных. Например, копировать можно строки, цвета, растры, значения угла поворота вокруг осей и т.д. В этом разделе речь пойдет о копировании на сцене примитивных объектов. А что


Глава 3

касается копирования данных других типов, обращайтесь по этому вопросу за до­полнительной справкой к справочному руководству по MAXScript.

Здесь и далее предполагается, что вы знаете, как пользоваться копией, экземп­ляром и ссылкой в 3dsMax вручную.

Синтаксис команды копирования следующий: copy <узел>

Для копирования объекта выполните следующее упражнение.

1. Установите 3dsMax в исходное состояние и откройте окно приемника команд MAXScript Listener. Введите в этом окне следующую строку кода:

b = box heightsegs: 8

В этой строке создается стандартный параллелепипед с 8 сегментами по высоте.

2. Введите следующую строку кода:

c = copy b

В этой строке создается копия параллелепипеда. Она располагается в том же месте, где и исходный параллелепипед b.

3. Введите следующую строку кода:

move c [25,0,0]

Анализ вновь скопированного параллелепипеда (хранящегося в переменной c) показывает, что он отделен от оригинала. Любые изменения в параллелепипеде c не оказывают влияния на параллелепипед b. У скопированного параллелепипеда имеются собственные свойства, модификаторы и прочие атрибуты, которые могут быть изменены, не оказывая влияния на оригинал или другие копии.

В данном случае была отдельно вызвана функция move, чтобы можно было визуально различить оба параллелепипеда.

Но обе приведенные выше строки кода можно объединить в одну следующим образом:

d = copy c pos: [50,0,0]

В этой строке создается копия параллелепипеда c в другом месте сцены.

Синтаксис команды получения экземпляра следующий: instance <узел>

Продолжите в следующем упражнении работу над предыдущим примером, но на этот раз создайте экземпляр параллелепипеда b.


Интерфейс 3dsMax

1. Введите в окне приемника команд следующую строку:
i = instance b pos: [0,25,0]

В этой строке создается экземпляр исходного параллелепипеда, находящегося в точке начала отсчета, т.е. параллелепипед i. Экземпляр располагается в точке, указанной в приемнике команд.

2. Введите следующую строку кода:

addmodifier i (bend())

3. Выделите полученный экземпляр параллелепипеда и перейдите к панели команд Modify. Измените параметры сгибания модификатора Bend, наблюдая результаты в видовом окне.

Изменения, вносимые в параллелепипед i, сказываются и на параллелепипеде B. С другой стороны, изменения, вносимые в параллелепипед b, приводят к обновлению параллелепипеда i. Это классический пример поведения на сцене полученных экземпляров объектов. Экземпляры имеют общие с исходным объектом свойства, модификаторы, материалы и карты, а также контроллеры управления анимацией, но не преобразования, пространственные исказители или путевые имена.

4. Продолжая предыдущий пример, удалите модификатор Bend. Для этого введите в окне приемника команд следующую строку кода:

deletemodifier i 1

Функция deletemodifier воспринимает полученный экземпляр объекта в качестве первого аргумента, а индекс удаляемого модификатора — в качестве второго аргумента. Индекс модификатора, находящегося на вершине стека, равен 1 и постепенно увеличивается в направлении дна стека модификаторов.