Создание кастомного инструмента в 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 1 голос
Article Rating
Подписаться
Уведомить о
guest

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