row = layout.row() split = row.split(percentage=0.25)
col = split.column()
col.operator("my.button", text="21").loc="5 21"
col.operator("my.button", text="22")
split = split.split(percentage=0.3)
col = split.column()
col.operator("my.button", text="23")
split = split.split(percentage=0.5)
col = split.column()
col.operator("my.button", text="24")
col.operator("my.button", text="25")
# Кнопка
class OBJECT_OT_Button(bpy.types.Operator):
bl_idname = "my.button"
bl_label = "Button" number = bpy.props.IntProperty()
row = bpy.props.IntProperty()
loc = bpy.props.StringProperty()
def execute(self, context):
if self.loc:
words = self.loc.split()
self.row = int(words[0])
self.number = int(words[1])
print("Row %d button %d" % (self.row, self.number))
return{'FINISHED'}
# Регистрация
bpy.utils.register_module(__name__)
Свойства обсуждались в разделе Свойства, но мы не объяснили, как отображать заказные свойства на панели. Этот скрипт как раз делает это. 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