Revision: 38749
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38749
Author:   merwin
Date:     2011-07-26 22:43:07 +0000 (Tue, 26 Jul 2011)
Log Message:
-----------
shift-motion to pan with 3D mouse

Modified Paths:
--------------
    branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_edit.c
    branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_intern.h
    branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_ops.c

Modified: 
branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_edit.c  
2011-07-26 22:00:42 UTC (rev 38748)
+++ branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_edit.c  
2011-07-26 22:43:07 UTC (rev 38749)
@@ -1104,12 +1104,12 @@
        return OPERATOR_FINISHED;
 }
 
-void VIEW3D_OT_ndof(struct wmOperatorType *ot)
+void VIEW3D_OT_ndof_orbit(struct wmOperatorType *ot)
 {
        /* identifiers */
-       ot->name = "Navigate view";
-       ot->description = "Navigate the view using a 3D mouse.";
-       ot->idname = "VIEW3D_OT_ndof";
+       ot->name = "NDOF Orbit View";
+       ot->description = "Explore every angle of an object using the 3D 
mouse.";
+       ot->idname = "VIEW3D_OT_ndof_orbit";
 
        /* api callbacks */
        ot->invoke = ndof_orbit_invoke;
@@ -1119,6 +1119,79 @@
        ot->flag = 0;
 }
 
+static int ndof_pan_invoke(bContext *C, wmOperator *op, wmEvent *event)
+// -- "pan" navigation
+// -- zoom or dolly?
+{
+       RegionView3D* rv3d = CTX_wm_region_view3d(C);
+       wmNDOFMotionData* ndof = (wmNDOFMotionData*) event->customdata;
+
+       rv3d->rot_angle = 0.f; // we're panning here! so erase any leftover 
rotation from other operators
+
+       if (ndof->progress != P_FINISHING) {
+               const float dt = ndof->dt;
+               float view_inv[4];
+#if 0 // ------------------------------------------- zoom with Z
+               // tune these until everything feels right
+               const float zoom_sensitivity = 1.f;
+               const float pan_sensitivity = 1.f;
+
+               float pan_vec[3] = {
+                       ndof->tx, ndof->ty, 0
+                       };
+
+               // "zoom in" or "translate"? depends on zoom mode in user 
settings?
+               if (ndof->tz) {
+                       float zoom_distance = zoom_sensitivity * rv3d->dist * 
dt * ndof->tz;
+                       rv3d->dist += zoom_distance;
+               }
+       
+               mul_v3_fl(pan_vec, pan_sensitivity * rv3d->dist * dt);
+#else // ------------------------------------------------------- dolly with Z
+               float speed = 10.f; // blender units per second
+               // ^^ this is ok for default cube scene, but should scale 
with.. something
+
+               // tune these until everything feels right
+               const float forward_sensitivity = 1.f;
+               const float vertical_sensitivity = 0.4f;
+               const float lateral_sensitivity = 0.6f;
+
+               float pan_vec[3] = {
+                       lateral_sensitivity * ndof->tx,
+                       vertical_sensitivity * ndof->ty,
+                       forward_sensitivity * ndof->tz
+                       };
+
+               mul_v3_fl(pan_vec, speed * dt);
+#endif
+               /* transform motion from view to world coordinates */
+               invert_qt_qt(view_inv, rv3d->viewquat);
+               mul_qt_v3(view_inv, pan_vec);
+
+               /* move center of view opposite of hand motion (this is camera 
mode, not object mode) */
+               sub_v3_v3(rv3d->ofs, pan_vec);
+       }
+
+       ED_region_tag_redraw(CTX_wm_region(C));
+
+       return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_ndof_pan(struct wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "NDOF Pan View";
+       ot->description = "Position your viewpoint with the 3D mouse.";
+       ot->idname = "VIEW3D_OT_ndof_pan";
+
+       /* api callbacks */
+       ot->invoke = ndof_pan_invoke;
+       ot->poll = ED_operator_view3d_active;
+
+       /* flags */
+       ot->flag = 0;
+}
+
 /* ************************ viewmove ******************************** */
 
 

Modified: 
branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- 
branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_intern.h    
    2011-07-26 22:00:42 UTC (rev 38748)
+++ 
branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_intern.h    
    2011-07-26 22:43:07 UTC (rev 38749)
@@ -73,7 +73,8 @@
 void VIEW3D_OT_zoom_camera_1_to_1(struct wmOperatorType *ot);
 void VIEW3D_OT_move(struct wmOperatorType *ot);
 void VIEW3D_OT_rotate(struct wmOperatorType *ot);
-void VIEW3D_OT_ndof(struct wmOperatorType *ot);
+void VIEW3D_OT_ndof_orbit(struct wmOperatorType *ot);
+void VIEW3D_OT_ndof_pan(struct wmOperatorType *ot);
 void VIEW3D_OT_view_all(struct wmOperatorType *ot);
 void VIEW3D_OT_viewnumpad(struct wmOperatorType *ot);
 void VIEW3D_OT_view_selected(struct wmOperatorType *ot);

Modified: 
branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_ops.c   
2011-07-26 22:00:42 UTC (rev 38748)
+++ branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_ops.c   
2011-07-26 22:43:07 UTC (rev 38749)
@@ -64,7 +64,8 @@
        WM_operatortype_append(VIEW3D_OT_zoom);
        WM_operatortype_append(VIEW3D_OT_zoom_camera_1_to_1);
        WM_operatortype_append(VIEW3D_OT_dolly);
-       WM_operatortype_append(VIEW3D_OT_ndof);
+       WM_operatortype_append(VIEW3D_OT_ndof_orbit);
+       WM_operatortype_append(VIEW3D_OT_ndof_pan);
        WM_operatortype_append(VIEW3D_OT_view_all);
        WM_operatortype_append(VIEW3D_OT_viewnumpad);
        WM_operatortype_append(VIEW3D_OT_view_orbit);
@@ -163,7 +164,8 @@
        RNA_boolean_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_all", CKEY, 
KM_PRESS, KM_SHIFT, 0)->ptr, "center", 1);
 
        /* 3D mouse */
-       WM_keymap_add_item(keymap, "VIEW3D_OT_ndof", NDOF_MOTION, 0, 0, 0);
+       WM_keymap_add_item(keymap, "VIEW3D_OT_ndof_orbit", NDOF_MOTION, 0, 0, 
0);
+       WM_keymap_add_item(keymap, "VIEW3D_OT_ndof_pan", NDOF_MOTION, 0, 
KM_SHIFT, 0);
        WM_keymap_add_item(keymap, "VIEW3D_OT_view_selected", NDOF_BUTTON_FIT, 
KM_PRESS, 0, 0);
        RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", 
NDOF_BUTTON_FRONT, KM_PRESS, 0, 0)->ptr, "type", RV3D_VIEW_FRONT);
        RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", 
NDOF_BUTTON_BACK, KM_PRESS, 0, 0)->ptr, "type", RV3D_VIEW_BACK);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to