Создание кастомного свойства

API Blender предоставляет для использования набор простых типов свойств, описанных в bpy.props (IntProperty,  BoolProperty и т.д.). Но базовых типов не всегда хватает, иногда нужны более сложные. API Blender позволяет группировать простые свойства, создавая таким образом более сложные.

Рассмотрим создание такого свойства на примере матрицы 3х3.

Сначала опишем класс со структурой создаваемого свойства.

Матрицу 3х3 можно представить, как комбинацию трех векторов, следовательно мы можем использовать три свойства FloatVectorProperty чтобы описать матрицу:

Класс созданного кастомного свойства нужно зарегистрировать в функциях register и очистить в unregister.

Для того, чтобы присвоить созданное свойство с матрицей какому-либо объекту (мешу), нужно создать указатель на него. Сделаем это также в функции register и удалим в unregister.

Объединим все вместе:

Мы придали каждому мешу свойство matrix_prop, к которому теперь можем обращаться в любой момент. Например, чтобы получить значение первого элемента первой строки матрицы:

Однако, чтобы получить всю матрицу, такое обращение неудобно. Добавим к классу созданного нами свойства Matrix3x3_property геттер и сеттер для удобного присваивания/получения его значения.

Теперь мы можем назначать или получать значения свойства в удобном виде.

Задание значения:

и получение:

Также можно определить функцию __repr__ для удобной печати значения.

Итоговый код:

Nikita

Автор: Nikita

Blender add-ons developer and articles writer.