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

Reply via email to