Создание в аддонах Blender переменных с сохраняемыми значениями

Все определенные пользователем классы (панели, операторы), если они зарегистрированы в API, существуют только пока запущен сам графический редактор Blender. В момент закрытия программы все они удаляются из памяти. Поэтому, даже если внутри пользовательских классов определены какие-то переменные, все значения этих переменных при перезапуске программы будут сброшены.

Однако, иногда бывает необходимо использовать в аддоне Blender переменную, значение которой не будет потеряно в процессе перезапуска программы. Чтобы переменная сохраняла свое значение, нужно создать ее в виде специального класса — свойства (property), и присоединить к какому-либо объекту, свойства которого сохраняются в *.blend файле.

Создадим демонстрационный класс-свойство SampleVariables, который будет хранить внутри себя набор переменных.

Для того, чтобы превратить пользовательский класс в полноценное свойство, необходимо наследовать его от bpy.types.PropertyGroup. Для примера разместим внутри нашего класса две переменные variable1 (числового типа) и variable2 (логического типа), значение которых необходимо сохранять при выходе из программы. Тип этих двух переменных возьмем из bpy.props, чтобы можно было вынести их на панель и удобно изменять их значения.

Как и любой пользовательский класс, для включения в API класс-свойство необходимо зарегистрировать через register_class и разрегистрировать по окончании работы через unregister_class:

Также создадим панель SamplePanel, разместим ее в T-панели в области свойств, и вынесем на нее эти две переменные:

И, самое главное, класс-свойство нужно присоединить в качестве свойства к одному из сохраняемых в *.blend файле объектов. Для этого может послужить любой объект, к которому логически относятся данные переменные. В нашем примере они не привязаны ни к чему конкретному, поэтому сделаем их свойством всей сцены.

Привязку необходимо делать в момент регистрации:

и удалять в момент разрегистрации аддона:

Мы привязали наш пользовательский класс SampleVars в качестве свойства сцены sample_vars. Поэтому в классе-панели для взаимодействия с переменными в layout указывается объект bpy.context.scene.sample_vars.

Полный код демонстрационного аддона, который создает две переменные, привязывает их в качестве свойства к сцене и выводит на T-панель для изменения значений:

Переменные с сохраняемыми в *.blend файле значениями
Переменные с сохраняемыми в *.blend файле значениями

Выведенные на панель переменные сохранят установленные значения после перезапуска Blender.