[Bf-blender-cvs] [0eb8a37] temp_localview_split: Increase max num of local views from 8 to 32

Julian Eisel noreply at git.blender.org
Thu Jul 28 18:12:05 CEST 2016


Commit: 0eb8a374249fdb6d5e8355ca322dc8d1161c6116
Author: Julian Eisel
Date:   Thu Jul 28 18:11:20 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB0eb8a374249fdb6d5e8355ca322dc8d1161c6116

Increase max num of local views from 8 to 32

===================================================================

M	source/blender/editors/space_view3d/view3d_view.c

===================================================================

diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 1e12c12..93c56dd 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1190,38 +1190,33 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b
 
 /* ********************** local view operator ******************** */
 
-static unsigned int free_localbit(Main *bmain)
+static void find_free_localviewinfo(Main *bmain, LocalViewInfo *r_free_view)
 {
-	unsigned int lay;
-	ScrArea *sa;
-	bScreen *sc;
-	
-	lay = 0;
-	
+	unsigned int lay = 0;
+
 	/* sometimes we loose a localview: when an area is closed */
 	/* check all areas: which localviews are in use? */
-	for (sc = bmain->screen.first; sc; sc = sc->id.next) {
-		for (sa = sc->areabase.first; sa; sa = sa->next) {
-			SpaceLink *sl = sa->spacedata.first;
-			for (; sl; sl = sl->next) {
+	for (bScreen *sc = bmain->screen.first; sc; sc = sc->id.next) {
+		for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
+			for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
 				if (sl->spacetype == SPACE_VIEW3D) {
 					View3D *v3d = (View3D *) sl;
-					lay |= v3d->lay;
+					if (v3d->localviewd) {
+						lay |= v3d->localviewd->info.viewbits;
+					}
 				}
 			}
 		}
 	}
-	
-	if ((lay & 0x01000000) == 0) return 0x01000000;
-	if ((lay & 0x02000000) == 0) return 0x02000000;
-	if ((lay & 0x04000000) == 0) return 0x04000000;
-	if ((lay & 0x08000000) == 0) return 0x08000000;
-	if ((lay & 0x10000000) == 0) return 0x10000000;
-	if ((lay & 0x20000000) == 0) return 0x20000000;
-	if ((lay & 0x40000000) == 0) return 0x40000000;
-	if ((lay & 0x80000000) == 0) return 0x80000000;
-	
-	return 0;
+
+	BLI_assert(r_free_view->viewbits == 0);
+	/* search free bit */
+	for (int i = 0; i < sizeof(r_free_view->viewbits) * 8; i++) {
+		if ((lay & (1 << i)) == 0) {
+			r_free_view->viewbits = (1 << i);
+			break;
+		}
+	}
 }
 
 int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
@@ -1288,17 +1283,17 @@ static bool view3d_localview_init(
 	View3D *v3d = sa->spacedata.first;
 	float min[3], max[3], box[3], mid[3];
 	float size = 0.0f;
-	unsigned int locallay;
+	LocalViewInfo new_view = {0};
 	bool ok = false;
 
 	BLI_assert(v3d->localviewd == NULL);
 
 	INIT_MINMAX(min, max);
 
-	locallay = free_localbit(bmain);
+	find_free_localviewinfo(bmain, &new_view);
 
-	if (locallay == 0) {
-		BKE_report(reports, RPT_ERROR, "No more than 8 local views");
+	if (new_view.viewbits == 0) {
+		BKE_reportf(reports, RPT_ERROR, "No more than %lu local views", sizeof(new_view.viewbits) * 8);
 		ok = false;
 	}
 	else {
@@ -1307,14 +1302,14 @@ static bool view3d_localview_init(
 			
 			ok = true;
 
-			BASACT->object->localview.viewbits |= locallay;
+			BASACT->object->localview.viewbits |= new_view.viewbits;
 			scene->obedit->localview = BASACT->object->localview;
 		}
 		else {
 			for (Base *base = FIRSTBASE; base; base = base->next) {
 				if (TESTBASE(v3d, base)) {
 					BKE_object_minmax(base->object, min, max, false);
-					base->object->localview.viewbits |= locallay;
+					base->object->localview.viewbits |= new_view.viewbits;
 					ok = true;
 				}
 			}
@@ -1374,14 +1369,14 @@ static bool view3d_localview_init(
 			}
 		}
 
-		v3d->localviewd->info.viewbits = locallay;
+		v3d->localviewd->info = new_view;
 	}
 	else {
 		/* clear flags */ 
 		for (Base *base = FIRSTBASE; base; base = base->next) {
 			Object *ob = base->object;
-			if (ob->localview.viewbits & locallay) {
-				ob->localview.viewbits &= ~locallay;
+			if (BKE_LOCALVIEW_INFO_CMP(new_view, ob->localview)) {
+				ob->localview.viewbits &= ~new_view.viewbits;
 				if (ob != scene->obedit) {
 					base->flag |= SELECT;
 				}




More information about the Bf-blender-cvs mailing list