Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2019-03-13 01:55:33 +0300
committerDalai Felinto <dfelinto@gmail.com>2019-03-15 22:09:32 +0300
commit713010bd7795c539c1c18afc3df9f25ab8ba6c12 (patch)
tree00a02d1383b0e01fb6f81e7242ed3285dfe215f4 /source/blender/blenkernel/BKE_collection.h
parentfcffbe1d1b31ed518b7a710c09d5fda389d8182e (diff)
Fix T62313 - No way to remove object from master collection in 3d view
This introduces a new iterator, FOREACH_COLLECTION, that unlike the FOREACH_SCENE_COLLECTION it iterates over all the Blender file collections, including the scene master collection, as well the database ones (bmain). Reviewers: brecht
Diffstat (limited to 'source/blender/blenkernel/BKE_collection.h')
-rw-r--r--source/blender/blenkernel/BKE_collection.h28
1 files changed, 27 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h
index a4b68a8cba2..f46405dceab 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -72,7 +72,7 @@ struct Scene *BKE_collection_master_scene_search(const struct Main *bmain, const
bool BKE_collection_has_object(struct Collection *collection, struct Object *ob);
bool BKE_collection_has_object_recursive(struct Collection *collection, struct Object *ob);
-struct Collection *BKE_collection_object_find(struct Main *bmain, struct Collection *collection, struct Object *ob);
+struct Collection *BKE_collection_object_find(struct Main *bmain, struct Scene *scene, struct Collection *collection, struct Object *ob);
bool BKE_collection_is_empty(struct Collection *collection);
bool BKE_collection_object_add(struct Main *bmain, struct Collection *collection, struct Object *ob);
@@ -179,6 +179,32 @@ void BKE_scene_objects_iterator_end(struct BLI_Iterator *iter);
#define FOREACH_SCENE_COLLECTION_END \
ITER_END
+#define FOREACH_COLLECTION_BEGIN(_bmain, _scene, Type, _instance) \
+{ \
+ Type _instance; \
+ Collection *_instance_next; \
+ bool is_scene_collection = (_scene) != NULL; \
+ \
+ if (_scene) { \
+ _instance_next = BKE_collection_master(_scene); \
+ } \
+ else { \
+ _instance_next = (_bmain)->collections.first; \
+ } \
+ \
+ while ((_instance = _instance_next)) { \
+ if (is_scene_collection) { \
+ _instance_next = (_bmain)->collections.first; \
+ is_scene_collection = false; \
+ } \
+ else { \
+ _instance_next = _instance->id.next; \
+ }
+
+#define FOREACH_COLLECTION_END \
+ } \
+}
+
#define FOREACH_SCENE_OBJECT_BEGIN(scene, _instance) \
ITER_BEGIN(BKE_scene_objects_iterator_begin, \
BKE_scene_objects_iterator_next, \