From c67b9f4c3774d72d160901b3d410a685ae8e2359 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 18 Feb 2014 10:19:41 +1100 Subject: NDOF: image and clip views ignored axis invert preferences also X/Y invert was swapped for 3d view. --- source/blender/editors/space_clip/clip_ops.c | 13 ++++++++----- source/blender/editors/space_image/image_ops.c | 13 ++++++++----- source/blender/editors/space_view3d/view3d_edit.c | 4 ++-- 3 files changed, 18 insertions(+), 12 deletions(-) (limited to 'source') diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index e02fca80894..c8eadf952d0 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -1333,6 +1333,7 @@ static int clip_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmEv else { SpaceClip *sc = CTX_wm_space_clip(C); ARegion *ar = CTX_wm_region(C); + float pan_vec[2]; wmNDOFMotionData *ndof = (wmNDOFMotionData *) event->customdata; @@ -1342,9 +1343,6 @@ static int clip_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmEv const float zoom_sensitivity = 0.5f; /* 50% per second (I think) */ const float pan_sensitivity = 300.0f; /* screen pixels per second */ - float pan_x = pan_sensitivity * dt * ndof->tvec[0] / sc->zoom; - float pan_y = pan_sensitivity * dt * ndof->tvec[1] / sc->zoom; - /* "mouse zoom" factor = 1 + (dx + dy) / 300 * what about "ndof zoom" factor? should behave like this: * at rest -> factor = 1 @@ -1353,12 +1351,17 @@ static int clip_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmEv */ float zoom_factor = 1.0f + zoom_sensitivity * dt * - ndof->tvec[2]; + pan_vec[0] = ndof->tvec[0] * ((U.ndof_flag & NDOF_PANX_INVERT_AXIS) ? -1.0f : 1.0f); + pan_vec[1] = ndof->tvec[1] * ((U.ndof_flag & NDOF_PANY_INVERT_AXIS) ? -1.0f : 1.0f); + + mul_v2_fl(pan_vec, (pan_sensitivity * dt) / sc->zoom); + if (U.ndof_flag & NDOF_ZOOM_INVERT) zoom_factor = -zoom_factor; sclip_zoom_set_factor(C, zoom_factor, NULL); - sc->xof += pan_x; - sc->yof += pan_y; + sc->xof += pan_vec[0]; + sc->yof += pan_vec[1]; ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index bbc24004937..f48532dbac7 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -599,6 +599,7 @@ static int image_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmE else { SpaceImage *sima = CTX_wm_space_image(C); ARegion *ar = CTX_wm_region(C); + float pan_vec[2]; wmNDOFMotionData *ndof = (wmNDOFMotionData *) event->customdata; @@ -607,9 +608,6 @@ static int image_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmE const float zoom_sensitivity = 0.5f; // 50% per second (I think) const float pan_sensitivity = 300.f; // screen pixels per second - float pan_x = pan_sensitivity * dt * ndof->tvec[0] / sima->zoom; - float pan_y = pan_sensitivity * dt * ndof->tvec[1] / sima->zoom; - /* "mouse zoom" factor = 1 + (dx + dy) / 300 * what about "ndof zoom" factor? should behave like this: * at rest -> factor = 1 @@ -618,12 +616,17 @@ static int image_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmE */ float zoom_factor = 1.f + zoom_sensitivity * dt * -ndof->tvec[2]; + pan_vec[0] = ndof->tvec[0] * ((U.ndof_flag & NDOF_PANX_INVERT_AXIS) ? -1.0f : 1.0f); + pan_vec[1] = ndof->tvec[1] * ((U.ndof_flag & NDOF_PANY_INVERT_AXIS) ? -1.0f : 1.0f); + + mul_v2_fl(pan_vec, (pan_sensitivity * dt) / sima->zoom); + if (U.ndof_flag & NDOF_ZOOM_INVERT) zoom_factor = -zoom_factor; sima_zoom_set_factor(sima, ar, zoom_factor, NULL); - sima->xof += pan_x; - sima->yof += pan_y; + sima->xof += pan_vec[0]; + sima->yof += pan_vec[1]; ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 09d1416fbf9..0c4e2bd541a 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1183,8 +1183,8 @@ static void view3d_ndof_pan_zoom(const struct wmNDOFMotionData *ndof, ScrArea *s } pan_vec[0] = ndof->tvec[0] * ((U.ndof_flag & NDOF_PANX_INVERT_AXIS) ? -1.0f : 1.0f); - pan_vec[1] = ndof->tvec[1] * ((U.ndof_flag & NDOF_PANZ_INVERT_AXIS) ? -1.0f : 1.0f); - pan_vec[2] = ndof->tvec[2] * ((U.ndof_flag & NDOF_PANY_INVERT_AXIS) ? -1.0f : 1.0f); + pan_vec[1] = ndof->tvec[1] * ((U.ndof_flag & NDOF_PANY_INVERT_AXIS) ? -1.0f : 1.0f); + pan_vec[2] = ndof->tvec[2] * ((U.ndof_flag & NDOF_PANZ_INVERT_AXIS) ? -1.0f : 1.0f); if (has_zoom) { /* zoom with Z */ -- cgit v1.2.3