[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37814] branches/merwin-spacenav/source/ blender/editors/space_image: NDOF pan/zoom/fit working in image/uv editor

Mike Erwin significant.bit at gmail.com
Sat Jun 25 20:51:29 CEST 2011


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);




More information about the Bf-blender-cvs mailing list