[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39739] trunk/blender/source/blender/ editors: fix [#28373] "Lock camera to view" doew not work with 3D-mouse

Campbell Barton ideasman42 at gmail.com
Sat Aug 27 13:52:59 CEST 2011


Revision: 39739
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39739
Author:   campbellbarton
Date:     2011-08-27 11:52:59 +0000 (Sat, 27 Aug 2011)
Log Message:
-----------
fix [#28373] "Lock camera to view" doew not work with 3D-mouse 

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2011-08-27 11:41:48 UTC (rev 39738)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2011-08-27 11:52:59 UTC (rev 39739)
@@ -288,7 +288,7 @@
 int ED_view3d_camera_lock_check(struct View3D *v3d, struct RegionView3D *rv3d);
 /* copy the camera to the view before starting a view transformation */
 void ED_view3d_camera_lock_init(struct View3D *v3d, struct RegionView3D *rv3d);
-/* copy the view to the camera */
-void ED_view3d_camera_lock_sync(struct View3D *v3d, struct RegionView3D *rv3d);
+/* copy the view to the camera, return TRUE if */
+int ED_view3d_camera_lock_sync(struct View3D *v3d, struct RegionView3D *rv3d);
 
 #endif /* ED_VIEW3D_H */

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2011-08-27 11:41:48 UTC (rev 39738)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2011-08-27 11:52:59 UTC (rev 39739)
@@ -97,7 +97,8 @@
 	}
 }
 
-void ED_view3d_camera_lock_sync(View3D *v3d, RegionView3D *rv3d)
+/* return TRUE if the camera is moved */
+int ED_view3d_camera_lock_sync(View3D *v3d, RegionView3D *rv3d)
 {
 	if(ED_view3d_camera_lock_check(v3d, rv3d)) {
 		Object *root_parent;
@@ -132,7 +133,12 @@
 			DAG_id_tag_update(&v3d->camera->id, OB_RECALC_OB);
 			WM_main_add_notifier(NC_OBJECT|ND_TRANSFORM, v3d->camera);
 		}
+
+		return TRUE;
 	}
+	else {
+		return FALSE;
+	}
 }
 
 
@@ -944,17 +950,22 @@
 	axis_angle_to_quat(q, axis, angle);
 }
 
+/* -- "orbit" navigation (trackball/turntable)
+ * -- zooming
+ * -- panning in rotationally-locked views
+ */
 static int ndof_orbit_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *event)
-// -- "orbit" navigation (trackball/turntable)
-// -- zooming
-// -- panning in rotationally-locked views
 {
-	if (event->type != NDOF_MOTION)
+	if (event->type != NDOF_MOTION) {
 		return OPERATOR_CANCELLED;
+	}
 	else {
+		View3D *v3d= CTX_wm_view3d(C);
 		RegionView3D* rv3d = CTX_wm_region_view3d(C);
 		wmNDOFMotionData* ndof = (wmNDOFMotionData*) event->customdata;
 
+		ED_view3d_camera_lock_init(v3d, rv3d);
+
 		rv3d->rot_angle = 0.f; // off by default, until changed later this function
 
 		if (ndof->progress != P_FINISHING) {
@@ -1064,6 +1075,8 @@
 			}
 		}
 
+		ED_view3d_camera_lock_sync(v3d, rv3d);
+
 		ED_region_tag_redraw(CTX_wm_region(C));
 
 		return OPERATOR_FINISHED;
@@ -1085,16 +1098,20 @@
 	ot->flag = 0;
 }
 
+/* -- "pan" navigation
+ * -- zoom or dolly?
+ */
 static int ndof_pan_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *event)
-// -- "pan" navigation
-// -- zoom or dolly?
 {
-	if (event->type != NDOF_MOTION)
+	if (event->type != NDOF_MOTION) {
 		return OPERATOR_CANCELLED;
+	}
 	else {
+		View3D *v3d= CTX_wm_view3d(C);
 		RegionView3D* rv3d = CTX_wm_region_view3d(C);
 		wmNDOFMotionData* ndof = (wmNDOFMotionData*) event->customdata;
 
+		ED_view3d_camera_lock_init(v3d, rv3d);
 
 		rv3d->rot_angle = 0.f; // we're panning here! so erase any leftover rotation from other operators
 
@@ -1141,6 +1158,8 @@
 			sub_v3_v3(rv3d->ofs, pan_vec);
 		}
 
+		ED_view3d_camera_lock_sync(v3d, rv3d);
+
 		ED_region_tag_redraw(CTX_wm_region(C));
 
 		return OPERATOR_FINISHED;




More information about the Bf-blender-cvs mailing list