Blender  V3.3
Typedefs | Functions
BKE_lib_override.h File Reference

Go to the source code of this file.

Typedefs

typedef struct Main OverrideLibraryStorage
 

Functions

struct IDOverrideLibraryBKE_lib_override_library_init (struct ID *local_id, struct ID *reference_id)
 
void BKE_lib_override_library_copy (struct ID *dst_id, const struct ID *src_id, bool do_full_copy)
 
void BKE_lib_override_library_clear (struct IDOverrideLibrary *override, bool do_id_user)
 
void BKE_lib_override_library_free (struct IDOverrideLibrary **override, bool do_id_user)
 
IDOverrideLibraryBKE_lib_override_library_get (struct Main *bmain, struct ID *id, struct ID *owner_id_hint, struct ID **r_owner_id)
 
bool BKE_lib_override_library_is_user_edited (const struct ID *id)
 
bool BKE_lib_override_library_is_system_defined (const struct Main *bmain, const struct ID *id)
 
bool BKE_lib_override_library_property_is_animated (const ID *id, const IDOverrideLibraryProperty *override_prop, const struct PropertyRNA *override_rna_prop, const int rnaprop_index)
 
bool BKE_lib_override_library_is_hierarchy_leaf (struct Main *bmain, struct ID *id)
 
struct IDBKE_lib_override_library_create_from_id (struct Main *bmain, struct ID *reference_id, bool do_tagged_remap)
 
bool BKE_lib_override_library_create_from_tag (struct Main *bmain, struct Library *owner_library, const struct ID *id_root_reference, struct ID *id_hierarchy_root, const struct ID *id_hierarchy_root_reference, bool do_no_main, const bool do_fully_editable)
 
bool BKE_lib_override_library_create (struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Library *owner_library, struct ID *id_root_reference, struct ID *id_hierarchy_root_reference, struct ID *id_instance_hint, struct ID **r_id_root_override, const bool do_fully_editable)
 
bool BKE_lib_override_library_template_create (struct ID *id)
 
bool BKE_lib_override_library_proxy_convert (struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Object *ob_proxy)
 
void BKE_lib_override_library_main_proxy_convert (struct Main *bmain, struct BlendFileReadReport *reports)
 
void BKE_lib_override_library_main_hierarchy_root_ensure (struct Main *bmain)
 
bool BKE_lib_override_library_resync (struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct ID *id_root, struct Collection *override_resync_residual_storage, bool do_hierarchy_enforce, struct BlendFileReadReport *reports)
 
void BKE_lib_override_library_main_resync (struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct BlendFileReadReport *reports)
 
void BKE_lib_override_library_delete (struct Main *bmain, struct ID *id_root)
 
void BKE_lib_override_library_make_local (struct ID *id)
 
struct IDOverrideLibraryPropertyBKE_lib_override_library_property_find (struct IDOverrideLibrary *override, const char *rna_path)
 
struct IDOverrideLibraryPropertyBKE_lib_override_library_property_get (struct IDOverrideLibrary *override, const char *rna_path, bool *r_created)
 
void BKE_lib_override_library_property_delete (struct IDOverrideLibrary *override, struct IDOverrideLibraryProperty *override_property)
 
bool BKE_lib_override_rna_property_find (struct PointerRNA *idpoin, const struct IDOverrideLibraryProperty *library_prop, struct PointerRNA *r_override_poin, struct PropertyRNA **r_override_prop, int *r_index)
 
struct IDOverrideLibraryPropertyOperationBKE_lib_override_library_property_operation_find (struct IDOverrideLibraryProperty *override_property, const char *subitem_refname, const char *subitem_locname, int subitem_refindex, int subitem_locindex, bool strict, bool *r_strict)
 
struct IDOverrideLibraryPropertyOperationBKE_lib_override_library_property_operation_get (struct IDOverrideLibraryProperty *override_property, short operation, const char *subitem_refname, const char *subitem_locname, int subitem_refindex, int subitem_locindex, bool strict, bool *r_strict, bool *r_created)
 
void BKE_lib_override_library_property_operation_delete (struct IDOverrideLibraryProperty *override_property, struct IDOverrideLibraryPropertyOperation *override_property_operation)
 
