[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