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

Панель свойств

Панель свойств

Свойства обсуждались в разделе Свойства, но мы не объяснили, как отображать заказные свойства на панели. Этот скрипт как раз делает это. RNA-свойство отображается синтаксисом

layout.prop(ob, 'myRnaInt')

ID-свойства отображаются с помощью

layout.prop(ob, '["myRnaInt"]')

Заметьте, что панель регистрируется явно с помощью bpy.utils.register_class(MyPropPanel) вместо использования register_module, который регистрирует всё. Какой метод использовать, не имеет значения в этом примере, поскольку MyPropPanel - единственное, что нужно зарегистрировать.


#----------------------------------------------------------
# File panel_props.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)
# Определение RNA-свойств для каждого меша
bpy.types.Mesh.myRnaFloat = FloatProperty(
    name="RNA float",
    default = 12.345)
# Присвоение RNA-свойств кубу
cube.myRnaInt = -99
cube.data.myRnaFloat = -1
# Создание ID-свойств посредством присвоения
cube["MyIdString"] = "I am an ID prop"
cube.data["MyIdBool"] = True
# Панель свойств
class MyPropPanel(bpy.types.Panel):
    bl_label = "My properties"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI" 
    def draw(self, context):
        ob = context.object
        if not ob:
            return
        layout = self.layout
        layout.prop(ob, 'myRnaInt')
        try:
            ob["MyIdString"]
            layout.prop(ob, '["MyIdString"]')
        except:
            pass
        if ob.type == 'MESH':
            me = ob.data
            layout.prop(me, 'myRnaFloat')
            try:
                me["MyIdBool"]
                layout.prop(me, '["MyIdBool"]')
            except:
                pass
# Регистрация
bpy.utils.register_class(MyPropPanel)

Оглавление книги


Генерация: 0.549. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз