Вызов инструментов из панели пользовательского UI в Blender

В большинстве случаев инструменты (Tools) проще всего активировать нажатием на кнопки в панели инструментов (T-панель). Однако при разработке аддона с пользовательским UI, может оказаться удобным перенести вызов нужных инструментов на кнопки в пользовательской панели.

Создадим класс для простейшей панели UI:

В функции draw() создадим одну кнопку для активации инструмента, например, инструмента трансформации Transform.

При помощи класса ToolSelectPanelHelper получим идентификатор иконки от инструмента Transform.

Теперь нам нужно оформить вызов оператора. Активацию инструмента в Blender Python API можно произвести вызовом оператора wm.tool_set_by_id(), передав в его параметре name идентификатор нужного инструмента.

Код может быть примерно таким:

В целом, этот вариант будет работать. Однако периодически будут возникать сбои, например, будут некорректно прорисовываться кнопки в пользовательской панели, или инструмент не будет вызываться, если панель открыта с клавиатуры, и т.п.

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

Оформим простейший класс пользовательского оператора. В его функцию execute() поместим вызов инструмента wm.tool_set_by_id().

Осталось в классе панели в функции draw() привязать к кнопке вызов нашего кастомного оператора.

Не забудьте зарегистрировать классы панели и оператора в Blender Python API.

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

0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии