Запрос свойств
Свойства
Экземпляры
Объект, создаваемый средствами 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) теперь применяется к свойствам интерфейса публикации функций.