[Bf-blender-cvs] [931b2ab] soc-2016-layer_manager: Add utility for adding new object layer tree with default layer

Julian Eisel noreply at git.blender.org
Thu Aug 18 19:03:34 CEST 2016


Commit: 931b2abfbd304c98008ad2af66d659d03836333c
Author: Julian Eisel
Date:   Thu Aug 18 19:02:22 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rB931b2abfbd304c98008ad2af66d659d03836333c

Add utility for adding new object layer tree with default layer

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

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object_layer.c
M	source/blender/blenloader/intern/versioning_270.c

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

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index e9a4b1c..3945417 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -309,6 +309,7 @@ bool BKE_object_modifier_update_subframe(struct Scene *scene, struct Object *ob,
 #define BKE_BASES_ITER_END \
 	} (void)0
 
+struct LayerTree *BKE_objectlayer_tree_new(void);
 struct LayerTreeItem *BKE_objectlayer_add(struct LayerTree *tree, struct LayerTreeItem *parent, const char *name);
 void BKE_objectlayer_free(struct LayerTreeItem *litem);
 void BKE_objectlayer_base_assign_ex(
diff --git a/source/blender/blenkernel/intern/object_layer.c b/source/blender/blenkernel/intern/object_layer.c
index 51e9c7e..55fabd9 100644
--- a/source/blender/blenkernel/intern/object_layer.c
+++ b/source/blender/blenkernel/intern/object_layer.c
@@ -35,6 +35,17 @@
 #include "MEM_guardedalloc.h"
 
 
+/**
+ * Allocate a new object layer tree and add a default layer (having no layer isn't allowed).
+ */
+LayerTree *BKE_objectlayer_tree_new(void)
+{
+	LayerTree *ltree = BKE_layertree_new(LAYER_TREETYPE_OBJECT);
+	LayerTreeItem *defaultlayer = BKE_objectlayer_add(ltree, NULL, "Default Layer");
+	ltree->active_layer = defaultlayer;
+	return ltree;
+}
+
 LayerTreeItem *BKE_objectlayer_add(LayerTree *tree, LayerTreeItem *parent, const char *name)
 {
 	LayerTypeObject *oblayer = MEM_callocN(sizeof(LayerTypeObject), __func__);
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index 5f317ef..27e0714 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1325,17 +1325,15 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 
 	/* Convert to new layer system */
 	if (!MAIN_VERSION_ATLEAST(main, 277, 4)) {
-		if (!DNA_struct_elem_find(fd->filesdna, "Scene", "LayerTree", "object_layers")) {
+		if (!DNA_struct_elem_find(fd->filesdna, "Scene", "LayerTree", "*object_layers")) {
 			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;
+				sce->object_layers = BKE_objectlayer_tree_new();
 
-				BKE_objectlayer_base_entries_reserve(litem, BLI_listbase_count(&sce->base));
+				BKE_objectlayer_base_entries_reserve(sce->object_layers->active_layer, BLI_listbase_count(&sce->base));
 				/* For now, simply create a new layer and move all objects into it */
 				for (Base *base = sce->base.first, *base_next; base; base = base_next) {
 					base_next = base->next;
-					BKE_objectlayer_base_assign_ex(base, litem, true, false);
+					BKE_objectlayer_base_assign_ex(base, sce->object_layers->active_layer, true, false);
 					base->prev = base->next = NULL;
 				}
 				BLI_listbase_clear(&sce->base);




More information about the Bf-blender-cvs mailing list