Paste Code
Paste Blends
Paste Images
import bgl
import blf

def draw_callback_px(self, context):
print("mouse points", len(self.mouse_path))

# draw some text
blf.position(15, 30, 0)
blf.size(20, 72)
blf.draw("Hello Word " + str(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 = "view3d.modal_operator"
bl_label = "Simple Modal View3D 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()
  1. import bgl
  2. import blf
  3.  
  4. def draw_callback_px(self, context):
  5.     print("mouse points", len(self.mouse_path))
  6.  
  7.     # draw some text
  8.     blf.position(15, 30, 0)
  9.     blf.size(20, 72)
  10.     blf.draw("Hello Word " + str(len(self.mouse_path)))
  11.  
  12.     # 50% alpha, 2 pixel width line
  13.     bgl.glEnable(bgl.GL_BLEND)
  14.     bgl.glColor4f(0.0, 0.0, 0.0, 0.5)
  15.     bgl.glLineWidth(2)
  16.  
  17.     bgl.glBegin(bgl.GL_LINE_STRIP)
  18.     for x, y in self.mouse_path:
  19.         bgl.glVertex2i(x, y)
  20.  
  21.     bgl.glEnd()
  22.  
  23.     # restore opengl defaults
  24.     bgl.glLineWidth(1)
  25.     bgl.glDisable(bgl.GL_BLEND)
  26.     bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
  27.  
  28.  
  29. class ModalDrawOperator(bpy.types.Operator):
  30.     '''Draw a line with the mouse'''
  31.     bl_idname = "view3d.modal_operator"
  32.     bl_label = "Simple Modal View3D Operator"
  33.  
  34.     def modal(self, context, event):
  35.         context.area.tag_redraw()
  36.  
  37.         if event.type == 'MOUSEMOVE':
  38.             self.mouse_path.append((event.mouse_region_x, event.mouse_region_y))
  39.  
  40.         elif event.type == 'LEFTMOUSE':
  41.             context.region.callback_remove(self._handle)
  42.             return {'FINISHED'}
  43.  
  44.         elif event.type in ('RIGHTMOUSE', 'ESC'):
  45.             context.region.callback_remove(self._handle)
  46.             return {'CANCELLED'}
  47.  
  48.         return {'RUNNING_MODAL'}
  49.  
  50.     def invoke(self, context, event):
  51.         if context.area.type == 'VIEW_3D':
  52.             context.manager.add_modal_handler(self)
  53.            
  54.             # Add the region OpenGL drawing callback
  55.             # draw in view space with 'POST_VIEW' and 'PRE_VIEW'
  56.             self._handle = context.region.callback_add(draw_callback_px, (self, context), 'POST_PIXEL')
  57.  
  58.             self.mouse_path = []
  59.  
  60.             return {'RUNNING_MODAL'}
  61.         else:
  62.             self.report({'WARNING'}, "View3D not found, cannot run operator")
  63.             return {'CANCELLED'}
  64.  
  65.  
  66. def register():
  67.     bpy.types.register(ModalDrawOperator)
  68.  
  69.  
  70. def unregister():
  71.     bpy.types.unregister(ModalDrawOperator)
  72.  
  73.  
  74. if __name__ == "__main__":
  75.     register()
go to heaven