Запрос свойств

Свойства

Экземпляры

Объект, создаваемый средствами MAXScript, называется экземпляром данного класса MAXScript. Так, созданные вами ранее объекты b и c являются экземпля­рами классов Box и Capsule соответственно. Не путайте эту разновидность эк­земпляра c клоном объекта сцены, поскольку это совсем разные вещи.

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

Для изучения экземпляров выполните следующее упражнение.

1. Введите в приемнике команд следующую строку кода: box.name

В ответ на эту строку кода в приемнике команд появится сообщение об ошибке, поскольку в ней предпринята попытка воспользоваться свойством с помощью класса, а не экземпляра данного класса.

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

Эта команда возвращает имя параллелепипеда и не приводит к ошибке.

Совет. Если Box01 фактически является именем объекта сцены, его можно также использовать следующим образом:

$Box01.name

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

В справочном руководстве по MAXScript имя класса в угловых скобках <> обозначает экземпляр данного класса, указанного в этих скобках. Например, <Capsule> означает экземпляр класса Capsule, тогда как <node> — экземпляр любого объекта в классах, стоящих в иерархии ниже класса Node.

Если объект — это какая-то вещь, то свойство — это сведения о вещи. Рассмот­рим в качестве реального примера чашку, стоящую на столе. Если чашка — это объект, то цвет, размер, текстура и температура являются свойствами чашки.

У каждого объекта в MAXScript имеются определенные свойства. С некоторыми свойствами объектов вам уже приходилось иметь дело в сценариях из предыдущих глав этой книги. В частности, у параллелепипедного объекта имеются свойства, перечисленные в разделе "Box: GeometryClass" справочного руководства по MAXScript. Эти же свойства появляются, когда к объекту применяется метод showProperties.

Более подробно свойства рассматриваются в конце этого раздела.


Глава 4

Метод showProperties был представлен в качестве функции в главе 1. Данный метод полезен для вывода свойств объекта в окне приемника команд. В этом подразделе представлены дополнительные способы доступа к свойствам объекта.

Довольно часто приходится решать задачу определения свойств объекта, а главное — получать доступ к этим свойствам. Допустим, например, что требуется сохранить в массиве все значения, описывающие параллелепипед. Для решения такой задачи можно было бы, на первый взгляд, воспользоваться методом showProperties и вывести свойства данного объекта в окне приемника команд. Но в этом случае нельзя ни получить доступ к свойствам объекта, ни возвратить их в строке. Следовательно, для возврата массива значений требуется специальный метод. Именно это и делает метод getPropNames. Его синтаксис следующий:

getPropNames <maxwrapper_object> [#dynamicOnly]

Данный метод возвращает массив значений в виде имен свойств, доступных в указанном объекте.

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

Для получения имен свойств выполните следующее упражнение.

1. Установите 3dsMax в исходное состояние и откройте новое окно редактора сценариев.

2. Откройте окно приемника команд и введите следующий фрагмент кода:

b = box()

boxProps = getPropNames b

В приемнике команд выводится массив, содержащий свойства параллелепипеда:

#(#height, #length, #lengthsegs, #width, #widthsegs, \

#mapcoords, #heightsegs, #realWorldMapSize)

Это те же самые свойства, которые отображаются для параллелепипеда на панели Modify.

Примечание. В версии 3dsMax 8 метод getPropNames (наряду с методом showProperties) теперь применяется к свойствам интерфейса публикации функций.