Blender V4.3
BKE_collection.hh File Reference
#include "BLI_compiler_compat.h"
#include "BLI_ghash.h"
#include "BLI_iterator.h"
#include "BLI_sys_types.h"
#include "DNA_listBase.h"

Go to the source code of this file.

Classes

struct  CollectionParent
 
struct  SceneObjectsIteratorExData
 

Macros

#define BKE_SCENE_COLLECTION_NAME   "Scene Collection"
 
#define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN(_collection, _object, _mode)
 
#define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_END
 
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
 
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
 
#define FOREACH_SCENE_COLLECTION_BEGIN(scene, _instance)
 
#define FOREACH_SCENE_COLLECTION_END   ITER_END
 
#define FOREACH_COLLECTION_BEGIN(_bmain, _scene, Type, _instance)
 
#define FOREACH_COLLECTION_END
 
#define FOREACH_SCENE_OBJECT_BEGIN(scene, _instance)
 
#define FOREACH_SCENE_OBJECT_END   ITER_END
 

Typedefs

using BKE_scene_objects_Cb = void (*)(Object *ob, void *data)
 
using BKE_scene_collections_Cb = void (*)(Collection *ob, void *data)
 

Functions

CollectionBKE_collection_add (Main *bmain, Collection *collection_parent, const char *name_custom)
 
void BKE_collection_add_from_object (Main *bmain, Scene *scene, const Object *ob_src, Collection *collection_dst)
 
void BKE_collection_add_from_collection (Main *bmain, Scene *scene, Collection *collection_src, Collection *collection_dst)
 
void BKE_collection_free_data (Collection *collection)
 
void BKE_collection_exporter_name_set (const ListBase *exporters, CollectionExport *data, const char *newname)
 
void BKE_collection_exporter_free_data (CollectionExport *data)
 
bool BKE_collection_delete (Main *bmain, Collection *collection, bool hierarchy)
 
CollectionBKE_collection_duplicate (Main *bmain, Collection *parent, CollectionChild *child_old, Collection *collection, uint duplicate_flags, uint duplicate_options)
 
CollectionBKE_collection_master_add (Scene *scene)
 
bool BKE_collection_has_object (Collection *collection, const Object *ob)
 
bool BKE_collection_has_object_recursive (Collection *collection, Object *ob)
 
bool BKE_collection_has_object_recursive_instanced (Collection *collection, Object *ob)
 
bool BKE_collection_has_object_recursive_instanced_orig_id (Collection *collection_eval, Object *object_eval)
 
CollectionBKE_collection_object_find (Main *bmain, Scene *scene, Collection *collection, Object *ob)
 
CollectionChildBKE_collection_child_find (Collection *parent, Collection *collection)
 
bool BKE_collection_is_empty (const Collection *collection)
 
bool BKE_collection_object_add (Main *bmain, Collection *collection, Object *ob)
 
bool BKE_collection_viewlayer_object_add (Main *bmain, const ViewLayer *view_layer, Collection *collection, Object *ob)
 
bool BKE_collection_object_add_notest (Main *bmain, Collection *collection, Object *ob)
 
void BKE_collection_object_add_from (Main *bmain, Scene *scene, Object *ob_src, Object *ob_dst)
 
bool BKE_collection_object_remove (Main *bmain, Collection *collection, Object *ob, bool free_us)
 
bool BKE_collection_object_replace (Main *bmain, Collection *collection, Object *ob_old, Object *ob_new)
 
void BKE_collection_object_move (Main *bmain, Scene *scene, Collection *collection_dst, Collection *collection_src, Object *ob)
 
bool BKE_scene_collections_object_remove (Main *bmain, Scene *scene, Object *ob, bool free_us)
 
void BKE_collections_object_remove_invalids (Main *bmain)
 
void BKE_collections_child_remove_nulls (Main *bmain, Collection *parent_collection, Collection *child_collection)
 
bool BKE_collection_is_in_scene (Collection *collection)
 
void BKE_collections_after_lib_link (Main *bmain)
 
bool BKE_collection_object_cyclic_check (Main *bmain, Object *object, Collection *collection)
 
ListBase BKE_collection_object_cache_get (Collection *collection)
 
ListBase BKE_collection_object_cache_instanced_get (Collection *collection)
 
void BKE_collection_object_cache_free (const Main *bmain, Collection *collection, const int id_create_flag)
 
