Читайте также: |
|
Любой объект, класс которого ведет свое происхождение от MaxWrapper, наследует от него следующие свойства
MaxWrapper_объект. category
с помощью обращения к этому свойству можно получить имя категории объекта. Например, для сферы это свойство содержит имя #Standard_Primitives, а для лофт-объекта – #Compound_Objects. Для модификаторов имена категорий имеют вид #MAX_STANDARD, #MAX_EDIT, или #MAX_SURFACE, для текстур #2D, #3D или #COMP и т.д.
Как уже упоминалось в главе о скрипт-плугинах, каждый класс объектов имеет уникальный идентификатор. Получить этот идентификатор для конкретного объекта можно с помощью свойства
MaxWrapper_объект. classID
Например, у любой сферы это свойство содержит значение #(17, 0).
Наследники класса MaxWrapper получают от него не только свойства, но и методы. Наиболее часто применяется неоднократно упоминаемый раньше метод copy. Он был довольно подробно рассмотрен, поэтому перейдем к методу
exprForMaxObject MaxWrapper_объект
этот метод возвращает полное имя объекта в виде текстовой строки. Для примера рассмотрим следующий скрипт
b1 = box ()
exprForMaxObject b1
последний оператор вернет Вам текстовую строку “ $Box01 ”, то есть имя объекта, созданного первым оператором. Усложним задачу, создав модификатор изгиба
bm = Bend ()
скрипт
exprForMaxObject bm
вернет значение "unknown". Дело в том, что сам по себе модификатор не является элементом сцены, а следовательно, не имеет имени. Положение в корне изменится, когда мы применим модификатор к ранее созданному объекту
addmodifier b1 bm
exprForMaxObject bm
Теперь модификатор имеет имя " $Box01.modifiers[#Bend] "
Довольно часто при написании скрипт-плугинов, создающих сетчатые объекты, применяется следующий прием. Создается стандартный объект, а затем из его сетки делается то, что нам нужно. В этом случае может помочь функция
createInstance Класс
В качестве первого параметра ему передается название класса объекта. Например
s = createInstance Sphere
В результате в переменной s будет храниться сфера, но не как элемент сцены, то есть в видовых окнах ее видно не будет. Получившаяся сфера будет иметь радиус, количество сегментов, сетку и т.д., но не будет иметь координат центра и вообще матрицы трансформации. Параметры создаваемого объекта можно задавать после указания класса. Например, с помощью скрипта
b = createInstance Box length:10 height:40 width:20
создается параллелепипед с заданными значениями длинны, высоты и ширины.
Рассмотрим так же еще одну полезную функцию, работающую с потомками класса MaxWrapper
refs.dependents MaxWrapper_объект
Результатом этой функции будет массив объектов, которые ссылаются на указанный. Например, создадим сферу, а затем назначим ей стандартный материал
s = sphere ()
m = standard ()
s.material = m
после этого скрипт
refs.dependents m
выдаст следующий результат: #($Sphere:Sphere01 @ [0.000000,0.000000,0.000000]). Тем самым демонстрируется, что на материал m ссылается сфера Sphere01. Если бы тот же материал был назначен и другим объектам, то имена этих объектов так же оказались бы в выходном массиве.
Еще одним полезным свойством объектов, потомков MaxWrapper, является возможность ассоциировать с любым объектом произвольную информацию. Эта информация сохраняется в файле сцены и восстанавливается при его загрузке. Создать ее можно с помощью функции
setAppData MaxWrapper_объект Целое_число Символьная_строка
Первый параметр указывает объект, к которому присоединяются данные, второй параметр – уникальный идентификатор для этих данных. С помощью этого параметра одному объекту можно поставить в соответствие несколько наборов данных. Третий параметр – символьная строка, содержащая сами данные. Присоединенные данные можно получить с помощью функции
getAppData MaxWrapper_объект Целое_число
где первый параметр – объект, для которого данные запрашиваются, а второй – идентификатор данных. Он должен быть тем же, что был задан в функции setAppData, определившей данные для этого объекта. Для удаления данных у объекта можно вызвать функцию
deleteAppData MaxWrapper_объект Целое_число
которая удалит данные, соответствующие указанному объекту и идентификатору. Если надо удалить данные для некого объекта, но для всех идентификаторов, то для этого используется функция
clearAllAppData MaxWrapper_объект
Класс Node
Этот класс, будучи опять-таки абстрактным, является потомком класса MAXWrapper. От него происходят классы, объекты которых могут быть узлами иерархий объектов. Например, НЕ являются его потомками материалы, контроллеры, текстуры и т.д. А вот геометрические примитивы, источники света, камеры – суть потомки класса Node.
Дата добавления: 2015-10-31; просмотров: 61 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Объекты 3ds max | | | Общие свойства и методы потомков класса Node |