Создание свойств для аддона

При разработке аддонов часто бывает необходимо предоставить пользователю возможность задавать ряд параметров, влияющих на общую работу аддона. Например, пользователь может указать постоянную директорию для загрузки/сохранения файлов или задать тот или иной режим работы аддона. Конечно, интерфейс для задания подобных параметров можно разместить и в рабочей панели аддона, но гораздо удобнее поместить его в отдельную панель свойств аддона, которая размещается под панелью инсталляции аддона в окне Preferences.

Основное преимущество определения таких глобальных свойств аддона в том, что они не сбрасываются при перезапуске Blender. Пользователю не нужно каждый раз производить настройку аддона, достаточно один раз установить нужные параметры, персонализировав аддон для удобной работы.

Создадим простейший аддон и добавим ему глобальный параметр, поместив его в панель свойств аддона:

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

Код аддона:

Здесь мы создали аддон с именем «test» для Blender версии 2.8.

В нем мы определяем класс-оператор с именем «addCubeSample», который вызывается по идентификатору «mesh.add_cube_sample».

В методе  «execute» класса-оператора мы просто вызываем системный оператор «mesh.primitive_cube_add», который и создает дефолтный куб.

Так же мы определили панель с именем «TEST» в окне 3D Viewport и разместили на ней кнопку вызова нашего оператора «mesh.add_cube_sample», создав класс «addCubeSamplePanel» для панели UI.

В функциях register и unregister мы управляем подключением аддона в Blender API.

Можно установить получившийся аддон и проверить его работу — по нажатию на кнопку «Add Cube» в сцену будет добавлен дефолтный куб.

Для того, чтобы добавить в аддон глобальные параметры, нужно создать новый класс, наследовав его от bpy.types.AddonPreferences:

Весь наш аддон размещается в одном файле (модуле), поэтому в качестве идентификатора bl_idname указывается имя текущего модуля аддона «__name__».

Если вы создаете параметры для многофайлового аддона, вместо имени модуля нужно указывать имя пакета аддона:

Для примера определим параметр, который будет влиять на общий ход работы аддона — при активации его пользователем на созданный куб будет автоматически накладываться модификатор Bevel.

Для этого внутри класса-свойства опишем сам параметр. Параметры создаются точно так же, как и для классов-операторов, используя типы, описанные в bpy.props: StringProperty, IntProperty, BoolProperty и т.д.

Для наглядности сделаем переключатель вида «RadioButton» с двумя вариантами выбора: «Add Bevel» — добавлять модификатор на создаваемый куб, и «No Bevel» — не добавлять.

Имя параметра «add_bevel», предустановленное значение — модификатор не добавляется.

Для того, чтобы отобразить параметр в панели свойств аддона, нужно переопределить функцию «draw» на отрисовку созданного параметра. Отрисовка пользовательского интерфейса для панели свойств аддона производится точно так же, как и для обычных панелей.

Здесь мы добавили текстовое поле «label» с описанием параметра и вывели сам параметр «add_bevel» в виде переключателя.

Класс панели свойств аддона так же нужно зарегистрировать в функции «register» и разрегистрировать в функции «unregister».

Для того, чтобы в классе-операторе получить текущее значение параметра из панели свойств аддона, нужно обратиться к нему, указав имя аддона и имя параметра. Следующий код вернет текущее значение свойства «add_bevel» нашего аддона.

Добавим дополнительное условие для создания модификатора при нужном значении параметра «add_bevel» в классе-операторе «addCubeSample:

Окончательный код аддона теперь имеет следующий вид:

После его установки в окне «Preferences» под панелью аддона появится дополнительная панель с его свойствами.

Если пользователь установит значение переключателя в «Add Bevel» и сохранит настройки, нажав на кнопку «Save Preferences», дефолтный куб, созданный при помощи нашего аддона по умолчанию будет создаваться с модификатором «Bevel».