[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