[Bf-blender-cvs] [53eabca4e8] render-layers: BKE_scene_layer_has_collection

Dalai Felinto noreply at git.blender.org
Wed Jan 18 11:59:42 CET 2017


Commit: 53eabca4e86c1f4c47132da01bd81e348de1ac10
Author: Dalai Felinto
Date:   Wed Jan 18 11:48:35 2017 +0100
Branches: render-layers
https://developer.blender.org/rB53eabca4e86c1f4c47132da01bd81e348de1ac10

BKE_scene_layer_has_collection

Util function to check if a SceneCollection is linked to a SceneLayer

This is needed for corner cases of bpy.context.scene_collection when the context render_layer mismatches the context scene_collection.

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

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

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index bd925b735d..9ae9cdb3e3 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -78,6 +78,7 @@ struct LayerCollection *BKE_collection_link(struct SceneLayer *sl, struct SceneC
 
 void BKE_collection_unlink(struct SceneLayer *sl, struct LayerCollection *lc);
 
+bool BKE_scene_layer_has_collection(struct SceneLayer *sl, struct SceneCollection *sc);
 bool BKE_scene_has_object(struct Scene *scene, struct Object *ob);
 
 /* syncing */
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index b92624e4c1..14739c88ca 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -44,8 +44,9 @@
 #include "MEM_guardedalloc.h"
 
 /* prototype */
-LayerCollection *layer_collection_add(SceneLayer *sl, ListBase *lb, SceneCollection *sc);
 void layer_collection_free(SceneLayer *sl, LayerCollection *lc);
+LayerCollection *layer_collection_add(SceneLayer *sl, ListBase *lb, SceneCollection *sc);
+LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc);
 
 /* RenderLayer */
 
@@ -463,6 +464,19 @@ LayerCollection *layer_collection_add(SceneLayer *sl, ListBase *lb, SceneCollect
 /* ---------------------------------------------------------------------- */
 
 /**
+ * See if render layer has the scene collection linked directly, or indirectly (nested)
+ */
+bool BKE_scene_layer_has_collection(struct SceneLayer *sl, struct SceneCollection *sc)
+{
+	for (LayerCollection *lc = sl->layer_collections.first; lc; lc = lc->next) {
+		if (find_layer_collection_by_scene_collection(lc, sc) != NULL) {
+			return true;
+		}
+	}
+	return false;
+}
+
+/**
  * See if the object is in any of the scene layers of the scene
  */
 bool BKE_scene_has_object(Scene *scene, Object *ob)
@@ -480,7 +494,7 @@ bool BKE_scene_has_object(Scene *scene, Object *ob)
 /* ---------------------------------------------------------------------- */
 /* Syncing */
 
-static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc)
+LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc)
 {
 	if (lc->scene_collection == sc) {
 		return lc;




More information about the Bf-blender-cvs mailing list