12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import bpy
- from bpy.props import IntProperty, FloatProperty
- class ModalOperator(bpy.types.Operator):
- """Move an object with the mouse, example"""
- bl_idname = "object.modal_operator"
- bl_label = "Simple Modal Operator"
- first_mouse_x: IntProperty()
- first_value: FloatProperty()
- def modal(self, context, event):
- if event.type == 'MOUSEMOVE':
- delta = self.first_mouse_x - event.mouse_x
- context.object.location.x = self.first_value + delta * 0.01
- elif event.type == 'LEFTMOUSE':
- return {'FINISHED'}
- elif event.type in {'RIGHTMOUSE', 'ESC'}:
- context.object.location.x = self.first_value
- return {'CANCELLED'}
- return {'RUNNING_MODAL'}
- def invoke(self, context, event):
- if context.object:
- self.first_mouse_x = event.mouse_x
- self.first_value = context.object.location.x
- context.window_manager.modal_handler_add(self)
- return {'RUNNING_MODAL'}
- else:
- self.report({'WARNING'}, "No active object, could not finish")
- return {'CANCELLED'}
- def register():
- bpy.utils.register_class(ModalOperator)
- def unregister():
- bpy.utils.unregister_class(ModalOperator)
- if __name__ == "__main__":
- register()
- # test call
- bpy.ops.object.modal_operator('INVOKE_DEFAULT')
|