bool BKE_lib_override_library_property_operation_operands_validate (struct IDOverrideLibraryPropertyOperation *override_property_operation, struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage)
 
void BKE_lib_override_library_validate (struct Main *bmain, struct ID *id, struct ReportList *reports)
 
void BKE_lib_override_library_main_validate (struct Main *bmain, struct ReportList *reports)
 
bool BKE_lib_override_library_status_check_local (struct Main *bmain, struct ID *local)
 
bool BKE_lib_override_library_status_check_reference (struct Main *bmain, struct ID *local)
 
bool BKE_lib_override_library_operations_create (struct Main *bmain, struct ID *local)
 
bool BKE_lib_override_library_main_operations_create (struct Main *bmain, bool force_auto)
 
void BKE_lib_override_library_id_reset (struct Main *bmain, struct ID *id_root, bool do_reset_system_override)
 
void BKE_lib_override_library_id_hierarchy_reset (struct Main *bmain, struct ID *id_root, bool do_reset_system_override)
 
void BKE_lib_override_library_operations_tag (struct IDOverrideLibraryProperty *override_property, short tag, bool do_set)
 
void BKE_lib_override_library_properties_tag (struct IDOverrideLibrary *override, short tag, bool do_set)
 
void BKE_lib_override_library_main_tag (struct Main *bmain, short tag, bool do_set)
 
void BKE_lib_override_library_id_unused_cleanup (struct ID *local)
 
void BKE_lib_override_library_main_unused_cleanup (struct Main *bmain)
 
void BKE_lib_override_library_update (struct Main *bmain, struct ID *local)
 
void BKE_lib_override_library_main_update (struct Main *bmain)
 
bool BKE_lib_override_library_id_is_user_deletable (struct Main *bmain, struct ID *id)
 
OverrideLibraryStorageBKE_lib_override_library_operations_store_init (void)
 
struct IDBKE_lib_override_library_operations_store_start (struct Main *bmain, OverrideLibraryStorage *override_storage, struct ID *local)
 
void BKE_lib_override_library_operations_store_end (OverrideLibraryStorage *override_storage, struct ID *local)
 
void BKE_lib_override_library_operations_store_finalize (OverrideLibraryStorage *override_storage)
 

Detailed Description

API to manage data-blocks inside of Blender's Main data-base, or as independent runtime-only data.

Note
BKE_lib_ files are for operations over data-blocks themselves, although they might alter Main as well (when creating/renaming/deleting an ID e.g.).

Names

Warning
Descriptions below is ideal goal, current status of naming does not yet fully follow it (this is WIP).

Definition in file BKE_lib_override.h.

Typedef Documentation

◆ OverrideLibraryStorage

typedef struct Main OverrideLibraryStorage

Definition at line 477 of file BKE_lib_override.h.

Function Documentation

◆ BKE_lib_override_library_clear()

void BKE_lib_override_library_clear ( struct IDOverrideLibrary override,
bool  do_id_user 
)

◆ BKE_lib_override_library_copy()

void BKE_lib_override_library_copy ( struct ID dst_id,
const struct ID src_id,
bool  do_full_copy 
)

Shallow or deep copy of a whole override from src_id to dst_id.

Referenced by BKE_libblock_copy_ex().

◆ BKE_lib_override_library_create()

bool BKE_lib_override_library_create ( struct Main bmain,
struct Scene scene,
struct ViewLayer view_layer,
struct Library owner_library,
struct ID id_root_reference,
struct ID id_hierarchy_root_reference,
struct ID id_instance_hint,
struct ID **  r_id_root_override,
const bool  do_fully_editable 
)

Advanced 'smart' function to create fully functional overrides.

