58 const struct Object *ob_src,
92 uint duplicate_options);
96 #define BKE_SCENE_COLLECTION_NAME "Scene Collection"
324 #define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN(_collection, _object, _mode) \
326 int _base_flag = (_mode == DAG_EVAL_VIEWPORT) ? BASE_ENABLED_VIEWPORT : BASE_ENABLED_RENDER; \
327 int _object_visibility_flag = (_mode == DAG_EVAL_VIEWPORT) ? OB_HIDE_VIEWPORT : \
330 for (Base *_base = (Base *)BKE_collection_object_cache_get(_collection).first; _base; \
331 _base = _base->next, _base_id++) { \
332 Object *_object = _base->object; \
333 if ((_base->flag & _base_flag) && \
334 (_object->visibility_flag & _object_visibility_flag) == 0) {
336 #define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_END \
342 #define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object) \
343 for (Base *_base = (Base *)BKE_collection_object_cache_get(_collection).first; _base; \
344 _base = _base->next) { \
345 Object *_object = _base->object; \
346 BLI_assert(_object != NULL);
348 #define FOREACH_COLLECTION_OBJECT_RECURSIVE_END \
389 #define FOREACH_SCENE_COLLECTION_BEGIN(scene, _instance) \
390 ITER_BEGIN (BKE_scene_collections_iterator_begin, \
391 BKE_scene_collections_iterator_next, \
392 BKE_scene_collections_iterator_end, \
397 #define FOREACH_SCENE_COLLECTION_END ITER_END
399 #define FOREACH_COLLECTION_BEGIN(_bmain, _scene, Type, _instance) \
402 Collection *_instance_next; \
403 bool is_scene_collection = (_scene) != NULL; \
406 _instance_next = _scene->master_collection; \
409 _instance_next = (_bmain)->collections.first; \
412 while ((_instance = _instance_next)) { \
413 if (is_scene_collection) { \
414 _instance_next = (_bmain)->collections.first; \
415 is_scene_collection = false; \
418 _instance_next = _instance->id.next; \
421 #define FOREACH_COLLECTION_END \
426 #define FOREACH_SCENE_OBJECT_BEGIN(scene, _instance) \
427 ITER_BEGIN (BKE_scene_objects_iterator_begin, \
428 BKE_scene_objects_iterator_next, \
429 BKE_scene_objects_iterator_end, \
434 #define FOREACH_SCENE_OBJECT_END ITER_END
struct Collection * BKE_collection_add(struct Main *bmain, struct Collection *parent, const char *name)
void BKE_scene_objects_iterator_next(struct BLI_Iterator *iter)
void BKE_scene_objects_iterator_begin_ex(struct BLI_Iterator *iter, void *data_in)
bool BKE_collection_cycle_find(struct Collection *new_ancestor, struct Collection *collection)
struct ListBase BKE_collection_object_cache_get(struct Collection *collection)
void(* BKE_scene_collections_Cb)(struct Collection *ob, void *data)
bool BKE_collection_child_add(struct Main *bmain, struct Collection *parent, struct Collection *child)
void BKE_collections_child_remove_nulls(struct Main *bmain, struct Collection *parent_collection, struct Collection *child_collection)
struct Collection * BKE_collection_object_find(struct Main *bmain, struct Scene *scene, struct Collection *collection, struct Object *ob)
const char * BKE_collection_ui_name_get(struct Collection *collection)
bool BKE_collection_cycles_fix(struct Main *bmain, struct Collection *collection)
void BKE_scene_objects_iterator_next_ex(struct BLI_Iterator *iter)
struct Collection * BKE_collection_duplicate(struct Main *bmain, struct Collection *parent, struct Collection *collection, uint duplicate_flags, uint duplicate_options)
void BKE_collection_object_cache_free(struct Collection *collection)
void BKE_collection_object_add_from(struct Main *bmain, struct Scene *scene, struct Object *ob_src, struct Object *ob_dst)
void BKE_collections_object_remove_duplicates(struct Main *bmain)
bool BKE_collection_object_add(struct Main *bmain, struct Collection *collection, struct Object *ob)
void BKE_scene_collections_iterator_begin(struct BLI_Iterator *iter, void *data_in)
bool BKE_collection_has_object_recursive_instanced(struct Collection *collection, struct Object *ob)
bool BKE_collection_object_cyclic_check(struct Main *bmain, struct Object *object, struct Collection *collection)
struct GSet * BKE_scene_objects_as_gset(struct Scene *scene, struct GSet *objects_gset)
void BKE_collection_blend_read_data(struct BlendDataReader *reader, struct Collection *collection)
void BKE_collection_compat_blend_read_lib(struct BlendLibReader *reader, struct Library *lib, struct SceneCollection *sc)
void BKE_collection_blend_read_lib(struct BlendLibReader *reader, struct Collection *collection)
struct CollectionParent CollectionParent
void BKE_collection_compat_blend_read_expand(struct BlendExpander *expander, struct SceneCollection *sc)
void BKE_collection_add_from_object(struct Main *bmain, struct Scene *scene, const struct Object *ob_src, struct Collection *collection_dst)
void BKE_scene_objects_iterator_end_ex(struct BLI_Iterator *iter)
void BKE_collection_free_data(struct Collection *collection)
bool BKE_collection_has_object(struct Collection *collection, const struct Object *ob)
bool BKE_collection_viewlayer_object_add(struct Main *bmain, const struct ViewLayer *view_layer, struct Collection *collection, struct Object *ob)
bool BKE_collection_has_object_recursive(struct Collection *collection, struct Object *ob)
bool BKE_collection_child_remove(struct Main *bmain, struct Collection *parent, struct Collection *child)
bool BKE_collection_object_remove(struct Main *bmain, struct Collection *collection, struct Object *object, bool free_us)
void BKE_collection_new_name_get(struct Collection *collection_parent, char *rname)
bool BKE_collection_object_add_notest(struct Main *bmain, struct Collection *collection, struct Object *ob)
bool BKE_collection_has_collection(const struct Collection *parent, const struct Collection *collection)
void BKE_collection_compat_blend_read_data(struct BlendDataReader *reader, struct SceneCollection *sc)
bool BKE_scene_collections_object_remove(struct Main *bmain, struct Scene *scene, struct Object *object, bool free_us)
void BKE_collection_add_from_collection(struct Main *bmain, struct Scene *scene, struct Collection *collection_src, struct Collection *collection_dst)
void BKE_collections_object_remove_nulls(struct Main *bmain)
struct SceneObjectsIteratorExData SceneObjectsIteratorExData
bool BKE_collection_is_in_scene(struct Collection *collection)
struct Collection * BKE_collection_master_add(void)
bool BKE_collection_child_add_no_sync(struct Collection *parent, struct Collection *child)
void BKE_collection_blend_read_expand(struct BlendExpander *expander, struct Collection *collection)
void BKE_scene_objects_iterator_end(struct BLI_Iterator *iter)
struct Collection * BKE_collection_parent_editable_find_recursive(const struct ViewLayer *view_layer, struct Collection *collection)
bool BKE_collection_is_empty(const struct Collection *collection)
bool BKE_collection_move(struct Main *bmain, struct Collection *to_parent, struct Collection *from_parent, struct Collection *relative, bool relative_after, struct Collection *collection)
void(* BKE_scene_objects_Cb)(struct Object *ob, void *data)
void BKE_collections_after_lib_link(struct Main *bmain)
bool BKE_collection_delete(struct Main *bmain, struct Collection *collection, bool hierarchy)
void BKE_scene_collections_iterator_end(struct BLI_Iterator *iter)
void BKE_scene_collections_iterator_next(struct BLI_Iterator *iter)
struct Base * BKE_collection_or_layer_objects(const struct ViewLayer *view_layer, struct Collection *collection)
void BKE_scene_objects_iterator_begin(struct BLI_Iterator *iter, void *data_in)
void BKE_collection_object_move(struct Main *bmain, struct Scene *scene, struct Collection *collection_dst, struct Collection *collection_src, struct Object *ob)
struct Collection * BKE_collection_from_index(struct Scene *scene, int index)
void BKE_collection_blend_write_nolib(struct BlendWriter *writer, struct Collection *collection)
bool BKE_collection_objects_select(struct ViewLayer *view_layer, struct Collection *collection, bool deselect)
void BKE_collection_parent_relations_rebuild(struct Collection *collection)
void BKE_main_collections_parent_relations_rebuild(struct Main *bmain)
ListBase BKE_collection_object_cache_instanced_get(struct Collection *collection)
These structs are the foundation for all linked lists in the library system.
SyclQueue void void size_t num_bytes void
struct CollectionParent * prev
struct Collection * collection
struct CollectionParent * next