Python

Как сохранить данные меша в текст

Иногда бывает необходимо сохранить данные для создания меша (массивы его вертексов и индексов полигонов) в текст, например, для дальнейшего использования в скрипте или аддоне.

Можно экспортировать меш в один из открытых форматов, например в *.obj, но если нужны только данные по вертексам и полигонам, можно использовать следующий несложный скрипт:

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

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

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

Как узнать текущую версию Blender через Python API

Для того, чтобы получить текущую версию Blender, нужно выполнить команду:

или

Рисование в окне вьюпорта

API Blender предоставляет возможность рисовать в окне вьюпорта (3D Viewport) при помощи модуля gpu.

Для примера нарисуем в центре сцены упрощенный виджет системы координат, состоящий из трех линий разного цвета.

Как привязать к нажатию кнопки вызов функции, а не оператора

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

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

Как получить все возможные значения свойства Enum

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

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

TypeError: bpy_struct: item.attr = val: enum “xxx” not found in (‘value_001′, value_002’, …)

где:

xxx – значение, которые мы попытались задать свойству EnumProperty

value_001, value_002, … – возможные значения, которые может принимать данное свойство EnumProperty

Как переместить курсор к нужному вертексу

Для того, чтобы передвинуть курсор к определенному вертексу меша нужно выполнить следующий код:

Умножение на матрицу мира должно осуществляться именно в таком порядке (матрица слева).

Добавление объекта в сцену в Blender 2.80 Python API

В API Blender 2.79 созданный объект добавляется в сцену через:

Попытка добавить объект в сцену таким образом в Blender 2.80, приводит к ошибке:

‘bpy_prop_collection’ object has no attribute ‘link’

В Blender 2.80 API добавлять объект нужно не в саму сцену, а в ее коллекции.

Добавить объект в активную коллекцию:

Добавить объект в коллекцию по ее имени:

 

Как поставить курсор в начало или в конец активного стрипа в Blender VSE

Чтобы поставить курсор в начало активного стрипа в Blender VSE нужно выполнить команду:

Чтобы переместить курсор в конец активного стрипа:

 

Передача параметров в оператор

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

Передаваемый параметр должен быть определен, как свойство оператора.