diff options
author | Mike Erwin <significant.bit@gmail.com> | 2011-07-25 04:20:45 +0400 |
---|---|---|
committer | Mike Erwin <significant.bit@gmail.com> | 2011-07-25 04:20:45 +0400 |
commit | c692351fdfe96ec396af9f9c1dfc92ae4e8ee5c6 (patch) | |
tree | 3cd63315de45e22aabfc2af101317e0c6476ac54 /source/blender/editors/space_view3d | |
parent | e31fef1d94c38f4701f12d7f264fe145446f08b6 (diff) |
added option to invert axes for orbiting (part 1 of 2)
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 14 |
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); |