Мы можем задавать объектам в Blender дополнительные свойства при помощи Blender Python API. Кастомные свойства объектам могут назначаться классическим образом, как объекты классов bpy.props, так и упрощенным способом – простым присваиванием нужного свойства объекту. Однако, если в первом случае мы сразу получаем набор средств для управления свойством, такие как, ограничение максимального и минимального значения, значение по умолчанию и т.д., то во втором случае по умолчанию у присвоенного свойства ничего подобного нет.
Однако API Blender позволяет нам создавать возможности управления даже для простых динамических свойств, назначенных объектам.
Давайте для примера присвоим текущему активному объекту простое динамическое свойство целочисленного типа с именем “my_prop” и зададим для него значение 55.
Для этого нужно выполнить следующий код:
|
1 |
bpy.context.object['my_prop'] = 55 |
Проверим, что свойство успешно назначено на объект.
|
1 2 3 |
print('my_prop:', bpy.context.object['my_prop']) # my_prop: 55 |
Создадим пользовательскую панель в рабочей области 3D вьюпорта с названием “TEST” и выведем назначенное нами свойство на нее.
|
1 2 3 4 5 6 7 8 9 |
class TEST_PT_panel(bpy.types.Panel): bl_idname = 'TEST_PT_panel' bl_label = 'TEST PANEL' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'TEST' def draw(self, context): self.layout.prop(bpy.context.object, '["my_prop"]') |
После регистрации панели в Blender Python API,
|
1 |
bpy.utils.register_class(TEST_PT_panel) |
она появится во вьюпорте.
Теперь мы можем быстро менять значение свойства “my_prop”, просто редактируя его в поле на нашей панели.
Сейчас мы можем назначать свойству любые значения. Но как быть, если мы хотим ограничить диапазон возможных значений свойства, например, от 0 до 100?
Это можно сделать через объект id_properties_ui (bpy.types.IDPropertyUIManager), который предназначается как раз для контроля динамических свойств через UI.
Создадим для нашего свойства объект управления:
|
1 2 3 |
ui = bpy.context.object.id_properties_ui('my_prop') # <bpy id prop ui manager: name="my_prop", address=0x00000238280787E0> |
Теперь с его помощью мы можем контролировать наше простое динамическое свойство объекта так же легко, как и его обычные свойства.
Назначим для нашего свойства описание (выводится при наведении на свойство мышкой), а так же минимальное и максимальное возможные значения.
|
1 2 3 |
ui.update(description='My Custom Property') ui.update(min=0, soft_min=0) ui.update(max=100, soft_max=100) |
Теперь, если мы попытаемся ввести в поле свойства на нашей панели число не попадающее в заданный интервал (от 0 до 100), у нас ничего не получится. Так же если мы будем скроллить по полю нашего свойства мышкой и дойдем до предела, значение будет зафиксировано на минимально или максимально возможном в заданном интервале.
Заданное описание так же будет выводиться при наведении мышкой на поле нашего свойства.

.blend file on Patreon