Note
Currently it only does special things if given id_root is an object or collection, more specific behaviors may be added in the future for other ID types.
It will override all IDs tagged with LIB_TAG_DOIT, and it does not clear that tag at its beginning, so caller code can add extra data-blocks to be overridden as well.
Parameters
view_layerthe active view layer to search instantiated collections in, can be NULL (in which case scene's master collection children hierarchy is used instead).
owner_librarythe library in which the overrides should be created. Besides versioning and resync code path, this should always be NULL (i.e. the local .blend file).
id_root_referenceThe linked root ID to create an override from. May be a sub-root of the overall hierarchy, in which case calling code is expected to have already tagged required 'path' of IDs leading from the given id_hierarchy_root to the given id_root.
id_hierarchy_root_referenceThe ID to be used a hierarchy root of the overrides to be created. Can be either the linked root ID of the whole override hierarchy, (typically the same as id_root, unless a sub-part only of the hierarchy is overridden), or the already existing override hierarchy root if part of the hierarchy is already overridden.
id_instance_hintSome ID used as hint/reference to do some post-processing after overrides have been created, may be NULL. Typically, the Empty object instantiating the linked collection we override, currently.
r_id_root_overrideif not NULL, the override generated for the given id_root.
do_fully_editableif true, tag all created overrides as user-editable by default.
Returns
true if override was successfully created.

Definition at line 1371 of file lib_override.cc.

References BKE_lib_override_library_main_operations_create(), BKE_main_id_newptr_and_tag_clear(), BKE_main_id_tag_all(), lib_override_library_create_do(), lib_override_library_create_post_process(), LIB_TAG_DOIT, ID::newid, OBACT, and scene.

Referenced by BKE_lib_override_library_proxy_convert(), id_override_library_create_hierarchy(), make_override_library_exec(), and ui_template_id_liboverride_hierarchy_make().

◆ BKE_lib_override_library_create_from_id()

struct ID* BKE_lib_override_library_create_from_id ( struct Main bmain,
struct ID reference_id,
bool  do_tagged_remap 
)

Create an overridden local copy of linked reference.

Note
This function is very basic, low-level. It does not consider any hierarchical dependency, and also prevents any automatic re-sync of this local override.

Definition at line 393 of file lib_override.cc.

References BKE_key_from_id(), BKE_libblock_relink_ex(), BLI_assert, IDOverrideLibrary::flag, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, IDOverrideLibrary::hierarchy_root, Key::id, ID_IS_LINKED, ID_REMAP_SKIP_INDIRECT_USAGE, ID_REMAP_SKIP_OVERRIDE_LIBRARY, IDOVERRIDE_LIBRARY_FLAG_NO_HIERARCHY, IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED, lib_override_library_create_from(), LIB_TAG_DOIT, ID::override_library, and ID::tag.

Referenced by id_override_library_create_hierarchy().

◆ BKE_lib_override_library_create_from_tag()

bool BKE_lib_override_library_create_from_tag ( struct Main bmain,
struct Library owner_library,
const struct ID id_root_reference,
struct ID id_hierarchy_root,
const struct ID id_hierarchy_root_reference,
bool  do_no_main,
const bool  do_fully_editable 
)

Create overridden local copies of all tagged data-blocks in given Main.

Note
Set id->newid of overridden libs with newly created overrides, caller is responsible to clean those pointers before/after usage as needed.
By default, it will only remap newly created local overriding data-blocks between themselves, to avoid 'enforcing' those overrides into all other usages of the linked data in main. You can add more local IDs to be remapped to use new overriding ones by setting their LIB_TAG_DOIT tag.
Parameters
owner_librarythe library in which the overrides should be created. Besides versioning and resync code path, this should always be NULL (i.e. the local .blend file).
id_root_referencethe linked ID that is considered as the root of the overridden hierarchy.
id_hierarchy_rootthe override ID that is the root of the hierarchy. May be NULL, in which case it is assumed that the given id_root_reference is tagged for override, and its newly created override will be used as hierarchy root. Must be NULL if id_hierarchy_root_reference is not NULL.
id_hierarchy_root_referencethe linked ID that is the root of the hierarchy. Must be tagged for override. May be NULL, in which case it is assumed that the given id_root_reference is tagged for override, and its newly created override will be used as hierarchy root. Must be NULL if id_hierarchy_root is not NULL.
do_no_mainCreate the new override data outside of Main database. Used for resyncing of linked overrides.
do_fully_editableif true, tag all created overrides as user-editable by default.
Returns
true on success, false otherwise.

◆ BKE_lib_override_library_delete()

void BKE_lib_override_library_delete ( struct Main bmain,
struct ID id_root 
)

◆ BKE_lib_override_library_free()

void BKE_lib_override_library_free ( struct IDOverrideLibrary **  override,
bool  do_id_user 
)

◆ BKE_lib_override_library_get()

IDOverrideLibrary* BKE_lib_override_library_get ( struct Main bmain,
struct ID id,
struct ID owner_id_hint,
struct ID **  r_owner_id 
)

Return the actual IDOverrideLibrary data 'controlling' the given id, and the actual ID owning it.

Note
This is especially useful when id is a non-real override (e.g. embedded ID like a master collection or root node tree, or a shape key).
Parameters
owner_id_hintIf not NULL, a potential owner for the given override-embedded id.
r_owner_idIf given, will be set with the actual ID owning the return liboverride data.

Definition at line 120 of file lib_override.cc.

References BKE_lib_override_library_get().

Referenced by blender::ed::outliner::id_is_in_override_hierarchy(), and ui_template_id_liboverride_hierarchy_make().

◆ BKE_lib_override_library_id_hierarchy_reset()

void BKE_lib_override_library_id_hierarchy_reset ( struct Main bmain,
struct ID id_root,
bool  do_reset_system_override 
)

Reset all overrides in given id_root and its dependencies, while preserving ID relations.

Parameters
do_reset_system_overrideIf true, reset the given ID and all of its descendants in the override hierarchy as system override ones (i.e. non-editable).

Definition at line 3600 of file lib_override.cc.

References BKE_lib_override_library_update(), BKE_main_relations_create(), BKE_main_relations_free(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id, ID_IS_OVERRIDE_LIBRARY_REAL, IDOVERRIDE_LIBRARY_RUNTIME_TAG_NEEDS_RELOAD, lib_override_library_id_hierarchy_recursive_reset(), ID::override_library, IDOverrideLibrary::runtime, and IDOverrideLibraryRuntime::tag.

Referenced by id_override_library_reset_fn().

◆ BKE_lib_override_library_id_is_user_deletable()

bool BKE_lib_override_library_id_is_user_deletable ( struct Main bmain,
struct ID id 
)

In case an ID is used by another liboverride ID, user may not be allowed to delete it.

Definition at line 3867 of file lib_override.cc.

References BKE_collection_has_object(), Main::collections, GS, id, ID_IS_OVERRIDE_LIBRARY, ID_OB, LISTBASE_FOREACH, and ID::name.

Referenced by ED_object_base_free_and_unlink(), join_shapes_exec(), object_delete_exec(), and object_join_exec().

◆ BKE_lib_override_library_id_reset()

void BKE_lib_override_library_id_reset ( struct Main bmain,
struct ID id_root,
bool  do_reset_system_override 
)

◆ BKE_lib_override_library_id_unused_cleanup()

void BKE_lib_override_library_id_unused_cleanup ( struct ID local)

◆ BKE_lib_override_library_init()

struct IDOverrideLibrary* BKE_lib_override_library_init ( struct ID local_id,
struct ID reference_id 
)

◆ BKE_lib_override_library_is_hierarchy_leaf()

bool BKE_lib_override_library_is_hierarchy_leaf ( struct Main bmain,
struct ID id 
)

Check if given ID is a leaf in its liboverride hierarchy (i.e. if it does not use any other override ID).

NOTE: Embedded IDs of override IDs are not considered as leaves.

Definition at line 381 of file lib_override.cc.

References BKE_library_foreach_ID_link(), foreachid_is_hierarchy_leaf_fn(), ID_IS_OVERRIDE_LIBRARY_REAL, and IDWALK_READONLY.

Referenced by clear_override_library_exec(), id_override_library_clear_single_fn(), and override_idtemplate_clear_exec().

◆ BKE_lib_override_library_is_system_defined()

bool BKE_lib_override_library_is_system_defined ( const struct Main bmain,
const struct ID id 
)

◆ BKE_lib_override_library_is_user_edited()

bool BKE_lib_override_library_is_user_edited ( const struct ID id)

Check if given ID has some override rules that actually indicate the user edited it.

Referenced by blo_do_versions_300().

◆ BKE_lib_override_library_main_hierarchy_root_ensure()

void BKE_lib_override_library_main_hierarchy_root_ensure ( struct Main bmain)

Find and set the 'hierarchy root' ID pointer of all library overrides in given bmain.

NOTE: Cannot be called from do_versions_after_linking as this code needs a single complete Main database, not a split-by-libraries one.

Definition at line 1616 of file lib_override.cc.

References BKE_main_relations_create(), BKE_main_relations_free(), BKE_main_relations_tag_set(), BLI_assert, CLOG_ERROR, CLOG_WARN, ELEM, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, IDOverrideLibrary::hierarchy_root, id, ID_IS_OVERRIDE_LIBRARY_REAL, ID::lib, lib_override_root_find(), lib_override_root_hierarchy_set(), LOG, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, ID::name, and ID::override_library.

Referenced by lib_override_library_main_resync_on_library_indirect_level(), and setup_app_data().

◆ BKE_lib_override_library_main_operations_create()

bool BKE_lib_override_library_main_operations_create ( struct Main bmain,
bool  force_auto 
)

◆ BKE_lib_override_library_main_proxy_convert()

void BKE_lib_override_library_main_proxy_convert ( struct Main bmain,
struct BlendFileReadReport reports 
)

◆ BKE_lib_override_library_main_resync()

void BKE_lib_override_library_main_resync ( struct Main bmain,
struct Scene scene,
struct ViewLayer view_layer,
struct BlendFileReadReport reports 
)

Detect and handle required resync of overrides data, when relations between reference linked IDs have changed.

This is a fairly complex and costly operation, typically it should be called after BKE_lib_override_library_main_update, which would already detect and tag a lot of cases.

This function will first detect the remaining cases requiring a resync (namely, either when an existing linked ID that did not require to be overridden before now would be, or when new IDs are added to the hierarchy).

Then it will handle the resync of necessary IDs (through calls to BKE_lib_override_library_resync).

Parameters
view_layerthe active view layer to search instantiated collections in, can be NULL (in which case scene's master collection children hierarchy is used instead).

Definition at line 2687 of file lib_override.cc.

References BKE_collection_add(), BKE_collection_delete(), BKE_collection_is_empty(), BKE_layer_collection_resync_allow(), BKE_layer_collection_resync_forbid(), BKE_main_namemap_validate(), BLI_assert, BLI_findstring(), CLOG_INFO, COLLECTION_HIDE_RENDER, COLLECTION_HIDE_VIEWPORT, Main::collections, Collection::flag, ID_IS_LINKED, lib_override_libraries_index_define(), lib_override_library_create_post_process(), lib_override_library_main_resync_on_library_indirect_level(), Main::libraries, library, LIBRARY_TAG_RESYNC_REQUIRED, LISTBASE_FOREACH, LOG, Scene::master_collection, OBACT, OVERRIDE_RESYNC_RESIDUAL_STORAGE_NAME, and scene.

Referenced by BKE_blendfile_library_relocate(), and setup_app_data().

◆ BKE_lib_override_library_main_tag()

void BKE_lib_override_library_main_tag ( struct Main bmain,
short  tag,
bool  do_set 
)

Set or clear given tag in all properties and operations in that Main's ID override data.

Definition at line 3656 of file lib_override.cc.

References BKE_lib_override_library_properties_tag(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id, ID_IS_OVERRIDE_LIBRARY, and ID::override_library.

Referenced by BKE_lib_override_library_main_operations_create().

◆ BKE_lib_override_library_main_unused_cleanup()

void BKE_lib_override_library_main_unused_cleanup ( struct Main bmain)

Remove all tagged-as-unused properties and operations from that Main's ID override data.

Definition at line 3687 of file lib_override.cc.

References BKE_lib_override_library_id_unused_cleanup(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id, and ID_IS_OVERRIDE_LIBRARY.

Referenced by BKE_lib_override_library_main_operations_create().

◆ BKE_lib_override_library_main_update()

void BKE_lib_override_library_main_update ( struct Main bmain)

◆ BKE_lib_override_library_main_validate()

void BKE_lib_override_library_main_validate ( struct Main bmain,
struct ReportList reports 
)

Check against potential bmain.

Definition at line 3198 of file lib_override.cc.

References BKE_lib_override_library_validate(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id, and ID_IS_OVERRIDE_LIBRARY.

Referenced by blo_read_file_internal(), and library_link_end().

◆ BKE_lib_override_library_make_local()

void BKE_lib_override_library_make_local ( struct ID id)

◆ BKE_lib_override_library_operations_create()

bool BKE_lib_override_library_operations_create ( struct Main bmain,
struct ID local 
)

Compare local and reference data-blocks and create new override operations as needed, or reset to reference values if overriding is not allowed.

Note
Defining override operations is only mandatory before saving a .blend file on disk (not for undo!). Knowing that info at runtime is only useful for UI/UX feedback.
This is by far the biggest operation (the more time-consuming) of the three so far, since it has to go over all properties in depth (all overridable ones at least). Generating differential values and applying overrides are much cheaper.
Returns
true if any library operation was created.

Definition at line 3316 of file lib_override.cc.

References BKE_pose_ensure(), BLI_assert, CLOG_INFO, Object::data, GS, ID_IS_LINKED, ID_MISSING, ID_OB, LOG, ID::name, OB_ARMATURE, ID::override_library, IDOverrideLibrary::reference, RNA_id_pointer_create(), RNA_OVERRIDE_COMPARE_CREATE, RNA_OVERRIDE_COMPARE_RESTORE, RNA_OVERRIDE_MATCH_RESULT_CREATED, RNA_OVERRIDE_MATCH_RESULT_RESTORED, RNA_struct_override_matches(), and Object::type.

Referenced by BKE_lib_override_library_operations_store_start(), and lib_override_library_operations_create_cb().

◆ BKE_lib_override_library_operations_store_end()

void BKE_lib_override_library_operations_store_end ( OverrideLibraryStorage override_storage,
struct ID local 
)

Restore given ID modified by BKE_lib_override_library_operations_store_start, to its original state.

Referenced by write_file_handle().

◆ BKE_lib_override_library_operations_store_finalize()

void BKE_lib_override_library_operations_store_finalize ( OverrideLibraryStorage override_storage)

◆ BKE_lib_override_library_operations_store_init()

OverrideLibraryStorage* BKE_lib_override_library_operations_store_init ( void  )

Initialize an override storage.

Storage (how to store overriding data into .blend files).

Basically: 1) Only 'differential' overrides needs special handling here. All others (replacing values or inserting/removing items from a collection) can be handled with simply storing current content of local data-block. 2) We store the differential value into a second 'ghost' data-block, which is an empty ID of same type as the local one, where we only define values that need differential data.

This avoids us having to modify 'real' data-block at write time (and restoring it afterwards), which is inefficient, and potentially dangerous (in case of concurrent access...), while not using much extra memory in typical cases. It also ensures stored data-block always contains exact same data as "desired" ones (kind of "baked" data-blocks).

Definition at line 3903 of file lib_override.cc.

References BKE_main_new().

Referenced by write_file_handle().

◆ BKE_lib_override_library_operations_store_start()

struct ID* BKE_lib_override_library_operations_store_start ( struct Main bmain,
OverrideLibraryStorage override_storage,
struct ID local 
)

◆ BKE_lib_override_library_operations_tag()

void BKE_lib_override_library_operations_tag ( struct IDOverrideLibraryProperty override_property,
short  tag,
bool  do_set 
)

Set or clear given tag in all operations in that override property data.

Definition at line 3622 of file lib_override.cc.

References LISTBASE_FOREACH, IDOverrideLibraryProperty::operations, and IDOverrideLibraryProperty::tag.

Referenced by BKE_lib_override_library_properties_tag(), and RNA_struct_override_matches().

◆ BKE_lib_override_library_properties_tag()

void BKE_lib_override_library_properties_tag ( struct IDOverrideLibrary override,
short  tag,
bool  do_set 
)

Set or clear given tag in all properties and operations in that override data.

Definition at line 3645 of file lib_override.cc.

References BKE_lib_override_library_operations_tag(), LISTBASE_FOREACH, and override.

Referenced by BKE_lib_override_library_main_operations_create(), and BKE_lib_override_library_main_tag().

◆ BKE_lib_override_library_property_delete()

void BKE_lib_override_library_property_delete ( struct IDOverrideLibrary override,
struct IDOverrideLibraryProperty override_property 
)

◆ BKE_lib_override_library_property_find()

struct IDOverrideLibraryProperty* BKE_lib_override_library_property_find ( struct IDOverrideLibrary override,
const char *  rna_path 
)

◆ BKE_lib_override_library_property_get()

struct IDOverrideLibraryProperty* BKE_lib_override_library_property_get ( struct IDOverrideLibrary override,
const char *  rna_path,
bool r_created 
)

Find override property from given RNA path, or create it if it does not exist.

Definition at line 2864 of file lib_override.cc.

References BKE_lib_override_library_property_find(), BLI_addtail(), BLI_ghash_insert(), BLI_strdup(), override, override_library_rna_path_mapping_ensure(), and IDOverrideLibraryProperty::rna_path.

Referenced by RNA_property_override_property_get().

◆ BKE_lib_override_library_property_is_animated()

bool BKE_lib_override_library_property_is_animated ( const ID id,
const IDOverrideLibraryProperty override_prop,
const struct PropertyRNA override_rna_prop,
const int  rnaprop_index 
)

Check if given Override Property for given ID is animated (through a F-Curve in an Action, or from a driver).

Parameters
override_rna_propif not NULL, the RNA property matching the given path in the override_prop.
rnaprop_indexArray in the RNA property, 0 if unknown or irrelevant.

Referenced by blender::ed::outliner::iterate_properties_to_display().

◆ BKE_lib_override_library_property_operation_delete()

void BKE_lib_override_library_property_operation_delete ( struct IDOverrideLibraryProperty override_property,
struct IDOverrideLibraryPropertyOperation override_property_operation 
)

◆ BKE_lib_override_library_property_operation_find()

struct IDOverrideLibraryPropertyOperation* BKE_lib_override_library_property_operation_find ( struct IDOverrideLibraryProperty override_property,
const char *  subitem_refname,
const char *  subitem_locname,
int  subitem_refindex,
int  subitem_locindex,
bool  strict,
bool r_strict 
)

◆ BKE_lib_override_library_property_operation_get()

struct IDOverrideLibraryPropertyOperation* BKE_lib_override_library_property_operation_get ( struct IDOverrideLibraryProperty override_property,
short  operation,
const char *  subitem_refname,
const char *  subitem_locname,
int  subitem_refindex,
int  subitem_locindex,
bool  strict,
bool r_strict,
bool r_created 
)

◆ BKE_lib_override_library_property_operation_operands_validate()

bool BKE_lib_override_library_property_operation_operands_validate ( struct IDOverrideLibraryPropertyOperation override_property_operation,
struct PointerRNA ptr_dst,
struct PointerRNA ptr_src,
struct PointerRNA ptr_storage,
struct PropertyRNA prop_dst,
struct PropertyRNA prop_src,
struct PropertyRNA prop_storage 
)

◆ BKE_lib_override_library_proxy_convert()

bool BKE_lib_override_library_proxy_convert ( struct Main bmain,
struct Scene scene,
struct ViewLayer view_layer,
struct Object ob_proxy 
)

Convert a given proxy object into a library override.

Note
This is a thin wrapper around BKE_lib_override_library_create, only extra work is to actually convert the proxy itself into an override first.
Parameters
view_layerthe active view layer to search instantiated collections in, can be NULL (in which case scene's master collection children hierarchy is used instead).
Returns
true if override was successfully created.

Definition at line 34 of file lib_override_proxy_conversion.c.

References BKE_lib_override_library_create(), BKE_lib_override_library_init(), DEG_id_tag_update(), IDOverrideLibrary::flag, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, Collection::id, Object::id, ID_IS_LINKED, ID_IS_OVERRIDABLE_LIBRARY_HIERARCHY, ID_RECALC_COPY_ON_WRITE, id_us_min(), IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED, Object::instance_collection, ID::lib, LIB_TAG_DOIT, ID::newid, NULL, ID::override_library, scene, and ID::tag.

Referenced by lib_override_library_proxy_convert_do().

◆ BKE_lib_override_library_resync()

bool BKE_lib_override_library_resync ( struct Main bmain,
struct Scene scene,
struct ViewLayer view_layer,
struct ID id_root,
struct Collection override_resync_residual_storage,
bool  do_hierarchy_enforce,
struct BlendFileReadReport reports 
)

Advanced 'smart' function to resync, re-create fully functional overrides up-to-date with linked data, from an existing override hierarchy.

Parameters
view_layerthe active view layer to search instantiated collections in, can be NULL (in which case scene's master collection children hierarchy is used instead).
id_rootThe root liboverride ID to resync from.
Returns
true if override was successfully resynced.

Definition at line 2174 of file lib_override.cc.

References BKE_id_free(), lib_override_library_resync(), LinkNode::link, LISTBASE_FOREACH_MUTABLE, ID::next, and scene.

Referenced by id_override_library_resync_hierarchy_process().

◆ BKE_lib_override_library_status_check_local()

bool BKE_lib_override_library_status_check_local ( struct Main bmain,
struct ID local 
)

Check that status of local data-block is still valid against current reference one.

It means that all overridable, but not overridden, properties' local values must be equal to reference ones. Clears #LIB_TAG_OVERRIDE_OK if they do not.

This is typically used to detect whether some property has been changed in local and a new #IDOverrideProperty (of #IDOverridePropertyOperation) has to be added.

Returns
true if status is OK, false otherwise.

Definition at line 3210 of file lib_override.cc.

References BKE_pose_ensure(), BLI_assert, Object::data, GS, ID_IS_OVERRIDE_LIBRARY_REAL, ID_OB, LIB_TAG_OVERRIDE_LIBRARY_REFOK, ID::name, OB_ARMATURE, ID::override_library, IDOverrideLibrary::reference, RNA_id_pointer_create(), RNA_OVERRIDE_COMPARE_IGNORE_NON_OVERRIDABLE, RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN, RNA_struct_override_matches(), ID::tag, and Object::type.

◆ BKE_lib_override_library_status_check_reference()

bool BKE_lib_override_library_status_check_reference ( struct Main bmain,
struct ID local 
)

Check that status of reference data-block is still valid against current local one.

It means that all non-overridden properties' local values must be equal to reference ones. Clears LIB_TAG_OVERRIDE_OK if they do not.

This is typically used to detect whether some reference has changed and local needs to be updated against it.

Returns
true if status is OK, false otherwise.

Definition at line 3260 of file lib_override.cc.

References BKE_lib_override_library_status_check_reference(), BKE_pose_ensure(), BLI_assert, Object::data, GS, ID_IS_OVERRIDE_LIBRARY_REAL, ID_OB, LIB_TAG_OVERRIDE_LIBRARY_REFOK, ID::name, OB_ARMATURE, ID::override_library, IDOverrideLibrary::reference, RNA_id_pointer_create(), RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN, RNA_struct_override_matches(), ID::tag, and Object::type.

Referenced by BKE_lib_override_library_status_check_reference().

◆ BKE_lib_override_library_template_create()

bool BKE_lib_override_library_template_create ( struct ID id)

Create a library override template.

Definition at line 1426 of file lib_override.cc.

References BKE_lib_override_library_init(), ID_IS_LINKED, and ID_IS_OVERRIDE_LIBRARY.

◆ BKE_lib_override_library_update()

void BKE_lib_override_library_update ( struct Main bmain,
struct ID local 
)

◆ BKE_lib_override_library_validate()

void BKE_lib_override_library_validate ( struct Main bmain,
struct ID id,
struct ReportList reports 
)

◆ BKE_lib_override_rna_property_find()

bool BKE_lib_override_rna_property_find ( struct PointerRNA idpoin,
const struct IDOverrideLibraryProperty library_prop,
struct PointerRNA r_override_poin,
struct PropertyRNA **  r_override_prop,
int *  r_index 
)

Get the RNA-property matching the library_prop override property. Used for UI to query additional data about the overridden property (e.g. UI name).

Parameters
idpoinPointer to the override ID.
library_propThe library override property to find the matching RNA property for.
r_indexThe RNA array flat index (i.e. flattened index in case of multi-dimensional array properties). See RNA_path_resolve_full family of functions for details.

Referenced by blender::ed::outliner::iterate_properties_to_display().