Revision: 37814 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37814 Author: merwin Date: 2011-06-25 18:51:29 +0000 (Sat, 25 Jun 2011) Log Message: ----------- NDOF pan/zoom/fit working in image/uv editor
Modified Paths: -------------- branches/merwin-spacenav/source/blender/editors/space_image/image_intern.h branches/merwin-spacenav/source/blender/editors/space_image/image_ops.c branches/merwin-spacenav/source/blender/editors/space_image/space_image.c Modified: branches/merwin-spacenav/source/blender/editors/space_image/image_intern.h =================================================================== --- branches/merwin-spacenav/source/blender/editors/space_image/image_intern.h 2011-06-25 18:50:03 UTC (rev 37813) +++ branches/merwin-spacenav/source/blender/editors/space_image/image_intern.h 2011-06-25 18:51:29 UTC (rev 37814) @@ -73,6 +73,7 @@ void IMAGE_OT_view_zoom_in(struct wmOperatorType *ot); void IMAGE_OT_view_zoom_out(struct wmOperatorType *ot); void IMAGE_OT_view_zoom_ratio(struct wmOperatorType *ot); +void IMAGE_OT_view_ndof(struct wmOperatorType *ot); void IMAGE_OT_new(struct wmOperatorType *ot); void IMAGE_OT_open(struct wmOperatorType *ot); Modified: branches/merwin-spacenav/source/blender/editors/space_image/image_ops.c =================================================================== --- branches/merwin-spacenav/source/blender/editors/space_image/image_ops.c 2011-06-25 18:50:03 UTC (rev 37813) +++ branches/merwin-spacenav/source/blender/editors/space_image/image_ops.c 2011-06-25 18:51:29 UTC (rev 37814) @@ -437,6 +437,60 @@ "Factor", "Zoom factor, values higher than 1.0 zoom in, lower values zoom out.", -FLT_MAX, FLT_MAX); } +/********************** NDOF operator *********************/ + +/* Combined pan/zoom from a 3D mouse device. + * Y zooms, XZ pans + * "view" (not "paper") control -- user moves the viewpoint, not the image being viewed + * that explains the negative signs in the code below + */ + +static int view_ndof_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + SpaceImage *sima= CTX_wm_space_image(C); + ARegion *ar= CTX_wm_region(C); + + wmNDOFMotionData* ndof = (wmNDOFMotionData*) event->customdata; + + float dt = ndof->dt > 0.25f ? 0.0125f : ndof->dt; + /* this is probably the first event for this motion, so set dt to something reasonable + * TODO: replace such guesswork with a flag or field from the NDOF manager + */ + + /* tune these until it feels right */ + const float zoom_sensitivity = 0.5f; + const float pan_sensitivity = 300.f; + + float pan_x = pan_sensitivity * dt * -ndof->tx / sima->zoom; + float pan_y = pan_sensitivity * dt * -ndof->tz / sima->zoom; + + /* "mouse zoom" factor = 1 + (dx + dy) / 300 + * what about "ndof zoom" factor? should behave like this: + * at rest -> factor = 1 + * move forward -> factor > 1 + * move backward -> factor < 1 + */ + float zoom_factor = 1.f + zoom_sensitivity * dt * -ndof->ty; + + sima_zoom_set_factor(sima, ar, zoom_factor); + sima->xof += pan_x; + sima->yof += pan_y; + + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; +} + +void IMAGE_OT_view_ndof(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "NDOF Pan/Zoom"; + ot->idname= "IMAGE_OT_view_ndof"; + + /* api callbacks */ + ot->invoke= view_ndof_invoke; +} + /********************** view all operator *********************/ /* Updates the fields of the View2D member of the SpaceImage struct. Modified: branches/merwin-spacenav/source/blender/editors/space_image/space_image.c =================================================================== --- branches/merwin-spacenav/source/blender/editors/space_image/space_image.c 2011-06-25 18:50:03 UTC (rev 37813) +++ branches/merwin-spacenav/source/blender/editors/space_image/space_image.c 2011-06-25 18:51:29 UTC (rev 37814) @@ -469,6 +469,7 @@ WM_operatortype_append(IMAGE_OT_view_zoom_in); WM_operatortype_append(IMAGE_OT_view_zoom_out); WM_operatortype_append(IMAGE_OT_view_zoom_ratio); + WM_operatortype_append(IMAGE_OT_view_ndof); WM_operatortype_append(IMAGE_OT_new); WM_operatortype_append(IMAGE_OT_open); @@ -518,6 +519,9 @@ WM_keymap_add_item(keymap, "IMAGE_OT_view_pan", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "IMAGE_OT_view_pan", MOUSEPAN, 0, 0, 0); + WM_keymap_add_item(keymap, "IMAGE_OT_view_all", NDOF_BUTTON_FIT, KM_PRESS, 0, 0); // or view selected? + WM_keymap_add_item(keymap, "IMAGE_OT_view_ndof", NDOF_MOTION, 0, 0, 0); + WM_keymap_add_item(keymap, "IMAGE_OT_view_zoom_in", WHEELINMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "IMAGE_OT_view_zoom_out", WHEELOUTMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "IMAGE_OT_view_zoom_in", PADPLUSKEY, KM_PRESS, 0, 0); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs