[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38749] branches/merwin-spacenav/source/ blender/editors/space_view3d: shift-motion to pan with 3D mouse

Mike Erwin significant.bit at gmail.com
Wed Jul 27 00:43:07 CEST 2011


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);




More information about the Bf-blender-cvs mailing list