Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 19
>
> printProp(ob, ".myRnaInt")
> printProp(ob, ".myRnaFloat")
> printProp(ob, ".myRnaString")
> printProp(ob, ".myRnaBool")
> printProp(ob, ".myRnaEnum")
> print("%s ID properties" % ob.data)
> printProp(ob.data, '["MyIdInt"]')
> printProp(ob.data, '["MyIdFloat"]')
> printProp(ob.data, '["MyIdString"]')
> printProp(ob.data, '["MyIdBool"]')
Скрипт напечатает следующий результат на консоль:
>
> Cube.myRnaFloat = 1.0
> Cube.myRnaString = I am an RNA prop
> Cube.myRnaBool = True
> Cube.myRnaEnum = three
>
> Cube.001["MyIdInt"] = 4711
> Cube.001["MyIdFloat"] = 666.777
> Cube.001["MyIdString"] = I am an ID prop
> Cube.001["MyIdBool"] = 1
>
> Cylinder.myRnaInt = 33
> Cylinder.myRnaFloat = 12.345000267028809
> Cylinder.myRnaString = Ribonucleic acid
> Cylinder.myRnaBool = False
> Cylinder.myRnaEnum = one
>
> Cylinder["MyIdInt"] does not exist
> Cylinder["MyIdFloat"] does not exist
> Cylinder["MyIdString"] does not exist
> Cylinder["MyIdBool"] does not exist
>
> Sphere.myRnaInt = 33 Sphere.myRnaFloat = 12.345000267028809
> Sphere.myRnaString = Ribonucleic acid
> Sphere.myRnaBool = False
> Sphere.myRnaEnum = one
>
> Sphere["MyIdInt"] does not exist
> Sphere["MyIdFloat"] does not exist
> Sphere["MyIdString"] does not exist
> Sphere["MyIdBool"] does not exist
Все три объекта имеют RNA-свойства, поскольку они являются расширением типа данных Object. RNA-свойствам Куба программой присвоены значения, кроме значения myRnaFloat, которое не может быть меньше чем 1. Цилиндру и сфере никаких свойств присвоено не было, но они все равно имеют RNA-свойства со значением по умолчанию.
Мешу куба программой были заданы ID-свойства. Заметьте, что свойство MyIdBool является целочисленной 1, а не логической True.
Свойства Объекта отображаются в панели пользовательского интерфейса под Properties, и также в контексте объекта. Свойства меша можно найти в контексте меша.
Как мы видели в распечатке, мы можем иметь доступ к RNA-свойствам объекта сферы. Тем не менее, они не появляются в интерфейсе пользователя. Очевидно, только присвоенные значения свойств сохраняются в блоке данных Объекта. Мы можем использовать RNA-свойство, которое не присвоено в скрипте; при этом берется значение по умолчанию. В противовес этому, если мы попытаемся получить доступ к незаданному ID-свойству, будет возбуждена ошибка.
Свойства совместимы со связями файлов. Сохраните blend-файл и привяжите (link) куб в новый файл. Как RNA-, так и ID-свойства появляются в новом файле, но они серые, поскольку они не могут быть доступны в связанном файле.
Если мы проксим (proxify) связанный куб, свойства объекта принадлежат блоку данных прокси-объекта, и могут быть модифицированы в связанном файле. В противовес этому, свойства меша принадлежат блоку данных меша и не могут изменяться.
Как упомянуто выше, свойства сохранены в blend-файлах, но декларации свойств — нет. Закройте и перезапустите Блендер и откройте файл, который мы сохранили выше. Свойства myRnaBool и myRnaEnum окажутся преобразованными в целые. Фактически, они и были сохранены как целые всё время, но отображались как логические и перечисления из-за продекларированных свойств, сохранённых в типе данных Object.
Чтобы подтвердить, что RNA-свойства превратились в ID-свойства, выполните следующий скрипт.
>#----------------------------------------------------------
># File print_props.py
>#----------------------------------------------------------
>import bpy
>def printProp(rna, path):
> try:
> print(' %s%s =' % (rna.name, path), eval("rna"+path))
> except:
> print(' %s%s does not exist' % (rna.name, path))
>ob = bpy.context.object print("%s RNA properties" % ob)
>printProp(ob, ".myRnaInt")
>printProp(ob, ".myRnaFloat")
>printProp(ob, ".myRnaString")