Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Erwin <significant.bit@gmail.com>2011-07-25 04:20:45 +0400
committerMike Erwin <significant.bit@gmail.com>2011-07-25 04:20:45 +0400
commitc692351fdfe96ec396af9f9c1dfc92ae4e8ee5c6 (patch)
tree3cd63315de45e22aabfc2af101317e0c6476ac54 /source/blender/editors/space_view3d/view3d_edit.c
parente31fef1d94c38f4701f12d7f264fe145446f08b6 (diff)
added option to invert axes for orbiting (part 1 of 2)
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_edit.c')
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 0c07df9fd01..aabacadf3db 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -1019,6 +1019,8 @@ static int ndof_orbit_invoke(bContext *C, wmOperator *op, wmEvent *event)
if (has_rotation) {
+ const int invert = U.ndof_flag & NDOF_ORBIT_INVERT_AXES;
+
rv3d->view = RV3D_VIEW_USER;
if (U.flag & USER_TRACKBALL) {
@@ -1027,8 +1029,8 @@ static int ndof_orbit_invoke(bContext *C, wmOperator *op, wmEvent *event)
float view_inv[4], view_inv_conj[4];
ndof_to_quat(ndof, rot);
- // scale by rot_sensitivity?
- // mul_qt_fl(rot, rot_sensitivity);
+ // mul_qt_fl(rot, rot_sensitivity * (invert ? -1.f : 1.f));
+ // ^^ no apparent effect
invert_qt_qt(view_inv, rv3d->viewquat);
copy_qt_qt(view_inv_conj, view_inv);
@@ -1038,6 +1040,10 @@ static int ndof_orbit_invoke(bContext *C, wmOperator *op, wmEvent *event)
mul_qt_qtqt(rot, view_inv, rot);
mul_qt_qtqt(rot, rot, view_inv_conj);
+ // if (invert)
+ // invert_qt(rot);
+ // ^^ argh!! this does something crazy
+
// apply rotation
mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, rot);
@@ -1053,12 +1059,16 @@ static int ndof_orbit_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* Perform the up/down rotation */
angle = rot_sensitivity * dt * ndof->rx;
+ if (invert)
+ angle = -angle;
rot[0] = cos(angle);
mul_v3_v3fl(rot+1, xvec, sin(angle));
mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, rot);
/* Perform the orbital rotation */
angle = rot_sensitivity * dt * ndof->ry;
+ if (invert)
+ angle = -angle;
rot[0] = cos(angle);
rot[1] = rot[2] = 0.0;
rot[3] = sin(angle);