[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56571] trunk/blender/source/blender: fix [#30862] "Lock" and "Box" Quad View options won't stay put when toggling

Campbell Barton ideasman42 at gmail.com
Wed May 8 15:01:05 CEST 2013


Revision: 56571
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56571
Author:   campbellbarton
Date:     2013-05-08 13:01:05 +0000 (Wed, 08 May 2013)
Log Message:
-----------
fix [#30862] "Lock" and "Box" Quad View options won't stay put when toggling

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

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2013-05-08 13:00:52 UTC (rev 56570)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2013-05-08 13:01:05 UTC (rev 56571)
@@ -2707,6 +2707,22 @@
 	}
 }
 
+static void region_quadview_init_rv3d(ScrArea *sa, ARegion *ar,
+                                      const char viewlock, const char view, const char persp)
+{
+	RegionView3D *rv3d = ar->regiondata;
+
+	rv3d->viewlock = viewlock;
+	rv3d->view = view;
+	rv3d->persp = persp;
+
+	ED_view3d_lock(rv3d);
+	view3d_localview_update_rv3d(rv3d);
+	if ((viewlock & RV3D_BOXCLIP) && (persp == RV3D_ORTHO)) {
+		ED_view3d_quadview_update(sa, ar, true);
+	}
+}
+
 /* insert a region in the area region list */
 static int region_quadview_exec(bContext *C, wmOperator *op)
 {
@@ -2724,6 +2740,7 @@
 		
 		if (sa->spacetype == SPACE_VIEW3D) {
 			RegionView3D *rv3d = ar->regiondata;
+			rv3d->viewlock_quad = rv3d->viewlock | RV3D_VIEWLOCK_INIT;
 			rv3d->viewlock = 0;
 			rv3d->rflag &= ~RV3D_CLIPPING;
 		}
@@ -2764,38 +2781,16 @@
 			 *
 			 * We could avoid manipulating rv3d->localvd here if exiting
 			 * localview with a 4-split would assign these view locks */
-			RegionView3D *rv3d;
+			RegionView3D *rv3d = ar->regiondata;
+			const char viewlock = (rv3d->viewlock_quad & RV3D_VIEWLOCK_INIT) ?
+			                      (rv3d->viewlock_quad & ~RV3D_VIEWLOCK_INIT) : RV3D_LOCKED;
 
-			rv3d = ar->regiondata;
-			rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_FRONT; rv3d->persp = RV3D_ORTHO;
-			ED_view3d_lock(rv3d);
-			view3d_localview_update_rv3d(rv3d);
-			
-			ar = ar->next;
-			rv3d = ar->regiondata;
-			rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_TOP; rv3d->persp = RV3D_ORTHO;
-			ED_view3d_lock(rv3d);
-			view3d_localview_update_rv3d(rv3d);
-			
-			ar = ar->next;
-			rv3d = ar->regiondata;
-			rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_RIGHT; rv3d->persp = RV3D_ORTHO;
-			ED_view3d_lock(rv3d);
-			view3d_localview_update_rv3d(rv3d);
-			
-			ar = ar->next;
-			rv3d = ar->regiondata;
+			region_quadview_init_rv3d(sa, ar,              viewlock, RV3D_VIEW_FRONT, RV3D_ORTHO);
+			region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, RV3D_VIEW_TOP,   RV3D_ORTHO);
+			region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, RV3D_VIEW_RIGHT, RV3D_ORTHO);
+			if (v3d->camera) region_quadview_init_rv3d(sa, (ar = ar->next), 0, RV3D_VIEW_CAMERA,     RV3D_CAMOB);
+			else             region_quadview_init_rv3d(sa, (ar = ar->next), 0, RV3D_VIEW_PERSPORTHO, RV3D_PERSP);
 
-			/* check if we have a camera */
-			if (v3d->camera) {
-				rv3d->view = RV3D_VIEW_CAMERA; rv3d->persp = RV3D_CAMOB;
-			}
-			else {
-				rv3d->view = RV3D_VIEW_PERSPORTHO; rv3d->persp = RV3D_PERSP;
-			}
-
-			ED_view3d_lock(rv3d);
-			view3d_localview_update_rv3d(rv3d);
 		}
 		ED_area_tag_redraw(sa);
 		WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2013-05-08 13:00:52 UTC (rev 56570)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2013-05-08 13:01:05 UTC (rev 56571)
@@ -190,7 +190,7 @@
 void ED_view3d_clipping_set(RegionView3D *rv3d)
 {
 	double plane[4];
-	const unsigned int tot = (rv3d->viewlock) ? 4 : 6;
+	const unsigned int tot = (rv3d->viewlock & RV3D_BOXCLIP) ? 4 : 6;
 	unsigned int a;
 
 	for (a = 0; a < tot; a++) {

Modified: trunk/blender/source/blender/makesdna/DNA_view3d_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2013-05-08 13:00:52 UTC (rev 56570)
+++ trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2013-05-08 13:01:05 UTC (rev 56571)
@@ -129,7 +129,8 @@
 	char persp;
 	char view;
 	char viewlock;
-	char pad[4];
+	char viewlock_quad;			/* options for quadview (store while out of quad view) */
+	char pad[3];
 
 	short twdrawflag;
 	short rflag;
@@ -246,9 +247,11 @@
 #define RV3D_GPULIGHT_UPDATE		16
 
 /* RegionView3d->viewlock */
-#define RV3D_LOCKED			1
-#define RV3D_BOXVIEW		2
-#define RV3D_BOXCLIP		4
+#define RV3D_LOCKED			(1 << 0)
+#define RV3D_BOXVIEW		(1 << 1)
+#define RV3D_BOXCLIP		(1 << 2)
+/* RegionView3d->viewlock_quad */
+#define RV3D_VIEWLOCK_INIT	(1 << 7)
 
 /* RegionView3d->view */
 #define RV3D_VIEW_USER			 0




More information about the Bf-blender-cvs mailing list