[Bf-blender-cvs] [0abcddf] render-layers: Syncing: update layercollection tree when a new scenecollection is added

Dalai Felinto noreply at git.blender.org
Wed Dec 21 19:15:00 CET 2016


Commit: 0abcddf470d7254a80d11ddc9527f2c0937d6020
Author: Dalai Felinto
Date:   Wed Dec 21 12:27:50 2016 +0100
Branches: render-layers
https://developer.blender.org/rB0abcddf470d7254a80d11ddc9527f2c0937d6020

Syncing: update layercollection tree when a new scenecollection is added

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

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/layer.c

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 090ab34..b450b38 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -72,6 +72,12 @@ struct LayerCollection *BKE_collection_link(struct SceneLayer *sl, struct SceneC
 
 void BKE_collection_unlink(struct SceneLayer *sl, struct LayerCollection *lc);
 
+/* syncing */
+
+void BKE_layer_sync_new_scene_collection(struct Scene *scene, const struct SceneCollection *sc_parent, struct SceneCollection *sc);
+
+/* override */
+
 void BKE_collection_override_datablock_add(struct LayerCollection *lc, const char *data_path, struct ID *id);
 
 /* iterators */
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index e32fa4e..25763dd 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -55,7 +55,7 @@ SceneCollection *BKE_collection_add(Scene *scene, SceneCollection *sc_parent, co
 
 	BLI_addtail(&sc_parent->scene_collections, sc);
 
-	TODO_LAYER_SYNC;
+	BKE_layer_sync_new_scene_collection(scene, sc_parent, sc);
 	return sc;
 }
 
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 6c58482..73e834b 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -343,6 +343,41 @@ LayerCollection *layer_collection_add(SceneLayer *sl, ListBase *lb, SceneCollect
 	return lc;
 }
 
+
+/* ---------------------------------------------------------------------- */
+/* Syncing */
+
+static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc)
+{
+	if (lc->scene_collection == sc) {
+		return lc;
+	}
+
+	for (LayerCollection *nlc = lc->layer_collections.first; nlc; nlc = nlc->next) {
+		LayerCollection *found = find_layer_collection_by_scene_collection(nlc, sc);
+		if (found) {
+			return found;
+		}
+	}
+	return NULL;
+}
+
+/**
+ * Add a new LayerCollection for all the SceneLayers that have sc_parent
+ */
+void BKE_layer_sync_new_scene_collection(Scene *scene, const SceneCollection *sc_parent, SceneCollection *sc)
+{
+	for (SceneLayer *sl = scene->render_layers.first; sl; sl = sl->next) {
+		for (LayerCollection *lc = sl->layer_collections.first; lc; lc = lc->next) {
+			LayerCollection *lc_parent = find_layer_collection_by_scene_collection(lc, sc_parent);
+			if (lc_parent) {
+				layer_collection_add(sl, &lc_parent->layer_collections, sc);
+			}
+		}
+	}
+}
+
+/* ---------------------------------------------------------------------- */
 /* Override */
 
 /**




More information about the Bf-blender-cvs mailing list