Макросы в 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.