[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