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;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to