Создание кастомного инструмента в Blender

В Blender, начиная с версии 2.8x, появилась новая панель инструментов, расположенная в рабочей области 3D вьюпорта с левой стороны. Создавать пользовательские инструменты и добавлять их в эту панель можно при помощи Blender Python API.

Для того чтобы создать пользовательский инструмент, его, точно так же как и пользовательские операторы, нужно описать в отдельном классе.

Для инструментов класс должен быть наследован от базового класса bpy.types.WorkSpaceTool.

Далее, так же как и для операторов, нужно определить обязательные параметры инструмента:

bl_space_type — рабочую область, в которой будет использоваться инструмент. Например, «VIEW_3D» для 3D вьюпорта.

bl_context_mode — контекст инструмента, например «EDIT», если инструмент используется в режиме редактирования объекта.

bl_idname — идентификатор для данного инструмента.

bl_label — краткое описание инструмента. Появляется при наведении на иконку курсора мышки.

bl_description — полное описание инструмента. Появляется при задержке курсора над иконкой инструмента. Может быть многострочным, если задано в формате кортежа.

bl_icon — указатель на иконку для инструмента, которая будет отображаться в панели инструментов. Все иконки, доступные для инструментов, лежат в отдельных файлах в директории

Названия файлов соответствуют идентификатору иконки, который нужно указать в параметре bl_icon.

И, самое основное — параметр bl_keymap — действия, которые инструмент будет выполнять.

В этом параметре в виде кортежа описывается список возможных действий инструмента. Каждый элемент — одно действие.

Каждое действие описывается отдельным кортежом.

Первый элемент такого кортежа — идентификатор оператора, без префикса bpy.ops. Именно этот оператор будет выполнен при использовании инструмента. Например, для выбора объекта во вьюпорте указывается значение «view3d.select».

Второй элемент кортежа — словарь с параметрами вызова инструмента. Здесь описываются действия пользователя. Например, клик левой кнопкой мышки описывается следующим образом:

Третий элемент кортежа представляет собой еще один словарь, в котором указываются параметры, передаваемые в оператор. Например, для того, чтобы снять выделение со всех объектов, в оператор view3d.select нужно передать параметр «deselect_all» со значением True.  В нашем случае указание параметра будет задаваться следующим образом:

Пример класса для создания пользовательского инструмента, эмулирующего выделение объектов кликами и рамкой:

Автор кода Andrej.

Для того чтобы подключить данный инструмент в панель инструментов 3D вьюпорта нужно зарегистрировать класс в Blender Python API:

Если код выполняется из текстового редактора Blender нужно обновить окно вьюпорта, переведя на него курсор мышки, или вызвав обновление при помощи кода:

5 2 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии