[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28874] trunk/blender/release/scripts/ templates/operator_modal_view3d.py: view3d modal operator template
Campbell Barton
ideasman42 at gmail.com
Thu May 20 09:49:41 CEST 2010
Revision: 28874
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28874
Author: campbellbarton
Date: 2010-05-20 09:49:41 +0200 (Thu, 20 May 2010)
Log Message:
-----------
view3d modal operator template
Added Paths:
-----------
trunk/blender/release/scripts/templates/operator_modal_view3d.py
Added: trunk/blender/release/scripts/templates/operator_modal_view3d.py
===================================================================
--- trunk/blender/release/scripts/templates/operator_modal_view3d.py (rev 0)
+++ trunk/blender/release/scripts/templates/operator_modal_view3d.py 2010-05-20 07:49:41 UTC (rev 28874)
@@ -0,0 +1,56 @@
+from mathutils import Vector
+from bpy.props import FloatVectorProperty
+
+class ViewOperator(bpy.types.Operator):
+ '''Translate the view using mouse events.'''
+ bl_idname = "view3d.modal_operator"
+ bl_label = "Simple View Operator"
+
+ offset = FloatVectorProperty(name="Offset", size=3)
+
+
+ def execute(self, context):
+ v3d = context.area.spaces[0]
+ rv3d = v3d.region_3d
+
+ rv3d.view_location = self._initial_location + Vector(self.properties.offset)
+
+ def modal(self, context, event):
+ v3d = context.area.spaces[0]
+ rv3d = v3d.region_3d
+
+ if event.type == 'MOUSEMOVE':
+ self.properties.offset = (self._initial_mouse - Vector((event.mouse_x, event.mouse_y, 0.0))) * 0.02
+ self.execute(context)
+
+ elif event.type == 'LEFTMOUSE':
+ return {'FINISHED'}
+
+ elif event.type in ('RIGHTMOUSE', 'ESC'):
+ rv3d.view_location = self._initial_location
+ return {'CANCELLED'}
+
+ return {'RUNNING_MODAL'}
+
+ def invoke(self, context, event):
+ active_space = context.area.spaces[0]
+
+ if active_space.type == 'VIEW_3D':
+ v3d = active_space
+ rv3d = v3d.region_3d
+
+ context.manager.add_modal_handler(self)
+
+ if rv3d.view_perspective == 'CAMERA':
+ rv3d.view_perspective = 'PERSP'
+
+ self._initial_mouse = Vector((event.mouse_x, event.mouse_y, 0.0))
+ self._initial_location = rv3d.view_location.copy()
+
+ return {'RUNNING_MODAL'}
+ else:
+ self.report({'WARNING'}, "Active space must be a View3d")
+ return {'CANCELLED'}
+
+
+bpy.types.register(ViewOperator)
More information about the Bf-blender-cvs
mailing list