[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