Загружаем аддон всегда последним

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

При запуске Blender аддоны загружаются по порядку, в соответствии со списком bpy.context.preferences.addons, порядок расположения аддонов в котором определяется тем, в каком порядке их активировал пользователь.

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

Для примера напишем классы для двух простейших аддонов: First и Second.

Класс аддона First:

Класс аддона Second

Обратите внимание на вызов команды print в функции register аддонов. С ее помощью мы будем отслеживать реальный порядок загрузки аддонов.

Сохраним классы в отдельные файлы .py и установим из этих файлов аддоны в Blender. Сначала установим аддон “Second” а после него – аддон “First”. Сохраним пользовательские настройки.

Просмотрев список bpy.context.preferences.addons:

Мы видим, что наши аддоны будут загружены последними по порядку, сначала “Second” и следом за ним “First”.

Мы можем убедиться в этом, запустив Blender из системной консоли, чтобы видеть вывод сообщений из функций аддонов register.

Внесем изменения в аддон “Second” так, чтобы  он всегда загружался последним.

Манипуляции с загрузкой аддона мы можем производить внутри его функции register.

Добавим в код функции register аддона “Second” проверку, не находится ли аддон на последнем месте в списке bpy.context.preferences.addons.

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

Добавим так же в условие else – сюда мы попадаем, если Blender уже загружает аддон, но после него в списке bpy.context.preferences.addons есть еще аддоны.

В этом случае мы получаем указатель на аддон в списке bpy.context.preferences.addons и через него удаляем аддон с текущего места в списке.

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

Когда Blender дойдет до конца списка, а последним элементом списка снова будет указатель на наш аддон “Second”, он попытается зарегистрировать его снова и так как на этот раз аддон регистрируется с последнего места в списке, его регистрация пройдет успешно.

Для того чтобы аддон не выпадал в ошибку при вызове функции unregister, добавим дополнительную переменную second_registered в которой будем отмечать действительно ли аддон зарегистрирован или его регистрация перенесена на последнее место в списке аддонов.

Переустановим наши аддоны, опять в порядке сначала “Second”, потом – “First”.

Теперь если мы запустим Blender из консоли, мы увидим следующий вывод:

Blender сначала попытается зарегистрировать аддон “Second” с текущего места, регистрация пропускается, а аддон переносится на последнее место в списке. Затем регистрируется аддон “First”. После чего производится повторная регистрация аддона “Second”, уже последним по порядку.

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

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