• Панель является классом, производным от bpy.types.Panel
. У неё есть свойства и функция draw, которая вызывается каждый раз, когда панель перерисовывается.
• Оператор является классом, производным от bpy.types.Operator
. У него есть свойства, функция execute (выполнить), и необязательная функция invoke. Операторы можно зарегистрировать, чтобы они появились в меню. В частности, кнопка является оператором. Когда Вы нажимаете кнопку, вызывается функция execute.
Как панели, так и операторы должны быть зарегистрированы перед тем, как их начать использовать. Самый простой способ зарегистрировать все в файле — это закончить его с вызовом bpy.utils.register_module(__name__).
Интерфейсная часть API, по видимому, менее стабильна, чем другие части, так что код в этом разделе может стать неработоспособным в будущих выпусках.
Панели и кнопки
Эта программа добавляет пять различных панелей к интерфейсу пользователя в разных местах. Каждая панель имеет имя и кнопку. Для всех кнопок используется один и тот же оператор, но текст на кнопке может быть изменён текстовым аргументом. Когда Вы нажимаете кнопку, Блендер выводит приветствие на терминале.
Оператор кнопки может быть вызван без аргументов, как на первой панели:
self.layout.operator("hello.hello")
Блендер затем будет искать оператор со значением bl_idname, равным hello.hello
, и установит его на панели. Текст на кнопке устанавливается по умолчанию в его bl_label, то есть, Say Hello
. Класс OBJECT_OT_HelloButton
имеет также заказное свойство строкового типа (custom property) с именем country
(страна). Оно может быть использовано для передачи аргументов кнопке. Если оператор вызывается без аргумента, свойство country
устанавливается по умолчанию в пустую строку.
bl_idname
должно быть строкой, содержащей маленькие буквы, цифры и подчеркивания, плюс ровно одна точка; hello.hello удовлетворяет этим критериям. За исключением этого, по-видимому, у bl_idname нет никаких ограничений.
Вид и поведение кнопки по-умолчанию могут быть модифицированы. Давайте вызовем кнопку следующим образом:
self.layout.operator("hello.hello", text='Hej').country = "Sweden"
Текст на этой кнопке - Hej, и значение свойства country является "Sweden" (Швеция). Когда мы нажимаем эту кнопку, Блендер выводит в окне терминала.следующее:
Hello world from Sweden!
В конце файла всё регистрируется с помощью вызова
bpy.utils.register_module(__name__)
Наш вновь определенный оператор кнопки можно теперь использовать как любой другой оператор Блендера. Вот сеанс в консоли Питона Блендера:
>>> bpy.ops.hello.hello(country = "USA")
Hello world from USA!
{'FINISHED'}
Другой путь вызвать наш новый оператор — нажать Пробел . Появится селектор со всеми доступными операторами в позиции курсора мыши. Сократите выбор, набрав подстроку bl_label
нашего оператора в поле редактирования. Оператор с параметрами по-умолчанию выполнится, и Hello world!будет выведено в окне терминала.
#----------------------------------------------------------
# File hello.py
#----------------------------------------------------------
import bpy
#
# Меню в районе tools
#
class ToolsPanel(bpy.types.Panel):
bl_label = "Hello from Tools"
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
def draw(self, context):
self.layout.operator("hello.hello")
#
# Меню в районе toolprops
#
class ToolPropsPanel(bpy.types.Panel):
bl_label = "Hello from Tool props"
bl_space_type = "VIEW_3D"
bl_region_type = "TOOL_PROPS"
def draw(self, context):
self.layout.operator("hello.hello", text='Hej').country = "Sweden"
#
# Меню в районе UI
#
class UIPanel(bpy.types.Panel):
bl_label = "Hello from UI panel"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
def draw(self, context):
self.layout.operator("hello.hello", text='Servus')
#
# Меню в районе окна Properties, контекст объектов
#
class ObjectPanel(bpy.types.Panel):
bl_label = "Hello from Object context"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW" bl_context = "object"
def draw(self, context):
self.layout.operator("hello.hello", text='Bonjour').country = "France"
#
# Меню в районе окна Properties, контекст материалов
#
class MaterialPanel(bpy.types.Panel):
bl_label = "Hello from Material context"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW" bl_context = "material"
def draw(self, context):
self.layout.operator("hello.hello", text='Ciao').country = "Italy"
#
# Кнопка Hello выводит сообщение в консоли
#
class OBJECT_OT_HelloButton(bpy.types.Operator):
Читать дальше