void BKE_main_collections_object_cache_free (const Main *bmain)
 
BaseBKE_collection_or_layer_objects (const Scene *scene, ViewLayer *view_layer, Collection *collection)
 
CollectionBKE_collection_from_index (Scene *scene, int index)
 
void BKE_collection_new_name_get (Collection *collection_parent, char *rname)
 
const char * BKE_collection_ui_name_get (Collection *collection)
 
bool BKE_collection_objects_select (const Scene *scene, ViewLayer *view_layer, Collection *collection, bool deselect)
 
bool BKE_collection_child_add (Main *bmain, Collection *parent, Collection *child)
 
bool BKE_collection_child_add_no_sync (Main *bmain, Collection *parent, Collection *child)
 
bool BKE_collection_child_remove (Main *bmain, Collection *parent, Collection *child)
 
bool BKE_collection_move (Main *bmain, Collection *to_parent, Collection *from_parent, Collection *relative, bool relative_after, Collection *collection)
 
bool BKE_collection_cycle_find (Collection *new_ancestor, Collection *collection)
 
bool BKE_collection_cycles_fix (Main *bmain, Collection *collection)
 
bool BKE_collection_has_collection (const Collection *parent, const Collection *collection)
 
CollectionBKE_collection_parent_editable_find_recursive (const ViewLayer *view_layer, Collection *collection)
 
void BKE_collection_parent_relations_rebuild (Collection *collection)
 
void BKE_main_collections_parent_relations_rebuild (Main *bmain)
 
bool BKE_collection_validate (Collection *collection)
 
void BKE_collection_blend_write_prepare_nolib (BlendWriter *writer, Collection *collection)
 
void BKE_collection_blend_write_nolib (BlendWriter *writer, Collection *collection)
 
void BKE_collection_blend_read_data (BlendDataReader *reader, Collection *collection, ID *owner_id)
 
void BKE_scene_collections_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_scene_collections_iterator_next (BLI_Iterator *iter)
 
void BKE_scene_collections_iterator_end (BLI_Iterator *iter)
 
void BKE_scene_objects_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_scene_objects_iterator_next (BLI_Iterator *iter)
 
void BKE_scene_objects_iterator_end (BLI_Iterator *iter)
 
void BKE_scene_objects_iterator_begin_ex (BLI_Iterator *iter, void *data_in)
 
void BKE_scene_objects_iterator_next_ex (BLI_Iterator *iter)
 
void BKE_scene_objects_iterator_end_ex (BLI_Iterator *iter)
 
GSetBKE_scene_objects_as_gset (Scene *scene, GSet *objects_gset)
 

Macro Definition Documentation

◆ BKE_SCENE_COLLECTION_NAME

#define BKE_SCENE_COLLECTION_NAME   "Scene Collection"

Definition at line 107 of file BKE_collection.hh.

Referenced by BKE_collection_master_add(), and blo_do_versions_300().

◆ FOREACH_COLLECTION_BEGIN

