diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-02-22 09:19:02 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-02-22 09:30:48 +0400 |
commit | 739ae1d80956759767e137fe17286dc360788a1b (patch) | |
tree | 64736e18dccebcc24cc4f96b530eeca1f1f3f775 /source/blender/editors/space_view3d/view3d_edit.c | |
parent | 3a44e975a9c96521b722d631207b87d0210e1202 (diff) |
NDOF: fix for view3d ignoring lens values when panning
image, mce, view2d and view3d now have matching pan speed.
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_edit.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index faee6514616..77b0e945c9c 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1151,6 +1151,17 @@ void VIEW3D_OT_rotate(wmOperatorType *ot) #define NDOF_HAS_TRANSLATE ((!ED_view3d_offset_lock_check(v3d, rv3d)) && !is_zero_v3(ndof->tvec)) #define NDOF_HAS_ROTATE (((rv3d->viewlock & RV3D_LOCKED) == 0) && !is_zero_v3(ndof->rvec)) +static float view3d_ndof_pan_speed_calc(RegionView3D *rv3d) +{ + float speed = rv3d->pixsize * NDOF_PIXELS_PER_SECOND; + + if (rv3d->is_persp) { + speed *= ED_view3d_calc_zfac(rv3d, rv3d->ofs, NULL); + } + + return speed; +} + /** * Zoom and pan in the same function since sometimes zoom is interpreted as dolly (pan forward). * @@ -1160,7 +1171,6 @@ static void view3d_ndof_pan_zoom(const struct wmNDOFMotionData *ndof, ScrArea *s const bool has_translate, const bool has_zoom) { RegionView3D *rv3d = ar->regiondata; - const float dt = ndof->dt; float view_inv[4]; float pan_vec[3]; @@ -1183,7 +1193,7 @@ static void view3d_ndof_pan_zoom(const struct wmNDOFMotionData *ndof, ScrArea *s /* "zoom in" or "translate"? depends on zoom mode in user settings? */ if (ndof->tvec[2]) { - float zoom_distance = rv3d->dist * dt * ndof->tvec[2]; + float zoom_distance = rv3d->dist * ndof->dt * ndof->tvec[2]; if (U.ndof_flag & NDOF_ZOOM_INVERT) zoom_distance = -zoom_distance; @@ -1201,9 +1211,9 @@ static void view3d_ndof_pan_zoom(const struct wmNDOFMotionData *ndof, ScrArea *s } if (has_translate) { - const float speed = rv3d->dist; /* uses distance from pivot to define dolly */ + const float speed = view3d_ndof_pan_speed_calc(rv3d); - mul_v3_fl(pan_vec, speed * dt); + mul_v3_fl(pan_vec, speed * ndof->dt); /* transform motion from view to world coordinates */ invert_qt_qt(view_inv, rv3d->viewquat); @@ -1314,9 +1324,6 @@ void view3d_ndof_fly( const bool use_precision, const short protectflag, bool *r_has_translate, bool *r_has_rotate) { - /* shorthand for oft-used variables */ - const float dt = ndof->dt; - bool has_translate = NDOF_HAS_TRANSLATE; bool has_rotate = NDOF_HAS_ROTATE; @@ -1326,14 +1333,14 @@ void view3d_ndof_fly( rv3d->rot_angle = 0.0f; /* disable onscreen rotation doo-dad */ if (has_translate) { - float speed = 10.0f; /* blender units per second */ + float speed = view3d_ndof_pan_speed_calc(rv3d); float trans[3], trans_orig_y; - /* ^^ this is ok for default cube scene, but should scale with.. something */ + if (use_precision) speed *= 0.2f; WM_event_ndof_pan_get(ndof, trans, false); - mul_v3_fl(trans, speed * dt); + mul_v3_fl(trans, speed * ndof->dt); trans_orig_y = trans[1]; if (U.ndof_flag & NDOF_FLY_HELICOPTER) { |