[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35400] trunk/blender/source/blender: fix bug [#26315] Background and 3D view mistakes

Campbell Barton ideasman42 at gmail.com
Tue Mar 8 08:44:30 CET 2011


Revision: 35400
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35400
Author:   campbellbarton
Date:     2011-03-08 07:44:30 +0000 (Tue, 08 Mar 2011)
Log Message:
-----------
fix bug [#26315] Background and 3D view mistakes 
The bug is caused by a fix for [#22111], commits r29356, r28545.

exiting localview would set the rv3d->view but use the original rv3d->viewquat.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=29356
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=28545

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2011-03-08 07:33:26 UTC (rev 35399)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2011-03-08 07:44:30 UTC (rev 35400)
@@ -177,6 +177,7 @@
 
 Base *ED_view3d_give_base_under_cursor(struct bContext *C, short *mval);
 void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar, short do_clip);
+int ED_view3d_lock(struct RegionView3D *rv3d);
 
 unsigned int ED_viewedit_datamask(struct bScreen *screen);
 

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2011-03-08 07:33:26 UTC (rev 35399)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2011-03-08 07:44:30 UTC (rev 35400)
@@ -66,6 +66,7 @@
 #include "ED_armature.h"
 #include "ED_screen_types.h"
 #include "ED_keyframes_draw.h"
+#include "ED_view3d.h"
 
 #include "RNA_access.h"
 #include "RNA_define.h"
@@ -2464,26 +2465,36 @@
 		
 		/* lock views and set them */
 		if(sa->spacetype==SPACE_VIEW3D) {
+			/* run ED_view3d_lock() so the correct 'rv3d->viewquat' is set,
+			 * otherwise when restoring rv3d->localvd the 'viewquat' won't
+			 * match the 'view', set on entering localview See: [#26315],
+			 *
+			 * We could avoid manipulating rv3d->localvd here if exiting
+			 * localview with a 4-split would assign these view locks */
 			RegionView3D *rv3d;
 			
 			rv3d= ar->regiondata;
 			rv3d->viewlock= RV3D_LOCKED; rv3d->view= RV3D_VIEW_FRONT; rv3d->persp= RV3D_ORTHO;
-			if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; }
+			ED_view3d_lock(rv3d);
+			if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat);}
 			
 			ar= ar->next;
 			rv3d= ar->regiondata;
 			rv3d->viewlock= RV3D_LOCKED; rv3d->view= RV3D_VIEW_TOP; rv3d->persp= RV3D_ORTHO;
-			if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; }
+			ED_view3d_lock(rv3d);
+			if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat);}
 			
 			ar= ar->next;
 			rv3d= ar->regiondata;
 			rv3d->viewlock= RV3D_LOCKED; rv3d->view= RV3D_VIEW_RIGHT; rv3d->persp= RV3D_ORTHO;
-			if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; }
+			ED_view3d_lock(rv3d);
+			if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat);}
 			
 			ar= ar->next;
 			rv3d= ar->regiondata;
 			rv3d->view= RV3D_VIEW_CAMERA; rv3d->persp= RV3D_CAMOB;
-			if (rv3d->localvd) {rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; }
+			ED_view3d_lock(rv3d);
+			if (rv3d->localvd) {rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat);}
 		}
 		ED_area_tag_redraw(sa);
 		WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2011-03-08 07:33:26 UTC (rev 35399)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2011-03-08 07:44:30 UTC (rev 35400)
@@ -1179,33 +1179,37 @@
 
 #define QUATSET(a, b, c, d, e)	a[0]=b; a[1]=c; a[2]=d; a[3]=e; 
 
-static void view3d_viewlock(RegionView3D *rv3d)
+int ED_view3d_lock(RegionView3D *rv3d)
 {
 	switch(rv3d->view) {
 	case RV3D_VIEW_BOTTOM :
 		QUATSET(rv3d->viewquat,0.0, -1.0, 0.0, 0.0);
 		break;
-		
+
 	case RV3D_VIEW_BACK:
 		QUATSET(rv3d->viewquat,0.0, 0.0, (float)-cos(M_PI/4.0), (float)-cos(M_PI/4.0));
 		break;
-		
+
 	case RV3D_VIEW_LEFT:
 		QUATSET(rv3d->viewquat,0.5, -0.5, 0.5, 0.5);
 		break;
-		
+
 	case RV3D_VIEW_TOP:
 		QUATSET(rv3d->viewquat,1.0, 0.0, 0.0, 0.0);
 		break;
-		
+
 	case RV3D_VIEW_FRONT:
 		QUATSET(rv3d->viewquat,(float)cos(M_PI/4.0), (float)-sin(M_PI/4.0), 0.0, 0.0);
 		break;
-		
+
 	case RV3D_VIEW_RIGHT:
 		QUATSET(rv3d->viewquat, 0.5, -0.5, -0.5, -0.5);
 		break;
+	default:
+		return FALSE;
 	}
+
+	return TRUE;
 }
 
 /* dont set windows active in in here, is used by renderwin too */
@@ -1224,7 +1228,7 @@
 	else {
 		/* should be moved to better initialize later on XXX */
 		if(rv3d->viewlock)
-			view3d_viewlock(rv3d);
+			ED_view3d_lock(rv3d);
 		
 		quat_to_mat4( rv3d->viewmat,rv3d->viewquat);
 		if(rv3d->persp==RV3D_PERSP) rv3d->viewmat[3][2]-= rv3d->dist;

Modified: trunk/blender/source/blender/makesdna/DNA_view3d_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2011-03-08 07:33:26 UTC (rev 35399)
+++ trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2011-03-08 07:44:30 UTC (rev 35400)
@@ -112,7 +112,7 @@
 	
 	struct bGPdata *gpd;		/* Grease-Pencil Data (annotation layers) */
 	
-	struct RegionView3D *localvd;
+	struct RegionView3D *localvd; /* allocated backup of its self while in localview */
 	struct RenderInfo *ri;
 	struct ViewDepths *depths;
 	
@@ -151,7 +151,7 @@
 	struct ListBase bgpicbase;
 	struct BGpic *bgpic; /* deprecated, use bgpicbase, only kept for do_versions(...) */
 
-	struct View3D *localvd;
+	struct View3D *localvd; /* allocated backup of its self while in localview */
 	
 	char ob_centre_bone[32];		/* optional string for armature bone to define center */
 	




More information about the Bf-blender-cvs mailing list