[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29203] trunk/blender/source/blender: Fix [#22383] 3dView Layer Management (by Mouse) broken

Matt Ebb matt at mke3.net
Fri Jun 4 03:39:48 CEST 2010


Revision: 29203
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29203
Author:   broken
Date:     2010-06-04 03:39:34 +0200 (Fri, 04 Jun 2010)

Log Message:
-----------
Fix [#22383] 3dView Layer Management (by Mouse) broken

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/space_view3d/view3d_header.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-06-04 01:39:34 UTC (rev 29203)
@@ -10852,6 +10852,7 @@
 	/* put 2.50 compatibility code here until next subversion bump */
 	{
 		Object *ob;
+		Scene *scene;
 		bScreen *sc;
 
 		for (sc= main->screen.first; sc; sc= sc->id.next) {
@@ -10908,6 +10909,18 @@
 				}
 			}
 		}
+		
+		/* initialise scene active layer */
+		for (scene= main->scene.first; scene; scene=scene->id.next) {
+			int i;
+			for(i=0; i<20; i++) {
+				if(scene->lay & (1<<i)) {
+					scene->layact= 1<<i;
+					break;
+				}
+			}
+		}
+
 	}
 
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2010-06-04 01:39:34 UTC (rev 29203)
@@ -153,7 +153,7 @@
 
 void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d);
 
-int ED_view3d_scene_layer_set(int lay, const int *values);
+int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
 
 int ED_view3d_context_activate(struct bContext *C);
 void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct ARegion *ar,

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/editors/object/object_add.c	2010-06-04 01:39:34 UTC (rev 29203)
@@ -212,12 +212,13 @@
 				for(a=0; a<32; a++)
 					values[a]= (layer & (1<<a));
 			} else {
-				layer = v3d->layact;
+				layer = (v3d->scenelock)?scene->layact:v3d->layact;
+
 				for(a=0; a<32; a++)
 					values[a]= (layer & (1<<a));
 			}
 		} else {
-			layer = scene->lay;
+			layer = scene->layact;
 			for(a=0; a<32; a++)
 				values[a]= (layer & (1<<a));
 		}

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2010-06-04 01:39:34 UTC (rev 29203)
@@ -137,6 +137,7 @@
 		if(v3d->localvd==NULL && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) {
 			/* copy to scene */
 			scene->lay= v3d->lay;
+			scene->layact= v3d->layact;
 			scene->camera= v3d->camera;
 
 			/* not through notifiery, listener don't have context

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-06-04 01:39:34 UTC (rev 29203)
@@ -1380,7 +1380,7 @@
 	return 0;
 }
 
-int ED_view3d_scene_layer_set(int lay, const int *values)
+int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
 {
 	int i, tot= 0;
 	
@@ -1393,10 +1393,28 @@
 		return lay;
 	
 	for(i=0; i<20; i++) {
-		if(values[i]) lay |= (1<<i);
+		
+		if (active) {
+			/* if this value has just been switched on, make that layer active */
+			if (values[i] && (lay & (1<<i))==0) {
+				*active = (1<<i);
+			}
+		}
+			
+		if (values[i]) lay |= (1<<i);
 		else lay &= ~(1<<i);
 	}
 	
+	/* ensure always an active layer */
+	if (active && (lay & *active)==0) {
+		for(i=0; i<20; i++) {
+			if(lay & (1<<i)) {
+				*active= 1<<i;
+				break;
+			}
+		}
+	}
+	
 	return lay;
 }
 

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2010-06-04 01:39:34 UTC (rev 29203)
@@ -755,9 +755,11 @@
 	float cursor[3];			/* 3d cursor location */
 	float twcent[3];			/* center for transform widget */
 	float twmin[3], twmax[3];	/* boundbox of selection for transform widget */
-	unsigned int lay;
 	
-
+	unsigned int lay;			/* bitflags for layer visibility */
+	int layact;		/* active layer */
+	int pad1;
+	
 	short flag;								/* various settings */
 	
 	short use_nodes;

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2010-06-04 01:39:34 UTC (rev 29203)
@@ -272,7 +272,7 @@
 {
 	Scene *scene= (Scene*)ptr->data;
 
-	scene->lay= ED_view3d_scene_layer_set(scene->lay, values);
+	scene->lay= ED_view3d_scene_layer_set(scene->lay, values, &scene->layact);
 }
 
 static void rna_Scene_view3d_update(Main *bmain, Scene *unused, PointerRNA *ptr)
@@ -734,7 +734,7 @@
 static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values)
 {
 	SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data;
-	rl->lay= ED_view3d_scene_layer_set(rl->lay, values);
+	rl->lay= ED_view3d_scene_layer_set(rl->lay, values, NULL);
 }
 
 static void rna_SceneRenderLayer_pass_update(Main *bmain, Scene *unused, PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c	2010-06-03 23:52:56 UTC (rev 29202)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c	2010-06-04 01:39:34 UTC (rev 29203)
@@ -303,7 +303,7 @@
 {
 	View3D *v3d= (View3D*)(ptr->data);
 	
-	v3d->lay= ED_view3d_scene_layer_set(v3d->lay, values);
+	v3d->lay= ED_view3d_scene_layer_set(v3d->lay, values, &v3d->layact);
 }
 
 static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)





More information about the Bf-blender-cvs mailing list