通过bpy.ops.’bl_idname’,我们可以调用操作符,如果这个操作符内置了参数(必须是bpy.props的子类参数),我们也可以向这个操作符传入参数:

  1. num_x = 5
  2. num_y = 5
  3. for x in range(0,num_x):
  4. for y in range(0,num_y):
  5. bpy.ops.mesh.primitive_monkey_add(size=2, enter_editmode=False, align='WORLD',
  6. location=(x, y, 0),
  7. scale=(1, 1, 1))

这个操作符可以输入bpy.ops.mesh.primitive_monkey_add到控制台来获取其内部参数, 同样的,可以使用python的字典来传入对应参数

  1. parms = {
  2. size=2,
  3. enter_editmode=False,
  4. align='WORLD',
  5. location=(x, y, 0),
  6. scale=(1, 1, 1)
  7. }
  8. bpy.ops.mesh.primitive_monkey_add(**parms)

打包自己的操作符

操作符是可以被再次打包的,这样我们就能够得到一个我们自定义过的操作符,把它作为一个按钮放到我们想要放置的地方,以下是对默认添加猴头的操作符阵列化的一个操作

  1. import bpy
  2. class SimpleOperator(bpy.types.Operator):
  3. """Tooltip"""
  4. bl_idname = "object.simple_operator"
  5. bl_label = "Simple Object Operator"
  6. num_x:bpy.props.IntProperty(name='X Number',default=5)
  7. num_y:bpy.props.IntProperty(name='y Number',default=5)
  8. def execute(self, context):
  9. for x in range(0,self.num_x):
  10. for y in range(0,self.num_x):
  11. bpy.ops.mesh.primitive_monkey_add(size=2,
  12. enter_editmode=False,
  13. align='WORLD',location=(x, y, 0),
  14. scale=(1, 1, 1))
  15. return {'FINISHED'}
  16. def register():
  17. bpy.utils.register_class(SimpleOperator)
  18. def unregister():
  19. bpy.utils.unregister_class(SimpleOperator)
  20. if __name__ == "__main__":
  21. register()
  22. # test call
  23. bpy.ops.object.simple_operator()