Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 18
>
> if space.type == 'VIEW_3D':
> space.viewport_shade = 'SOLID'
> reg = space.region_3d
> reg.view_perspective = 'CAMERA' break
> return
>def run():
> setRenderSettings()
> setDefaultCameraView()
> # стартует анимация, к несчастью в старом виде.
> bpy.ops.screen.animation_play(reverse=False, sync=False)
> return
>if __name__ == "__main__":
> run()
Свойства (Properties)
В Блендере есть два различных типа свойств: ID-свойства и RNA-свойства. RNA-свойства расширяют определение структуры данных. Они должны быть объявлены до того, как будут использоваться.
Я потратил некоторое время на выяснение того, как же расшифровывается и что означает аббревиатура RNA для программирования на Питоне в Блендере. Может быть, я был недостаточно настойчив в поисках, но всё, что я нашел — это РНК, Рибонуклеиновая кислота. Разработчики применили химико-биологическую метафору для обозначения реальных структур данных на языке С (DNA, в переводе ДНК) и соответствующих им структур на Питоне (RNA, в переводе РНК). С понятием ID, думаю все и так знакомы, это сокращение слова Идентификатор. - прим. пер.
>bpy.types.Object.myRnaInt = bpy.props.IntProperty(
> name = "RNA int",
> min = -100,
> max = 100,
> default = 33)
Как только RNA-свойства были объявлены, они будут доступны через точечный синтаксис:
>cube.myRnaInt = -99
После декларации RNA-свойства myRnaInt расширяет определение структуры данных Object, каждый объект будет иметь это свойство.
ID-cвойство добавляется к единственному блоку данных, не влияя на другие данные того же самого типа. Ему не нужна какая-либо предварительная декларация, но оно автоматически определяется при присвоении, напр.
>cube.data["MyIdInt"] = 4711
ID-свойства могут только быть целыми, вещественными, и строками; другие типы автоматически будут преобразованы. Следовательно, строка
>cube.data["MyIdBool"] = True
определяет целое ID-свойство, а не логическое.
Не знаю, как в предыдущих версиях, а в 2.57 вполне можно определять списки — прим. пер.
Свойства сохраняются в blend-файле, но декларации свойств — нет.
Вот скрипт, который создает три меша, назначает различные свойства и печатает их величины в консоли.
>#----------------------------------------------------------
># File properties.py
>#----------------------------------------------------------
>import bpy
>from bpy.props import *
># Очистка сцены и создание нескольких объектов
>bpy.ops.object.select_by_type(type='MESH')
>bpy.ops.object.delete()
>bpy.ops.mesh.primitive_cube_add(location=(-3,0,0))
>cube = bpy.context.object
>bpy.ops.mesh.primitive_cylinder_add(location=(0,0,0))
>cyl = bpy.context.object
>bpy.ops.mesh.primitive_uv_sphere_add(location=(3,0,0))
>sphere = bpy.context.object
># Определение RNA-свойства для каждого объекта
>bpy.types.Object.myRnaInt = IntProperty(
> name = "RNA int",
> min = -100, max = 100,
> default = 33)
>bpy.types.Object.myRnaFloat = FloatProperty(
> name = "RNA float",
> default = 12.345,
> min = 1, max = 20)
>bpy.types.Object.myRnaString = StringProperty(
> name = "RNA string",
> default = "Ribonucleic acid")
>bpy.types.Object.myRnaBool = BoolProperty(
> name = "RNA bool")
>bpy.types.Object.myRnaEnum = EnumProperty(
> items = [('one', 'eins', 'un'),
> ('two', 'zwei', 'deux'),
> ('three', 'drei', 'trois')],
> name = "RNA enum")
># Присвоение RNA-свойств кубу
>cube.myRnaInt = -99
>cube.myRnaFloat = -1
>cube.myRnaString = "I am an RNA prop"
>cube.myRnaBool = True
>cube.myRnaEnum = 'three'
># Создание ID-свойств для меша куба присвоением значений.
>cube.data["MyIdInt"] = 4711
>cube.data["MyIdFloat"] = 666.777
>cube.data["MyIdString"] = "I am an ID prop"
>cube.data["MyIdBool"] = True
># Печать всех свойств
>def printProp(rna, path):
> try:
> print(' %s%s =' % (rna.name, path), eval("rna"+path))
> except:
> print(' %s%s does not exist' % (rna.name, path))
>for ob in [cube, cyl, sphere]:
> print("%s RNA properties" % ob)