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