forked from bartvdbraak/blender
70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
|
import BGL
|
||
|
|
||
|
def draw_callback_px(self, context):
|
||
|
print("mouse points", len(self.mouse_path))
|
||
|
|
||
|
# 50% alpha, 2 pixel width line
|
||
|
BGL.glEnable(BGL.GL_BLEND)
|
||
|
BGL.glColor4f(0.0, 0.0, 0.0, 0.5)
|
||
|
BGL.glLineWidth(2)
|
||
|
|
||
|
BGL.glBegin(BGL.GL_LINE_STRIP)
|
||
|
for x, y in self.mouse_path:
|
||
|
BGL.glVertex2i(x, y)
|
||
|
|
||
|
BGL.glEnd()
|
||
|
|
||
|
# restore opengl defaults
|
||
|
BGL.glLineWidth(1)
|
||
|
BGL.glDisable(BGL.GL_BLEND)
|
||
|
BGL.glColor4f(0.0, 0.0, 0.0, 1.0)
|
||
|
|
||
|
|
||
|
class ModalDrawOperator(bpy.types.Operator):
|
||
|
'''Draw a line with the mouse'''
|
||
|
bl_idname = "object.modal_operator"
|
||
|
bl_label = "Simple Modal Operator"
|
||
|
|
||
|
def modal(self, context, event):
|
||
|
context.area.tag_redraw()
|
||
|
|
||
|
if event.type == 'MOUSEMOVE':
|
||
|
self.mouse_path.append((event.mouse_region_x, event.mouse_region_y))
|
||
|
|
||
|
elif event.type == 'LEFTMOUSE':
|
||
|
context.region.callback_remove(self._handle)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
elif event.type in ('RIGHTMOUSE', 'ESC'):
|
||
|
context.region.callback_remove(self._handle)
|
||
|
return {'CANCELLED'}
|
||
|
|
||
|
return {'RUNNING_MODAL'}
|
||
|
|
||
|
def invoke(self, context, event):
|
||
|
if context.area.type == 'VIEW_3D':
|
||
|
context.manager.add_modal_handler(self)
|
||
|
|
||
|
# Add the region OpenGL drawing callback
|
||
|
# draw in view space with 'POST_VIEW' and 'PRE_VIEW'
|
||
|
self._handle = context.region.callback_add(draw_callback_px, (self, context), 'POST_PIXEL')
|
||
|
|
||
|
self.mouse_path = []
|
||
|
|
||
|
return {'RUNNING_MODAL'}
|
||
|
else:
|
||
|
self.report({'WARNING'}, "View3D not found, cannot run operator")
|
||
|
return {'CANCELLED'}
|
||
|
|
||
|
|
||
|
def register():
|
||
|
bpy.types.register(ModalDrawOperator)
|
||
|
|
||
|
|
||
|
def unregister():
|
||
|
bpy.types.unregister(ModalDrawOperator)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
register()
|