Как определить был ли переопределен системный оператор

Для разрешения конфликтов между аддонами в Blender бывает необходимо знать, не был ли стандартный оператор Blender переопределен на пользовательский в каком-нибудь из сторонних аддонов.

Важно: переопределение системных операторов возможно в версиях Blender 3.4 и ниже. С версии 3.5 возможность переопределения системных операторов была отключена разработчиками.

Идентификатор оператора – значение параметра bl_idname, которое всегда указывается при определении класса пользовательских операторов. Он так же всегда следует за bpy.ops при вызове оператора.

Зная идентификатор оператора, можно выяснить, был ли такой оператор зарегистрирован в Blender Python API.

Получить указатели на все зарегистрированные в API модули операторов можно при помощи команды

Получить сами классы можно по указателю на модуль:

Пройдя по всем модулям и сверяя идентификатор классов с нужным, мы можем найти требуемый оператор:

Базовые операторы зарегистрированы в Blender “из коробки”, и поэтому не прописаны в bpy.types. Это значит, если мы нашли класс по идентификатору – оператор был переопределен в стороннем аддоне.

Мы можем определить функцию, возвращающую класс оператора, если он был переопределен в аддонах или None – если нет.

Автор кода Andrej

Передав в эту функцию в параметре значение bl_idname проверяемого оператора, мы получим в ответ либо указатель на его класс, если он был переопределен в API, либо None – если нет.

Полный код с примером проверки оператора bpy.ops.object.delete

В трех последних строках кода вызывается проверка.

Сначала оператор проверяется в изначальном состоянии API (когда он еще не переопределен), поэтому первый раз мы получаем ответ None.

Далее, регистрацией оператора с таким же идентификатором bl_idname = “object.delete”, он специально переопределяется на пользовательский.

Повторная проверка возвращает нам класс оператора, что означает, что он был переопределен.

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

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