При написании аддонов важно размещать элементы UI – кнопки, поля, переключатели и т.д. таким образом, чтобы пользователь легко находил их и имел к ним удобный доступ. Для размещения кастомного UI Blender предоставляет разработчикам аддонов следующие области:
- Боковая панель “Sidebar” в левой части любой рабочей области Blender. Часто ее называют “N-панелью” так как чаще всего она открывается по нажатию на клавишу “n” на клавиатуре.
- Панели в рабочей области Properties.
Для того чтобы создать панель с UI для аддона, нужно определить класс панели, наследуя его от системного класса bpy.types.Panel и зарегистрировать его в Blender API.
Простейший класс панели имеет следующую структуру:
1 2 3 4 5 6 7 8 9 |
class TEST_PT_panel(bpy.types.Panel): bl_idname = 'TEST_PT_panel' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'TEST' bl_label = 'TEST PANEL' def draw(self, context): # place your UI here |
Местоположение панели определяется значениями параметров, которые указываются в самом начале определения класса:
bl_space_type – указывает на общее месторасположение панели – ту рабочую область в которой ее необходимо разместить. Например:
bl_label – последний параметр просто уточняет заголовок создаваемой панели UI.
Например, для того чтобы разместить панель в рабочей области 3D вьюпорта, в его боковой Sidebar-панели, в группе Tools, нам нужно указать:
1 2 3 |
bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'Tool' |
Если вместо “Tool” указать какое-нибудь уникальное значение – в Sidebar-панели будет создана вкладка с таким названием и наша панель UI будет размещена на ней.
Пример класса для размещения панели UI в Sidebar рабочей области 3D вьюпорта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class TEST_PT_panel(Panel): bl_idname = 'TEST_PT_panel' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'TEST' bl_label = 'TEST PANEL' def draw(self, context): # sample operator call self.layout.operator( operator='mesh.primitive_monkey_add', icon='BLENDER', text='' ) |
Для того чтобы разместить нашу панель на одной из вкладок рабочей области Properties, вместо параметра bl_category указывается параметр bl_context.
bl_context – возможные значения, соответсвующее вкладкам: render, output, view_layer, scene, world, collection, object, modifier, physics, constraint, data, material, texture.
Например, для того чтобы разместить нашу панель в рабочей области Properties во вкладке Render нужно указать:
1 2 3 |
bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' bl_context = "render" |
Пример класса для размещения панели UI в рабочей области Properties во вкладке Render:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class TEST_PT_panel_p(Panel): bl_idname = 'TEST_PT_panel_p' bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' bl_context = "render" bl_label = 'TEST PANEL' def draw(self, context): # sample operator call self.layout.operator( operator='mesh.primitive_monkey_add', icon='BLENDER', text='' ) |
А можно удалить ненужные панели? Большое количество аддонов создаёт кнопки, которые мне например не нужны и я хочу из как нибудь скрыть из вьюпорта
Кнопки – вряд ли, для этого нужно перерегистрировать класс или функцию формирования UI. Можно убрать сами панели, разрегистрировав их классы. Можно переместить все панели в одну, изменив параметр bl_category.