Вложенные свойства
Получение и установка свойств
Итак, имея массив свойств параллелепипеда, можно воспользоваться методами getProperty и setProperty для получения и установки его свойств. Синтаксис каждого из этих методов следующий:
getProperty <maxwrapper object> <property_name>
setProperty <maxwrapper object> <property_name> <value>
Объекты и классы
В качестве параметра <property_name> указывается имя свойства, например
#height, или же строка, например "height" (т.е. высота). А в качестве параметра <value> указывается значение, присваиваемое данному свойству.
Для получения и установки свойств объекта выполните следующее упражнение.
1. Введите в приемнике команд следующую строку кода:
getProperty b #height
В приемнике команд появится результат 25,0.
2. Выделите параллелепипед в видовом окне и перейдите к панели Modify.
Убедитесь в том, что высота параллелепипеда действительно составляет
25,0 единиц (это значение устанавливается по умолчанию).
3. Введите следующую строку кода:
setProperty b #height 40
4. Как видите, высота параллелепипеда в видовом окне изменилась и теперь
составляет 40,0 единиц. Эту последнюю строку кода можно было бы написать следующим образом:
b.height = 40.
Последний вариант короче и проще читается. Так в чем же преимущество ме
тодов getProperty и setProperty? Если в коде сценария требуется доступ
только к одному свойству, для этого достаточно такой строки, как b.height
= 40. Но если требуется доступ ко всем свойствам объекта, для этой цели
лучше всего воспользоваться методами getPropNames и setProperty.
Примечание. При установке свойства следует убедиться в том, что
значение последнего аргумента соответствует типу устанавливаемого
свойства. Например, следующая строка кода приводит к ошибке:
setProperty b #height "foo" -- этот код приводит к ошибке
5. Продолжите текущий пример и выведите свойства параллелепипеда и их
значения на печать в приемнике команд, введя следующий фрагмент кода:
boxProps = getPropNames b
for prop in boxProps do format "% = %\n" prop (getProperty b prop)
В окне приемника команд выводятся следующие свойства параллелепипеда
и их значения:
#height = 25.0
#length = 25.0
#lengthsegs = 1
#width = 25.0
#widthsegs = 1
#mapcoords = false
#heightsegs = 1
#realWorldMapSize = false
Дополнительные сведения по данному вопросу приведены вследующем разделе справочного руководства по MAXScript: MAXScript Language Reference ⇨ 3dsMax Objects ⇨ ldentifying and Accessing MAXScript Classes and Properties.
Глава 4
Некоторые свойства имеют собственные свойства. Например, как было показано выше, у свойства .pos имеются дополнительные свойства .x, .y и .z, обозначающие положение объекта по осям X, Y и Z. Эти дополнительные свойства называются вложенными.
Следующая команда возвращает положение объекта по оси X, представленное числом:
<node>.pos.x
Для того чтобы воспользоваться данным свойством, замените <node> экземпляром объекта, как, например, в следующей строке кода: b.pos.x
При этом возвращается положение объекта по оси X.
Следующая команда возвращает применяемый к объекту контроллер управления вращением:
<node>.rotation.controller
Дополнительные сведения по данному вопросу приведены в следующих разделах справочного руководства по MAXScript.
• MAXScript Language Reference ⇨ 3dsMax Objects ⇨ MAXWrapper: Valued Nested Object Properties (Справочник по языку MAXScript ⇨ Объекты 3dsMax Класс MAXWrapper: Значение ⇨ Вложенные свойства объектов)
• MAXScript Language Referenceo 3dsMax Objects ⇨ Node: MAXWrapper ⇨ Node Common Properties, Operators, and Methods ⇨ Node Transform Properties
(Справочник по языку MAXScript ⇨ Объекты 3dsMax ⇨ Класс Node: MAXWrapper ⇨ Общие свойства, операторы и методы класса Node ⇨ Свойства преобразования узла)
Класс MAXWrapper
Класс MAXWrapper включает в себя все объекты сцены 3dsMax, а также модификаторы, материалы и эффекты. Ниже приведена часть иерархии класса MAXWrapper.
Value
MAXWrapper
Node
Modifier
Atmospheric
Рассмотрим более подробно класс Modifier.
В MAXScript каждый модификатор, по существу, считается объектом. Для того чтобы воспользоваться объектом-модификатором, необходимо получить его экземпляр. Так, если требуется применить модификатор Bend к объекту, для этого придется получить экземпляр данного модификатора.
Для ввода модификатора, выполните следующее упражнение.
Объекты и классы
1. Перейдите к разделу MAXScript Language Reference ⇨ 3dsMax Objects ⇨ Modifier: MAXWrapper and Spacewarp Modifier: MAXWrapper ⇨ Modifier and Spacewarp Modifier Types ⇨ Modifiers (Справочник по языку MAXScript ⇨ Объекты 3dsMax ⇨ Класс Modifier: Классы MAXWrapper Spacewarp Modifier: MAXWrapper ⇨ Типы Modifier и Spacewarp Modifier ⇨ Модификаторы) справочного руководства по MAXScript.
В этом разделе приведены все классы объектов, стоящие ниже класса Modifier.
2. Введите в приемнике команд следующую строку кода:
cyl = cylinder heightsegs:5
Таким образом, получен экземпляр цилиндра с пятью сегментами по высоте.
3. Переместите цилиндр в любом видовом окне в сторону от параллелепипеда, чтобы лучше его видеть.
4. Введите следующую строку кода: myMod = bend()
Итак, получен экземпляр модификатора Bend.
5. Введите в приемнике команд следующую строку кода:
addmodifier cyl myMod
В этой строке модификатор Bend применяется к экземпляру цилиндра и появляется в стеке модификаторов цилиндра. Для того чтобы ввести модификатор Bend в цилиндр, вам пришлось получить его экземпляр и затем использовать этот экземпляр в последней строке кода, чтобы применить данный модификатор к объекту.
Если вы являетесь опытным пользователем 3dsMax, то такой принцип применения модификаторов может показаться вам несколько запутанным. Ведь когда вы работаете в пользовательском интерфейсе 3dsMax, вам не нужно создавать модификатор или контроллер в качестве отдельного объекта, прежде чем применять его к объекту. Вы просто выбираете его из меню или панели команд. Но в MAXScript приходится создавать экземпляр каждого элемента сцены, прежде чем делать с интерфейсом что-нибудь.
Впрочем, из данного правила имеются исключения; но, прежде чем уяснить их, нужно как следует усвоить порядок получения экземпляров всех объектов в MAXScript — даже таких, как модификаторы, которые не являются объектами сцены.
Для изучения свойств модификаторов выполните следующее упражнение.
1. Откройте раздел "Bend: Modifier" (Модификатор Bend) справочного руководства по MAXScript.
Свойства модификатора Bend совпадают с его параметрами, появляющимися в момент применения данного модификатора в сцене 3dsMax.
Экземпляр модификатора Bend, присвоенный переменной myMod, сохраняет свою связь с конкретным модификатором в сцене 3dsMax. Следовательно,
Глава 4
когда изменяются свойства переменной myMod, изменяются также параметры модификатора Bend, применяемого на сцене к цилиндру.
2. Введите в приемнике команд следующую строку кода: myMod.angle = 90
Параметр Angle (Угол сгибания) модификатора Bend, находящегося на сцене, изменяется до 90° и цилиндр сгибается.
Когда модификатор применяется к объекту, а сам модификатор трактуется, как свойство данного объекта. Например, в следующей строке кода устанавливается угол сгибания модификатора Bend:
c.bend.angle = 60