Макросы в Blender отличаются от операторов тем, что не требуют жесткого задания последовательности выполняемых действия при регистрации. В операторах действия определяются в функции «execute», для макросов же действия добавляются при помощи метода «define».
После того, как мы определили класс макроса и зарегистрировали его в Blender Python API:
|
1 2 3 4 5 |
class TestMacro(bpy.types.Macro): bl_idname = 'test.macro' bl_label = 'test macro' bpy.utils.register_class(TestMacro) |
Мы можем добавлять в него действия через «define».
Например, для добавления в сцену дефолтного куба:
|
1 |
TestMacro.define('MESH_OT_primitive_cube_add') |
Метод «define» возвращает указатель на выполняемый оператор, точно так же, как «self.layout.operator(…)» при формировании UI для пользовательских панелей.
Через этот указатель можно передавать в выполняемый макросом оператор нужные параметры.
Для того, чтобы макрос добавлял в сцену куб в точку с координатами X = 2.0, Y = 2.0, Z = 2.0, требуемые координаты можно задать через свойство «properties»:
|
1 2 |
action = TestMacro.define('MESH_OT_primitive_cube_add') action.properties.location = (2.0, 2.0, 2.0) |
Выполнив макрос,
|
1 |
bpy.ops.test.macro() |
мы добавим в сцену куб в точку с координатами 2.0, 2.0, 2.0.

.blend file on Patreon