[Bf-blender-cvs] [adef87f] soc-2016-layer_manager: Always add object to active layer

Julian Eisel noreply at git.blender.org
Sat Jul 9 10:05:47 CEST 2016


Commit: adef87fd3a06ea1ec3bae099bce63222b91e63aa
Author: Julian Eisel
Date:   Sat Jul 9 00:06:40 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rBadef87fd3a06ea1ec3bae099bce63222b91e63aa

Always add object to active layer

I doubt all cases in which we have to assign an object after creation to a layer are covered, but this should be good enough for the start.
It's also quite easy to break object creation since there isn't any logic that ensures there's always an active layer (or any layer at all).

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

M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/editors/object/object_add.c

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

diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 91288bb..4683a9b 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1135,9 +1135,12 @@ char *BKE_scene_find_last_marker_name(Scene *scene, int frame)
 
 Base *BKE_scene_base_add(Scene *sce, Object *ob)
 {
-	Base *b = MEM_callocN(sizeof(*b), "BKE_scene_base_add");
+	Base *b = MEM_callocN(sizeof(*b), __func__);
 	BLI_addhead(&sce->base, b);
 
+	BLI_assert(sce->object_layers->active_layer != NULL); /* XXX quite easy to break currently */
+	BKE_objectlayer_base_assign(b, sce->object_layers->active_layer, false);
+
 	b->object = ob;
 	b->flag = ob->flag;
 	b->lay = ob->lay;
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index a9cb1c8..e2a4049 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1223,6 +1223,7 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 			for (Scene *sce = main->scene.first; sce; sce = sce->id.next) {
 				sce->object_layers = BKE_layertree_new(LAYER_TREETYPE_OBJECT);
 				LayerTreeItem *litem = BKE_objectlayer_add(sce->object_layers, NULL, "Default layer");
+				sce->object_layers->active_layer = litem;
 
 				BKE_objectlayer_base_entries_reserve(litem, BLI_listbase_count(&sce->base));
 				/* For now, simply create a new layer and move all objects into it */
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 69950cc..1bcae0d 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -1917,6 +1917,8 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
 		*basen = *base;
 		BLI_addhead(&scene->base, basen);   /* addhead: prevent eternal loop */
 		basen->object = obn;
+		BLI_assert(scene->object_layers->active_layer);
+		BKE_objectlayer_base_assign(basen, scene->object_layers->active_layer, false);
 
 		/* 1) duplis should end up in same group as the original
 		 * 2) Rigid Body sim participants MUST always be part of a group...




More information about the Bf-blender-cvs mailing list