#define FOREACH_COLLECTION_BEGIN ( _bmain,
_scene,
Type,
_instance )
Value:
{ \
Type _instance; \
Collection *_instance_next; \
bool is_scene_collection = (_scene) != NULL; \
\
if (_scene) { \
_instance_next = _scene->master_collection; \
} \
else { \
_instance_next = static_cast<Collection *>((_bmain)->collections.first); \
} \
\
while ((_instance = _instance_next)) { \
if (is_scene_collection) { \
_instance_next = static_cast<Collection *>((_bmain)->collections.first); \
is_scene_collection = false; \
} \
else { \
_instance_next = static_cast<Collection *>(_instance->id.next); \
}
#define NULL

Definition at line 419 of file BKE_collection.hh.

Referenced by blender::ed::object::collection_objects_remove_exec(), blender::ed::object::objects_add_active_exec(), and blender::ed::object::objects_remove_active_exec().

◆ FOREACH_COLLECTION_END

◆ FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN

◆ FOREACH_COLLECTION_OBJECT_RECURSIVE_END

◆ FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN

#define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN ( _collection,
_object,
_mode )
Value:
{ \
int _base_flag = (_mode == DAG_EVAL_VIEWPORT) ? BASE_ENABLED_VIEWPORT : BASE_ENABLED_RENDER; \
int _object_visibility_flag = (_mode == DAG_EVAL_VIEWPORT) ? OB_HIDE_VIEWPORT : \
int _base_id = 0; \
for (Base *_base = static_cast<Base *>(BKE_collection_object_cache_get(_collection).first); \
_base; \
_base = _base->next, _base_id++) \
{ \
Object *_object = _base->object; \
if ((_base->flag & _base_flag) && \
(_object->visibility_flag & _object_visibility_flag) == 0) {
@ DAG_EVAL_VIEWPORT
@ BASE_ENABLED_RENDER
@ BASE_ENABLED_VIEWPORT
@ OB_HIDE_RENDER
@ OB_HIDE_VIEWPORT
short visibility_flag

Definition at line 339 of file BKE_collection.hh.

Referenced by blender::add_this_collection(), blender::deg::DepsgraphRelationBuilder::build_object_instance_collection(), make_child_duplis(), make_duplis_collection(), make_duplis_geometry_set_impl(), and make_duplis_particle_system().

◆ FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_END

◆ FOREACH_SCENE_COLLECTION_BEGIN

#define FOREACH_SCENE_COLLECTION_BEGIN ( scene,
_instance )
Value:
scene, \
_instance)
void BKE_scene_collections_iterator_next(BLI_Iterator *iter)
void BKE_scene_collections_iterator_begin(BLI_Iterator *iter, void *data_in)
void BKE_scene_collections_iterator_end(BLI_Iterator *iter)
#define ITER_BEGIN(callback_begin, callback_next, callback_end, _data_in, _type, _instance)

Definition at line 409 of file BKE_collection.hh.

Referenced by BKE_collection_add_from_collection(), BKE_collection_add_from_object(), BKE_collection_object_add_from(), scene_collections_object_remove(), and blender::ed::outliner::unlink_object_fn().

◆ FOREACH_SCENE_COLLECTION_END

◆ FOREACH_SCENE_OBJECT_BEGIN

◆ FOREACH_SCENE_OBJECT_END

Typedef Documentation

◆ BKE_scene_collections_Cb

using BKE_scene_collections_Cb = void (*)(Collection *ob, void *data)

Definition at line 335 of file BKE_collection.hh.

◆ BKE_scene_objects_Cb

using BKE_scene_objects_Cb = void (*)(Object *ob, void *data)

Definition at line 334 of file BKE_collection.hh.

Function Documentation

◆ BKE_collection_add()

◆ BKE_collection_add_from_collection()

void BKE_collection_add_from_collection ( Main * bmain,
Scene * scene,
Collection * collection_src,
Collection * collection_dst )

Add collection_dst to all scene collections that reference collection collection_src is in.

Logic is very similar to BKE_collection_object_add_from().

Definition at line 478 of file collection.cc.

References BKE_collection_child_find(), BKE_main_collection_sync(), collection_child_add(), FOREACH_SCENE_COLLECTION_BEGIN, FOREACH_SCENE_COLLECTION_END, ID_IS_EDITABLE, and ID_IS_OVERRIDE_LIBRARY.

Referenced by lib_override_library_create_post_process().

◆ BKE_collection_add_from_object()

void BKE_collection_add_from_object ( Main * bmain,
Scene * scene,
const Object * ob_src,
Collection * collection_dst )

Add collection_dst to all scene collections that reference object ob_src is in. Used to replace an instance object with a collection (library override operator).

Logic is very similar to BKE_collection_object_add_from().

Definition at line 454 of file collection.cc.

References BKE_collection_has_object(), BKE_main_collection_sync(), collection_child_add(), FOREACH_SCENE_COLLECTION_BEGIN, FOREACH_SCENE_COLLECTION_END, ID_IS_LINKED, and ID_IS_OVERRIDABLE_LIBRARY.

Referenced by lib_override_library_create_post_process().

◆ BKE_collection_blend_read_data()

◆ BKE_collection_blend_write_nolib()

void BKE_collection_blend_write_nolib ( BlendWriter * writer,
Collection * collection )

◆ BKE_collection_blend_write_prepare_nolib()

void BKE_collection_blend_write_prepare_nolib ( BlendWriter * writer,
Collection * collection )

Perform some pre-writing cleanup on the COllection data itself (not in any sub-data referenced by pointers). To be called before writing the Collection struct itself.

Definition at line 269 of file collection.cc.

Referenced by collection_blend_write(), and scene_blend_write().

◆ BKE_collection_child_add()

◆ BKE_collection_child_add_no_sync()

bool BKE_collection_child_add_no_sync ( Main * bmain,
Collection * parent,
Collection * child )

◆ BKE_collection_child_find()

◆ BKE_collection_child_remove()

◆ BKE_collection_cycle_find()

bool BKE_collection_cycle_find ( Collection * new_ancestor,
Collection * collection )

Find potential cycles in collections.

Parameters
new_ancestorthe potential new owner of given collection, or the collection to check if the later is NULL.
collectionthe collection we want to add to new_ancestor, may be NULL if we just want to ensure new_ancestor does not already have cycles.
Returns
true if a cycle is found.

Definition at line 1750 of file collection.cc.

References BKE_collection_cycle_find(), collection_instance_find_recursive(), LISTBASE_FOREACH, Collection_Runtime::parents, and Collection::runtime.

Referenced by BKE_collection_cycle_find(), BKE_collection_move(), BKE_collection_parent_relations_rebuild(), BKE_collection_validate(), blender::ed::object::collection_add_info_get_from_op(), collection_child_add(), collection_cycle_fix_recursive(), and blender::ed::outliner::collection_instance_exec().

◆ BKE_collection_cycles_fix()

bool BKE_collection_cycles_fix ( Main * bmain,
Collection * collection )

Find and fix potential cycles in collections.

Parameters
collectionThe collection to check for existing cycles.
Returns
true if cycles are found and fixed.

Definition at line 1814 of file collection.cc.

References collection_cycle_fix_recursive(), and collection_instance_fix_recursive().

Referenced by do_versions_after_linking_290().

◆ BKE_collection_delete()

◆ BKE_collection_duplicate()

Collection * BKE_collection_duplicate ( Main * bmain,
Collection * parent,
CollectionChild * child_old,
Collection * collection,
uint duplicate_flags,
uint duplicate_options )

Make a deep copy (aka duplicate) of the given collection and all of its children, recursively.

Warning
This functions will clear all bmain #ID.idnew pointers, unless LIB_ID_DUPLICATE_IS_SUBPROCESS duplicate option is passed on, in which case caller is responsible to reconstruct collection dependencies information's (i.e. call BKE_main_collection_sync).

Definition at line 727 of file collection.cc.

References BKE_libblock_relink_to_newid(), BKE_main_collection_sync(), BKE_main_id_newptr_and_tag_clear(), BLI_assert, collection_duplicate_recursive(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, Collection::id, ID_IS_LINKED, ID_TAG_NEW, ID_TAG_NO_MAIN, LIB_ID_CREATE_NO_MAIN, LIB_ID_DUPLICATE_IS_ROOT_ID, LIB_ID_DUPLICATE_IS_SUBPROCESS, ID::tag, and USER_DUP_LINKED_ID.

Referenced by BKE_scene_duplicate(), and blender::ed::outliner::collection_duplicate_exec().

◆ BKE_collection_exporter_free_data()

void BKE_collection_exporter_free_data ( CollectionExport * data)

Free all data owned by the collection exporter.

Definition at line 533 of file collection.cc.

References IDP_FreeProperty().

Referenced by blender::ed::object::collection_exporter_remove_exec(), and collection_free_data().

◆ BKE_collection_exporter_name_set()

void BKE_collection_exporter_name_set ( const ListBase * exporters,
CollectionExport * data,
const char * newname )

Assigns a unique name to the collection exporter.

Definition at line 519 of file collection.cc.

References BLI_listbase_from_link(), BLI_uniquename(), offsetof, and STRNCPY.

Referenced by blender::ed::object::collection_exporter_add_exec().

◆ BKE_collection_free_data()

void BKE_collection_free_data ( Collection * collection)

Free (or release) any data used by this collection (does not free the collection itself).

Definition at line 513 of file collection.cc.

References BKE_libblock_free_data(), and collection_free_data().

Referenced by scene_free_data().

◆ BKE_collection_from_index()

Collection * BKE_collection_from_index ( Scene * scene,
int index )

Return Scene Collection for a given index.

The index is calculated from top to bottom counting the children before the siblings.

Definition at line 2087 of file collection.cc.

References collection_from_index_recursive().

Referenced by blender::ed::object::move_to_collection_exec(), and blender::ed::object::move_to_collection_invoke().

◆ BKE_collection_has_collection()

◆ BKE_collection_has_object()

◆ BKE_collection_has_object_recursive()

◆ BKE_collection_has_object_recursive_instanced()

bool BKE_collection_has_object_recursive_instanced ( Collection * collection,
Object * ob )

◆ BKE_collection_has_object_recursive_instanced_orig_id()

bool BKE_collection_has_object_recursive_instanced_orig_id ( Collection * collection_eval,
Object * object_eval )

Find whether an evaluated object's original ID is contained or instanced by any object in this collection. The collection is expected to be an evaluated data-block too.

Definition at line 1084 of file collection.cc.

References BKE_collection_object_cache_instanced_get(), BLI_assert, DEG_get_original_id(), Collection::id, Object::id, ID_TAG_COPIED_ON_EVAL, LISTBASE_FOREACH, and ID::tag.

Referenced by blender::nodes::node_geo_collection_info_cc::node_geo_exec().

◆ BKE_collection_is_empty()

bool BKE_collection_is_empty ( const Collection * collection)

◆ BKE_collection_is_in_scene()

◆ BKE_collection_master_add()

◆ BKE_collection_move()

◆ BKE_collection_new_name_get()

void BKE_collection_new_name_get ( Collection * collection_parent,
char * rname )

◆ BKE_collection_object_add()

bool BKE_collection_object_add ( Main * bmain,
Collection * collection,
Object * ob )

Add object to given collection, ensuring this collection is 'editable' (i.e. local and not a liboverride), and finding a suitable parent one otherwise.

Definition at line 1468 of file collection.cc.

References BKE_collection_viewlayer_object_add().

Referenced by bc_add_object(), BKE_collection_object_move(), BKE_object_add_for_data(), blender::ed::object::collection_add_exec(), blender::ed::object::collection_create_exec(), blender::ed::outliner::collection_drop_invoke(), blender::ed::object::collection_link_exec(), blender::io::usd::USDStageReader::create_proto_collections(), ED_rigidbody_constraint_add(), blender::io::obj::geometry_to_blender_objects(), blender::io::usd::import_endjob(), import_endjob(), blender::io::ply::importer_main(), blender::io::stl::importer_main(), lib_override_library_create_post_process(), light_linking_collection_add_object(), loose_data_instantiate_object_base_instance_init(), blender::ed::object::make_links_data_exec(), blender::ed::object::make_links_scene_exec(), blender::ed::object::make_local_all__instance_indirect_unused(), blender::ed::object::move_to_collection_exec(), Freestyle::BlenderStrokeRenderer::NewMesh(), blender::ed::object::object_add_sync_base_collection(), blender::ed::object::object_add_sync_rigid_body(), object_preview_scene_create(), blender::ed::object::objects_add_active_exec(), blender::ed::outliner::scene_drop_invoke(), blender::bke::tests::WholeIDTestData::setup(), blender::bke::tests::TEST_F(), blender::bke::tests::TEST_F(), and ui_template_id_liboverride_hierarchy_make().

◆ BKE_collection_object_add_from()

◆ BKE_collection_object_add_notest()

bool BKE_collection_object_add_notest ( Main * bmain,
Collection * collection,
Object * ob )

Same as BKE_collection_object_add, but unconditionally adds the object to the given collection.

NOTE: required in certain cases, like do-versioning or complex ID management tasks.

Definition at line 1443 of file collection.cc.

References BKE_collection_is_in_scene(), BKE_main_collection_sync(), BLI_assert, collection_object_add(), ID_TAG_NO_MAIN, and LIB_ID_CREATE_NO_MAIN.

Referenced by BKE_collection_viewlayer_object_add(), do_version_layers_to_collections(), and do_versions_after_linking_280().

◆ BKE_collection_object_cache_free()

void BKE_collection_object_cache_free ( const Main * bmain,
Collection * collection,
const int id_create_flag )

Free the object cache of given collection and all of its ancestors (recursively).

Parameters
bmainThe Main database owning the collection. May be nullptr, only used if doing depsgraph tagging.
id_create_flagFlags controlling ID creation, used here to enable or not depsgraph tagging of affected IDs (e.g. LIB_ID_CREATE_NO_DEG_TAG would prevent depsgraph tagging).

Definition at line 946 of file collection.cc.

References BLI_assert, collection_object_cache_free_parent_recursive(), ID_RECALC_GEOMETRY, and ID_RECALC_HIERARCHY.

Referenced by BKE_collection_move(), collection_child_add(), collection_child_remove(), collection_gobject_hash_ensure_fix(), collection_object_add(), collection_object_remove_no_gobject_hash(), and blender::deg::deg_graph_build_finalize().

◆ BKE_collection_object_cache_get()

◆ BKE_collection_object_cache_instanced_get()

◆ BKE_collection_object_cyclic_check()

bool BKE_collection_object_cyclic_check ( Main * bmain,
Object * object,
Collection * collection )

◆ BKE_collection_object_find()

◆ BKE_collection_object_move()

void BKE_collection_object_move ( Main * bmain,
Scene * scene,
Collection * collection_dst,
Collection * collection_src,
Object * ob )

Move object from a collection into another

If source collection is NULL move it from all the existing collections.

Definition at line 1674 of file collection.cc.

References BKE_collection_object_add(), BKE_collection_object_remove(), and scene_collections_object_remove().

Referenced by blender::ed::outliner::collection_drop_invoke(), and blender::ed::object::move_to_collection_exec().

◆ BKE_collection_object_remove()

◆ BKE_collection_object_replace()

bool BKE_collection_object_replace ( Main * bmain,
Collection * collection,
Object * ob_old,
Object * ob_new )

◆ BKE_collection_objects_select()

bool BKE_collection_objects_select ( const Scene * scene,
ViewLayer * view_layer,
Collection * collection,
bool deselect )

Select all the objects in this Collection (and its nested collections) for this ViewLayer. Return true if any object was selected.

Definition at line 2134 of file collection.cc.

References BKE_layer_collection_first_from_scene_collection(), BKE_layer_collection_objects_select(), and collection_objects_select().

◆ BKE_collection_or_layer_objects()

◆ BKE_collection_parent_editable_find_recursive()

◆ BKE_collection_parent_relations_rebuild()

void BKE_collection_parent_relations_rebuild ( Collection * collection)

Rebuild parent relationships from child ones, for all children of given collection.

Note
Given collection is assumed to already have valid parents.

Definition at line 1937 of file collection.cc.

References BKE_collection_child_find(), BKE_collection_cycle_find(), BLI_addtail(), BLI_assert, BLI_freelinkN(), CollectionParent::collection, collection_find_parent(), ID_TAG_COPIED_ON_EVAL, ID_TAG_NO_MAIN, LISTBASE_FOREACH_MUTABLE, and MEM_callocN.

Referenced by collection_parents_rebuild_recursive().

◆ BKE_collection_ui_name_get()

const char * BKE_collection_ui_name_get ( Collection * collection)

◆ BKE_collection_validate()

bool BKE_collection_validate ( Collection * collection)

Perform some validation on integrity of the data of this collection.

Returns
true if everything is OK, false if some errors are detected.

Definition at line 2020 of file collection.cc.

References BKE_collection_cycle_find(), BLI_gset_clear(), BLI_gset_ensure_p_ex(), BLI_gset_free(), BLI_gset_ptr_new(), BLI_listbase_validate(), and LISTBASE_FOREACH.

◆ BKE_collection_viewlayer_object_add()

bool BKE_collection_viewlayer_object_add ( Main * bmain,
const ViewLayer * view_layer,
Collection * collection,
Object * ob )

Add object to given collection, similar to BKE_collection_object_add.

However, it additionally ensures that the selected collection is also part of the given view_layer, if non-NULL. Otherwise, the object is not added to any collection.

Definition at line 1473 of file collection.cc.

References BKE_collection_object_add_notest(), and BKE_collection_parent_editable_find_recursive().

Referenced by BKE_collection_object_add(), and BKE_object_add().

◆ BKE_collections_after_lib_link()

void BKE_collections_after_lib_link ( Main * bmain)

Definition at line 1713 of file collection.cc.

References BKE_main_collection_sync().

Referenced by blo_read_file_internal(), and library_link_end().

◆ BKE_collections_child_remove_nulls()

void BKE_collections_child_remove_nulls ( Main * bmain,
Collection * parent_collection,
Collection * child_collection )

Remove all NULL children from parent collections of changed collection. This is used for library remapping, where these pointers have been set to NULL. Otherwise this should never happen.

Note
caller must ensure BKE_main_collection_sync_remap() is called afterwards!
Parameters
parent_collectionThe collection owning the pointers that were remapped. May be NULL, in which case whole bmain database of collections is checked.
child_collectionThe collection that was remapped to another pointer. May be NULL, in which case whole bmain database of collections is checked.

Definition at line 1635 of file collection.cc.

References BKE_collection_child_find(), BLI_freelinkN(), collection_missing_parents_remove(), collection_null_children_remove(), Main::collections, LISTBASE_FOREACH, LISTBASE_FOREACH_MUTABLE, Collection_Runtime::parents, Collection::runtime, and Main::scenes.

Referenced by libblock_remap_data_postprocess_collection_update().

◆ BKE_collections_object_remove_invalids()

void BKE_collections_object_remove_invalids ( Main * bmain)

Check all collections in bmain (including embedded ones in scenes) for invalid CollectionObject (either with NULL object pointer, or duplicates), and remove them.

Note
In case of duplicates, the first CollectionObject in the list is kept, all others are removed.

Definition at line 1604 of file collection.cc.

References collection_gobject_hash_ensure_fix(), Main::collections, LISTBASE_FOREACH, and Main::scenes.

Referenced by libblock_remap_data_postprocess_object_update().

◆ BKE_main_collections_object_cache_free()

void BKE_main_collections_object_cache_free ( const Main * bmain)

Free the object cache of all collections in given bmain, including master collections of scenes.

Definition at line 955 of file collection.cc.

References collection_object_cache_free(), Main::collections, ListBase::first, ID_RECALC_GEOMETRY, ID_RECALC_HIERARCHY, and Main::scenes.

Referenced by BKE_main_collection_sync_remap().

◆ BKE_main_collections_parent_relations_rebuild()

void BKE_main_collections_parent_relations_rebuild ( Main * bmain)

◆ BKE_scene_collections_iterator_begin()

void BKE_scene_collections_iterator_begin ( BLI_Iterator * iter,
void * data_in )

Only use this in non-performance critical situations (it iterates over all scene collections twice)

Definition at line 2262 of file collection.cc.

References BLI_assert, BLI_ITERATOR_INIT, BLI_Iterator::current, BLI_Iterator::data, data, MEM_callocN, CollectionsIteratorData::scene, scene, and scene_collections_array().

Referenced by scene_objects_iterator_begin().

◆ BKE_scene_collections_iterator_end()

void BKE_scene_collections_iterator_end ( BLI_Iterator * iter)

Definition at line 2292 of file collection.cc.

References BLI_Iterator::data, MEM_freeN(), and BLI_Iterator::valid.

Referenced by BKE_scene_objects_iterator_end().

◆ BKE_scene_collections_iterator_next()

void BKE_scene_collections_iterator_next ( BLI_Iterator * iter)

◆ BKE_scene_collections_object_remove()

◆ BKE_scene_objects_as_gset()

GSet * BKE_scene_objects_as_gset ( Scene * scene,
GSet * objects_gset )

Generate a new GSet (or extend given objects_gset if not NULL) with all objects referenced by all collections of given scene.

Note
This will include objects without a base currently (because they would belong to excluded collections only e.g.).

Definition at line 2467 of file collection.cc.

References BKE_scene_objects_iterator_end(), BKE_scene_objects_iterator_next(), BLI_Iterator::data, scene_objects_iterator_begin(), and BLI_Iterator::valid.

Referenced by lib_override_library_create_post_process().

◆ BKE_scene_objects_iterator_begin()

void BKE_scene_objects_iterator_begin ( BLI_Iterator * iter,
void * data_in )

Definition at line 2338 of file collection.cc.

References scene_objects_iterator_begin().

Referenced by BKE_scene_objects_iterator_begin_ex().

◆ BKE_scene_objects_iterator_begin_ex()

void BKE_scene_objects_iterator_begin_ex ( BLI_Iterator * iter,
void * data_in )

◆ BKE_scene_objects_iterator_end()

◆ BKE_scene_objects_iterator_end_ex()

void BKE_scene_objects_iterator_end_ex ( BLI_Iterator * iter)

Definition at line 2393 of file collection.cc.

References BKE_scene_objects_iterator_end(), BLI_Iterator::data, and data.

◆ BKE_scene_objects_iterator_next()

◆ BKE_scene_objects_iterator_next_ex()

void BKE_scene_objects_iterator_next_ex ( BLI_Iterator * iter)