Ориджин к центру выделения – оборачиваем в аддон

В прошлый раз мы написали небольшой скрипт для быстрого перемещения ориджина объекта к центру выделения. Теперь мы можем быстро выполнять эту операцию, но для этого нужно держать открытой дополнительную рабочую область с текстом скрипта. Чтобы избавиться от этого неудобства, превратим наш скрипт в аддон и назначим его на удобный кейбинд.

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

Здесь мы указали имя аддона “origin2”, под этим именем он будет находится в списке аддонов, общую категорию “All”, версию нашего аддона и версию Blender – 4.5, для которой он предназначен.

Определим класс для оператора из которого будет выполняться код нашего скрипта.

Название класса оператора мы определяем сами, однако добавляем в него обязательную вставку _OT_, что укажет API Блендера, что мы хотим создать именно оператор.

В параметре bl_idname мы задаем уникальный идентификатор для нашего оператора. Через него будет происходить вызов в API.

bl_label – текстовое обозначение оператора.

А в bl_options мы задаем параметры регистрации нашего оператора в Blender API и включения его вызовов в систему глобальной отмены (чтобы его действия отменялось по нажатию клавиш Ctrl+z).

Основной выполняемый код, который мы практически в точности копируем из нашего предыдущего скрипта, мы помещаем в функцию оператора execute.

Возвращаемое значение из функции execute всегда должно быть {“FINISHED”}, это особенность операторов Blender.

Так как в параметрах функции мы передаем context, в нашем коде мы можем обращаться к контексту не через глобальный указатель bpy.context, а через указатель, переданный в параметре функции.

Теперь подвяжем выполнение оператора на нажатие комбинации клавиш.

Определим для этого класс KeyMap

И создадим в нем список, пока пустой, в которой поместим привязку вызова оператора к нажатию клавиш на клавиатуре.

Определим две функции, register() и unregister() для создания привязки к нажатию клавиш и ее удалению.

В функции register() мы сначала создаем новый keymap – список привязок операторов на нажатие клавиш, а потом добавляем в него собственно привязку keymap_item.

В параметрах привязки мы указываем bl_idname нашего оператора, код клавиши, на которую вешается вызов оператора, а так же дополнительные параметры, например требование одновременно зажимать дополнительные функциональные клавиши Ctlr, Alt или Shift.

В нашем примере мы создаем привязку на нажатие (“PRESS”) клавиши “c” с одновременным нажатием клавиш Shift и Ctrl.

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

Определим функцию unregister().

Она будет вызываться при удалении или деактивации нашего аддона.

Код этой функции просто удаляет все привязки, которые мы создали для кеймапа, после чего удаляет сам кеймап.

Остался последний момент – определим две функции для регистрации и разрегистрации нашего аддона в Blender Python API.

В функции register() мы регистрируем в Blender API наш оператор и вызываем функцию для регистрации нашего кеймапа.

В функции unregister() мы делаем обратные действия, которые удаляют оператор из Blender API и снимают привязку вызова оператора к нажатию клавиш.

Сохраним наш аддон в файл origin2.py.

И установим его в Blender стандартным образом: откроем рабочую область Preferences, переключимся на вкладку Add-ons, нажмем на стрелочку в правом верхнем углу и выберем Install from Disk… .

Теперь в поле поиска начнем набирать “origin”, пока не увидим строку с нашим аддоном. Отметим галочку в этой строке, чтобы активировать аддон. Нажмем “Save Preferences” (если у вас отключено автоматическое сохранение настроек), чтобы при следующем запуске Blender аддон активировался самостоятельно.

На этом все.

В рабоче область 3D вьюпорта в режиме редактирования при нажатии на сочетание клавиш Ctrl + Shift + c ориджин будет мгновенно переставлен в центр выделенной геометрии.

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

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