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

В некоторых случаях, необходимо обеспечить, чтобы аддон всегда загружался при запуске 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 Комментарий
Новые
Старые Популярные