[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30680] trunk/blender/source/blender/ editors/space_view3d: bugfix [#22769] Undo Looses Active Camera

Campbell Barton ideasman42 at gmail.com
Sat Jul 24 03:32:17 CEST 2010


Revision: 30680
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30680
Author:   campbellbarton
Date:     2010-07-24 03:32:03 +0200 (Sat, 24 Jul 2010)

Log Message:
-----------
bugfix [#22769] Undo Looses Active Camera 
The problem was that the v3d could have a different camera to the scene even when locked.
VIEW3D_OT_viewnumpad was ignoring v3d->scenelock option and allowing an invalid state.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2010-07-24 00:42:27 UTC (rev 30679)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2010-07-24 01:32:03 UTC (rev 30680)
@@ -1924,11 +1924,12 @@
 				/* lastview -  */
 
 				if(rv3d->persp != RV3D_CAMOB) {
+					Object *ob= OBACT;
 
 					if (!rv3d->smooth_timer) {
 						/* store settings of current view before allowing overwriting with camera view
 						 * only if we're not currently in a view transition */
-						QUATCOPY(rv3d->lviewquat, rv3d->viewquat);
+						copy_qt_qt(rv3d->lviewquat, rv3d->viewquat);
 						rv3d->lview= rv3d->view;
 						rv3d->lpersp= rv3d->persp;
 					}
@@ -1941,20 +1942,35 @@
 						handle_view3d_lock();
 					}
 	#endif
-
-					if(BASACT) {
-						/* check both G.vd as G.scene cameras */
-						if((v3d->camera==NULL || scene->camera==NULL) && OBACT->type==OB_CAMERA) {
-							v3d->camera= OBACT;
-							/*handle_view3d_lock();*/
+					
+					/* first get the default camera for the view lock type */
+					if(v3d->scenelock) {
+						/* sets the camera view if available */
+						v3d->camera= scene->camera;						
+					}
+					else {
+						/* use scene camera if one is not set (even though we're unlocked) */
+						if(v3d->camera==NULL) {
+							v3d->camera= scene->camera;
 						}
 					}
 
-					if(v3d->camera==NULL) {
-						v3d->camera= scene_find_camera(scene);
-						if (v3d->camera == NULL)
-							return OPERATOR_CANCELLED;
-					}
+					/* if the camera isnt found, check a number of options */
+					if(v3d->camera==NULL && ob && ob->type==OB_CAMERA)
+						v3d->camera= ob;
+					
+					if(v3d->camera==NULL)
+						v3d->camera= scene_find_camera(scene);		
+
+					/* couldnt find any useful camera, bail out */
+					if(v3d->camera==NULL)
+						return OPERATOR_CANCELLED;
+					
+					/* important these dont get out of sync for locked scenes */
+					if(v3d->scenelock)
+						scene->camera= v3d->camera;
+
+					/* finally do snazzy view zooming */
 					rv3d->persp= RV3D_CAMOB;
 					smooth_view(C, NULL, v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, &v3d->lens);
 

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2010-07-24 00:42:27 UTC (rev 30679)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2010-07-24 01:32:03 UTC (rev 30680)
@@ -144,7 +144,7 @@
 
 void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
 void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);
-void VIEW3D_OT_setobjectascamera(struct wmOperatorType *ot);
+void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot);
 void VIEW3D_OT_localview(struct wmOperatorType *ot);
 void VIEW3D_OT_game_start(struct wmOperatorType *ot);
 void VIEW3D_OT_fly(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_ops.c	2010-07-24 00:42:27 UTC (rev 30679)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_ops.c	2010-07-24 01:32:03 UTC (rev 30680)
@@ -83,7 +83,7 @@
 	WM_operatortype_append(VIEW3D_OT_cursor3d);
 	WM_operatortype_append(VIEW3D_OT_select_lasso);
 	WM_operatortype_append(VIEW3D_OT_setcameratoview);
-	WM_operatortype_append(VIEW3D_OT_setobjectascamera);
+	WM_operatortype_append(VIEW3D_OT_object_as_camera);
 	WM_operatortype_append(VIEW3D_OT_localview);
 	WM_operatortype_append(VIEW3D_OT_game_start);
 	WM_operatortype_append(VIEW3D_OT_fly);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-07-24 00:42:27 UTC (rev 30679)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-07-24 01:32:03 UTC (rev 30680)
@@ -458,7 +458,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void VIEW3D_OT_setobjectascamera(wmOperatorType *ot)
+void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
 {
 	
 	/* identifiers */





More information about the Bf-blender-cvs mailing list