Чтение онлайн

ЖАНРЫ

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

Larsson Thomas

Шрифт:

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)

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"]')

Скрипт напечатает следующий результат на консоль:

<bpy_struct, Object("Cube")> RNA properties Cube.myRnaInt = -99

Cube.myRnaFloat = 1.0

Cube.myRnaString = I am an RNA prop

Cube.myRnaBool = True

Cube.myRnaEnum = three

<bpy_struct, Mesh("Cube.001")> ID properties

Cube.001["MyIdInt"] = 4711

Cube.001["MyIdFloat"] = 666.777

Cube.001["MyIdString"] = I am an ID prop

Cube.001["MyIdBool"] = 1

<bpy_struct, Object("Cylinder")> RNA properties

Cylinder.myRnaInt = 33

Cylinder.myRnaFloat = 12.345000267028809

Cylinder.myRnaString = Ribonucleic acid

Cylinder.myRnaBool = False

Cylinder.myRnaEnum = one

<bpy_struct, Mesh("Cylinder")> ID properties

Cylinder["MyIdInt"] does not exist

Cylinder["MyIdFloat"] does not exist

Cylinder["MyIdString"] does not exist

Cylinder["MyIdBool"] does not exist

<bpy_struct, Object("Sphere")> RNA properties

Поделиться с друзьями: