Blender
V3.3
|
#include <cstdlib>
#include <cstring>
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "DNA_ID.h"
#include "DNA_collection_types.h"
#include "DNA_key_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
#include "BKE_anim_data.h"
#include "BKE_armature.h"
#include "BKE_collection.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_idtype.h"
#include "BKE_key.h"
#include "BKE_layer.h"
#include "BKE_lib_id.h"
#include "BKE_lib_override.h"
#include "BKE_lib_query.h"
#include "BKE_lib_remap.h"
#include "BKE_main.h"
#include "BKE_main_namemap.h"
#include "BKE_node.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BLO_readfile.h"
#include "BLI_ghash.h"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_memarena.h"
#include "BLI_string.h"
#include "BLI_task.h"
#include "BLI_utildefines.h"
#include "PIL_time.h"
#include "RNA_access.h"
#include "RNA_path.h"
#include "RNA_prototypes.h"
#include "RNA_types.h"
#include "atomic_ops.h"
Go to the source code of this file.
Classes | |
struct | LibOverrideGroupTagData |
struct | LibOverrideOpCreateData |
Macros | |
#define | OVERRIDE_AUTO_CHECK_DELAY 0.2 /* 200ms between auto-override checks. */ |
#define | OVERRIDE_RESYNC_RESIDUAL_STORAGE_NAME "OVERRIDE_RESYNC_LEFTOVERS" |
Variables | |
static CLG_LogRef | LOG = {"bke.liboverride"} |
Definition at line 61 of file lib_override.cc.
#define OVERRIDE_RESYNC_RESIDUAL_STORAGE_NAME "OVERRIDE_RESYNC_LEFTOVERS" |
void BKE_lib_override_library_clear | ( | struct IDOverrideLibrary * | override, |
bool | do_id_user | ||
) |
Clear any overriding data from given override.
Definition at line 218 of file lib_override.cc.
References BLI_assert, BLI_freelistN(), BLI_ghash_clear(), ELEM, id_us_min(), lib_override_library_property_clear(), LISTBASE_FOREACH, and override.
Referenced by BKE_lib_override_library_copy(), and BKE_lib_override_library_free().
Definition at line 172 of file lib_override.cc.
References BKE_lib_override_library_clear(), BKE_lib_override_library_free(), BKE_lib_override_library_init(), BLI_assert, BLI_duplicatelist(), ListBase::first, IDOverrideLibrary::flag, IDOverrideLibrary::hierarchy_root, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_TEMPLATE, id_us_plus(), lib_override_library_property_copy(), LIB_TAG_OVERRIDE_LIBRARY_REFOK, IDOverrideLibraryProperty::next, ID::override_library, IDOverrideLibrary::properties, IDOverrideLibrary::reference, and ID::tag.
Referenced by BKE_lib_override_library_init().
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.
view_layer | the active view layer to search instantiated collections in, can be NULL (in which case scene's master collection children hierarchy is used instead). |
owner_library | the 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_reference | The 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_reference | The 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_hint | Some 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_override | if not NULL, the override generated for the given id_root. |
do_fully_editable | if true, tag all created overrides as user-editable by default. |
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().
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.
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().
bool BKE_lib_override_library_create_from_tag | ( | Main * | bmain, |
Library * | owner_library, | ||
const ID * | id_root_reference, | ||
ID * | id_hierarchy_root, | ||
const ID * | id_hierarchy_root_reference, | ||
const bool | do_no_main, | ||
const bool | do_fully_editable | ||
) |
Definition at line 482 of file lib_override.cc.
References BKE_id_delete(), BKE_id_remapper_create(), BKE_id_remapper_free(), BKE_idtype_idcode_is_linkable(), BKE_key_from_id(), BKE_libblock_relink_multiple(), BLI_addtail(), BLI_assert, BLI_freelistN(), BLI_linklist_free(), BLI_linklist_prepend(), LinkData::data, ELEM, ListBase::first, IDOverrideLibrary::flag, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, GS, IDOverrideLibrary::hierarchy_root, id, Key::id, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY_REAL, ID_REMAP_FORCE_USER_REFCOUNT, ID_REMAP_SKIP_OVERRIDE_LIBRARY, ID_REMAP_TYPE_REMAP, IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED, ID::lib, LIB_ID_CREATE_NO_MAIN, lib_override_library_create_from(), lib_override_prefill_newid_from_existing_overrides(), lib_override_remapper_overrides_add(), LIB_TAG_DOIT, ID::name, ID::newid, LinkData::next, ID::override_library, IDOverrideLibrary::reference, and ID::tag.
Referenced by lib_override_library_create_do(), and lib_override_library_resync().
Advanced 'smart' function to delete library overrides (including their existing override hierarchy) and remap their usages to their linked reference IDs.
id_root | The root liboverride ID to delete. |
Definition at line 2757 of file lib_override.cc.
References BKE_id_multi_tagged_delete(), BKE_libblock_remap(), BKE_main_id_tag_all(), BKE_main_relations_create(), BKE_main_relations_free(), BLI_assert, data, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, IDOverrideLibrary::hierarchy_root, id, ID_IS_OVERRIDE_LIBRARY_REAL, ID_REMAP_SKIP_INDIRECT_USAGE, lib_override_group_tag_data_clear(), lib_override_group_tag_data_object_to_collection_init(), lib_override_overrides_group_tag(), LIB_TAG_DOIT, LIB_TAG_MISSING, ID::override_library, IDOverrideLibrary::reference, and ID::tag.
Referenced by id_override_library_delete_hierarchy_process().
void BKE_lib_override_library_free | ( | struct IDOverrideLibrary ** | override, |
bool | do_id_user | ||
) |
Free given override.
Definition at line 237 of file lib_override.cc.
References BKE_lib_override_library_clear(), BLI_assert, BLI_ghash_free(), MEM_freeN, and MEM_SAFE_FREE.
Referenced by BKE_lib_override_library_copy(), BKE_lib_override_library_make_local(), and BKE_libblock_free_data().
BLI_INLINE const IDOverrideLibrary* BKE_lib_override_library_get | ( | const Main * | bmain, |
const ID * | id, | ||
const ID * | owner_id_hint, | ||
const ID ** | r_owner_id | ||
) |
Get override data for a given ID. Needed because of our beloved shape keys snowflake.
Definition at line 95 of file lib_override.cc.
References BKE_idtype_get_info_from_id(), BLI_assert_msg, ID::flag, id, LIB_EMBEDDED_DATA_LIB_OVERRIDE, ID::override_library, and IDTypeInfo::owner_get.
Referenced by BKE_lib_override_library_get(), BKE_lib_override_library_is_system_defined(), BKE_lib_override_library_validate(), lib_override_library_resync(), lib_override_overrides_group_tag_recursive(), and lib_override_root_find().
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.
id
is a non-real override (e.g. embedded ID like a master collection or root node tree, or a shape key).owner_id_hint | If not NULL, a potential owner for the given override-embedded id . |
r_owner_id | If 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().
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.
do_reset_system_override | If 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().
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().
void BKE_lib_override_library_id_reset | ( | struct Main * | bmain, |
struct ID * | id_root, | ||
bool | do_reset_system_override | ||
) |
Reset all overrides in given id_root, while preserving ID relations.
do_reset_system_override | If true, reset the given ID as a system override one (i.e. non-editable). |
Definition at line 3538 of file lib_override.cc.
References BKE_lib_override_library_update(), ID_IS_OVERRIDE_LIBRARY_REAL, IDOVERRIDE_LIBRARY_RUNTIME_TAG_NEEDS_RELOAD, lib_override_library_id_reset_do(), ID::override_library, IDOverrideLibrary::runtime, and IDOverrideLibraryRuntime::tag.
Referenced by clear_override_library_exec(), id_override_library_clear_single_fn(), id_override_library_reset_fn(), lib_id_override_editable_toggle_exec(), override_idtemplate_clear_exec(), override_idtemplate_reset_exec(), reset_override_library_exec(), and ui_template_id_liboverride_hierarchy_make().
Remove all tagged-as-unused properties and operations from that ID override data.
Definition at line 3668 of file lib_override.cc.
References BKE_lib_override_library_property_delete(), BKE_lib_override_library_property_operation_delete(), ID_IS_OVERRIDE_LIBRARY_REAL, IDOVERRIDE_LIBRARY_TAG_UNUSED, LISTBASE_FOREACH_MUTABLE, ID::override_library, and IDOverrideLibrary::properties.
Referenced by BKE_lib_override_library_main_unused_cleanup().
IDOverrideLibrary* BKE_lib_override_library_init | ( | struct ID * | local_id, |
struct ID * | reference_id | ||
) |
Initialize empty overriding of reference_id by local_id.
Definition at line 134 of file lib_override.cc.
References BKE_lib_override_library_copy(), BLI_assert, IDOverrideLibrary::flag, ID_IS_LINKED, id_us_min(), id_us_plus(), IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED, LIB_TAG_OVERRIDE_LIBRARY_REFOK, ID::override_library, IDOverrideLibrary::reference, and ID::tag.
Referenced by BKE_lib_override_library_copy(), BKE_lib_override_library_proxy_convert(), BKE_lib_override_library_template_create(), and lib_override_library_create_from().
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().
Definition at line 324 of file lib_override.cc.
References BKE_lib_override_library_get(), IDOverrideLibrary::flag, ID_IS_OVERRIDE_LIBRARY, IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED, and ID::override_library.
Definition at line 294 of file lib_override.cc.
References id, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_REAL, IDOVERRIDE_LIBRARY_FLAG_IDPOINTER_MATCH_REFERENCE, IDOVERRIDE_LIBRARY_OP_NOOP, LISTBASE_FOREACH, ID::override_library, and IDOverrideLibrary::properties.
Referenced by lib_override_library_resync().
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().
Check all overrides from given bmain and create/update overriding operations as needed.
Definition at line 3395 of file lib_override.cc.
References BKE_lib_override_library_main_operations_create(), BKE_lib_override_library_main_tag(), BKE_lib_override_library_main_unused_cleanup(), BKE_lib_override_library_properties_tag(), BKE_pose_ensure(), BLI_assert, BLI_task_pool_create(), BLI_task_pool_free(), BLI_task_pool_push(), BLI_task_pool_work_and_wait(), LibOverrideOpCreateData::bmain, Object::data, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, GS, id, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY_REAL, ID_OB, IDOVERRIDE_LIBRARY_TAG_UNUSED, lib_override_library_operations_create_cb(), LIB_TAG_MISSING, LIB_TAG_OVERRIDE_LIBRARY_AUTOREFRESH, LISTBASE_FOREACH, ID::name, OB_ARMATURE, Main::objects, ID::override_library, IDOverrideLibrary::reference, ID::tag, task_pool, TASK_PRIORITY_HIGH, TIMEIT_END_AVERAGED, TIMEIT_START_AVERAGED, and Object::type.
Referenced by BKE_blendfile_library_relocate(), BKE_lib_override_library_create(), BKE_lib_override_library_main_operations_create(), BKE_undosys_step_push_with_type(), setup_app_data(), and wm_file_write().
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).
view_layer | the 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().
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().
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().
Update all overrides from given bmain.
Definition at line 3843 of file lib_override.cc.
References BKE_lib_override_library_update(), BKE_main_namemap_validate(), BLI_assert, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, G_MAIN, id, and ID::override_library.
Referenced by blo_read_file_internal(), and library_link_end().
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().
Make given ID fully local.
Definition at line 2798 of file lib_override.cc.
References BKE_key_from_id(), BKE_lib_override_library_free(), BLI_assert_unreachable, ID::flag, GS, id, Collection::id, Key::id, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_VIRTUAL, ID_SCE, LIB_EMBEDDED_DATA_LIB_OVERRIDE, ID::name, ntreeFromID(), and ID::override_library.
Referenced by BKE_lib_override_library_validate(), BKE_library_make_local(), id_local_fn(), and template_id_cb().
Compare local and reference data-blocks and create new override operations as needed, or reset to reference values if overriding is not allowed.
.blend
file on disk (not for undo!). Knowing that info at runtime is only useful for UI/UX feedback.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().
void BKE_lib_override_library_operations_store_end | ( | OverrideLibraryStorage * | UNUSEDoverride_storage, |
ID * | local | ||
) |
Definition at line 3972 of file lib_override.cc.
References BLI_assert, ID_IS_OVERRIDE_LIBRARY_REAL, ID::override_library, and IDOverrideLibrary::storage.
void BKE_lib_override_library_operations_store_finalize | ( | OverrideLibraryStorage * | override_storage | ) |
Definition at line 3982 of file lib_override.cc.
References BKE_id_free_ex(), BKE_main_free(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id, and LIB_ID_FREE_NO_UI_USER.
Referenced by write_file_handle().
OverrideLibraryStorage* BKE_lib_override_library_operations_store_init | ( | void | ) |
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().
ID* BKE_lib_override_library_operations_store_start | ( | struct Main * | bmain, |
OverrideLibraryStorage * | override_storage, | ||
struct ID * | local | ||
) |
Generate suitable 'write' data (this only affects differential override operations).
Note that local ID is no more modified by this call, all extra data are stored in its temp storage_id copy.
Definition at line 3908 of file lib_override.cc.
References BKE_id_copy(), BKE_id_free_ex(), BKE_lib_override_library_operations_create(), BKE_lib_override_library_operations_store_start(), BLI_assert, ID_IS_OVERRIDE_LIBRARY_REAL, ID_IS_OVERRIDE_LIBRARY_TEMPLATE, ID_IS_OVERRIDE_LIBRARY_VIRTUAL, LIB_ID_FREE_NO_UI_USER, ID::override_library, IDOverrideLibrary::reference, RNA_id_pointer_create(), RNA_struct_override_store(), IDOverrideLibrary::storage, TIMEIT_END_AVERAGED, TIMEIT_START_AVERAGED, and UNUSED_VARS_NDEBUG.
Referenced by BKE_lib_override_library_operations_store_start(), and write_file_handle().
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().
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().
void BKE_lib_override_library_property_delete | ( | struct IDOverrideLibrary * | override, |
struct IDOverrideLibraryProperty * | override_property | ||
) |
Remove and free given override_property from given ID override.
Definition at line 2927 of file lib_override.cc.
References BLI_freelinkN(), BLI_ghash_remove(), ELEM, lib_override_library_property_clear(), override, and IDOverrideLibraryProperty::rna_path.
Referenced by BKE_lib_override_library_id_unused_cleanup(), lib_override_library_id_reset_do(), lib_override_library_resync(), and override_remove_button_exec().
IDOverrideLibraryProperty* BKE_lib_override_library_property_find | ( | struct IDOverrideLibrary * | override, |
const char * | rna_path | ||
) |
Find override property from given RNA path, if it exists.
Definition at line 2857 of file lib_override.cc.
References BLI_ghash_lookup(), and override_library_rna_path_mapping_ensure().
Referenced by BKE_lib_override_library_property_get(), RNA_property_overridden(), RNA_property_override_property_find(), RNA_struct_override_matches(), version_liboverride_rnacollections_insertion_animdata(), and version_liboverride_rnacollections_insertion_object().
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().
bool BKE_lib_override_library_property_is_animated | ( | const ID * | id, |
const IDOverrideLibraryProperty * | override_prop, | ||
const PropertyRNA * | override_rna_prop, | ||
const int | rnaprop_index | ||
) |
Definition at line 335 of file lib_override.cc.
References BKE_animadata_fcurve_find_by_rna_path(), BKE_animdata_from_id(), IDOverrideLibraryProperty::rna_path, and RNA_path_array_index_token_find().
void BKE_lib_override_library_property_operation_delete | ( | struct IDOverrideLibraryProperty * | override_property, |
struct IDOverrideLibraryPropertyOperation * | override_property_operation | ||
) |
Remove and free given override_property_operation from given ID override_property.
Definition at line 3093 of file lib_override.cc.
References BLI_freelinkN(), lib_override_library_property_operation_clear(), and IDOverrideLibraryProperty::operations.
Referenced by BKE_lib_override_library_id_unused_cleanup(), override_remove_button_exec(), version_liboverride_rnacollections_insertion_object(), and version_liboverride_rnacollections_insertion_object_constraints().
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 | ||
) |
Find override property operation from given sub-item(s), if it exists.
Definition at line 2940 of file lib_override.cc.
References BLI_findstring_ptr(), BLI_listbase_bytes_find(), ELEM, IDOverrideLibraryProperty::operations, STREQ, IDOverrideLibraryPropertyOperation::subitem_local_index, IDOverrideLibraryPropertyOperation::subitem_local_name, IDOverrideLibraryPropertyOperation::subitem_reference_index, and IDOverrideLibraryPropertyOperation::subitem_reference_name.
Referenced by BKE_lib_override_library_property_operation_get(), override_remove_button_exec(), and RNA_property_override_property_operation_find().
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 | ||
) |
Find override property operation from given sub-item(s), or create it if it does not exist.
Definition at line 3027 of file lib_override.cc.
References BKE_lib_override_library_property_operation_find(), BLI_addtail(), BLI_strdup(), IDOverrideLibraryPropertyOperation::operation, IDOverrideLibraryProperty::operations, IDOverrideLibraryPropertyOperation::subitem_local_index, IDOverrideLibraryPropertyOperation::subitem_local_name, IDOverrideLibraryPropertyOperation::subitem_reference_index, and IDOverrideLibraryPropertyOperation::subitem_reference_name.
Referenced by override_remove_button_exec(), and RNA_property_override_property_operation_get().
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 | ||
) |
Validate that required data for a given operation are available.
Definition at line 3101 of file lib_override.cc.
References ATTR_FALLTHROUGH, BLI_assert_msg, PointerRNA::data, IDOVERRIDE_LIBRARY_OP_ADD, IDOVERRIDE_LIBRARY_OP_INSERT_AFTER, IDOVERRIDE_LIBRARY_OP_INSERT_BEFORE, IDOVERRIDE_LIBRARY_OP_MULTIPLY, IDOVERRIDE_LIBRARY_OP_NOOP, IDOVERRIDE_LIBRARY_OP_REPLACE, IDOVERRIDE_LIBRARY_OP_SUBTRACT, and IDOverrideLibraryPropertyOperation::operation.
Referenced by rna_property_override_operation_apply().
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.
view_layer | the active view layer to search instantiated collections in, can be NULL (in which case scene's master collection children hierarchy is used instead). |
id_root | The root liboverride ID to resync from. |
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().
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.
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.
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.
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().
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.
Update given override from its reference (re-applying overridden properties).
Definition at line 3707 of file lib_override.cc.
References BKE_id_copy_ex(), BKE_id_free_ex(), BKE_key_from_id(), BKE_key_from_id_p(), BKE_lib_override_library_update(), BKE_main_namemap_remove_name(), BKE_pose_clear_pointers(), BLI_assert, BLI_strncpy(), DEG_id_tag_update_ex(), DEG_relations_tag_update(), ID::flag, Key::from, GS, Key::id, ID_AR, ID_IS_OVERRIDE_LIBRARY_REAL, ID_MISSING, ID_RECALC_ALL, ID::lib, LIB_EMBEDDED_DATA_LIB_OVERRIDE, LIB_ID_COPY_DEFAULT, LIB_ID_COPY_NO_LIB_OVERRIDE_LOCAL_DATA_FLAG, LIB_ID_FREE_NO_NAMEMAP_REMOVE, LIB_ID_FREE_NO_UI_USER, lib_override_id_swap(), lib_override_object_posemode_transfer(), LIB_TAG_OVERRIDE_LIBRARY_REFOK, LISTBASE_FOREACH, ID::name, OB_ARMATURE, Main::objects, ID::override_library, POSE_RECALC, IDOverrideLibrary::reference, RNA_id_pointer_create(), RNA_OVERRIDE_APPLY_FLAG_NOP, RNA_struct_override_apply(), IDOverrideLibrary::storage, and ID::tag.
Referenced by BKE_blendfile_library_relocate(), BKE_lib_override_library_id_hierarchy_reset(), BKE_lib_override_library_id_reset(), BKE_lib_override_library_main_update(), and BKE_lib_override_library_update().
void BKE_lib_override_library_validate | ( | struct Main * | bmain, |
struct ID * | id, | ||
struct ReportList * | reports | ||
) |
Check against potential bmain.
Definition at line 3138 of file lib_override.cc.
References BKE_lib_override_library_get(), BKE_lib_override_library_make_local(), BKE_reportf(), BLI_assert, id, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_VIRTUAL, LIB_EMBEDDED_DATA_LIB_OVERRIDE, ID::name, IDOverrideLibrary::reference, RPT_ERROR, and RPT_WARNING.
Referenced by BKE_lib_override_library_main_validate().
bool BKE_lib_override_rna_property_find | ( | PointerRNA * | idpoin, |
const IDOverrideLibraryProperty * | library_prop, | ||
PointerRNA * | r_override_poin, | ||
PropertyRNA ** | r_override_prop, | ||
int * | r_index | ||
) |
Definition at line 2889 of file lib_override.cc.
References BLI_assert, PointerRNA::data, ID_IS_OVERRIDE_LIBRARY, IDOverrideLibraryProperty::rna_path, RNA_path_resolve_property_full(), RNA_struct_is_ID(), and PointerRNA::type.
|
static |
Definition at line 363 of file lib_override.cc.
References LibraryIDLinkCallbackData::cb_flag, IDOverrideLibrary::hierarchy_root, ID_IS_OVERRIDE_LIBRARY_REAL, LibraryIDLinkCallbackData::id_owner, LibraryIDLinkCallbackData::id_pointer, IDWALK_CB_LOOPBACK, IDWALK_RET_NOP, IDWALK_RET_STOP_ITER, ID::override_library, and LibraryIDLinkCallbackData::user_data.
Referenced by BKE_lib_override_library_is_hierarchy_leaf().
|
static |
Definition at line 724 of file lib_override.cc.
References BLI_ghash_free(), BLI_memarena_free(), and data.
Referenced by BKE_lib_override_library_delete(), lib_override_library_create_do(), lib_override_library_main_resync_on_library_indirect_level(), and lib_override_library_resync().
|
static |
Definition at line 709 of file lib_override.cc.
References BLI_ghash_new(), BLI_ghashutil_ptrcmp(), BLI_ghashutil_ptrhash(), BLI_memarena_new(), BLI_MEMARENA_STD_BUFSIZE, data, lib_override_group_tag_data_object_to_collection_init_collection_process(), and LISTBASE_FOREACH.
Referenced by BKE_lib_override_library_delete(), lib_override_library_create_do(), lib_override_library_main_resync_on_library_indirect_level(), and lib_override_library_resync().
|
static |
Definition at line 684 of file lib_override.cc.
References BLI_ghash_ensure_p(), BLI_linklist_append_arena(), BLI_memarena_calloc(), data, Collection::gobject, ID_IS_LINKED, and LISTBASE_FOREACH.
Referenced by lib_override_group_tag_data_object_to_collection_init().
|
static |
Definition at line 782 of file lib_override.cc.
References BLI_assert, BLI_ghash_lookup(), data, id, ID_IS_OVERRIDE_LIBRARY, LibOverrideGroupTagData::id_root, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, ID::lib, lib_override_hierarchy_dependencies_recursive_tag_from(), MAINIDRELATIONS_ENTRY_TAGS_PROCESSED_TO, MainIDRelationsEntryItem::next, Main::relations, MainIDRelations::relations_from_pointers, ID::tag, MainIDRelationsEntry::tags, and MainIDRelationsEntry::to_ids.
Referenced by lib_override_library_create_do(), lib_override_library_main_resync_on_library_indirect_level(), and lib_override_library_resync().
|
static |
Definition at line 731 of file lib_override.cc.
References BLI_assert, BLI_ghash_lookup(), data, MainIDRelationsEntry::from_ids, id, ID_IS_OVERRIDE_LIBRARY, LibOverrideGroupTagData::id_root, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, ID::lib, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED_FROM, MainIDRelationsEntryItem::next, Main::relations, MainIDRelations::relations_from_pointers, ID::tag, and MainIDRelationsEntry::tags.
Referenced by lib_override_hierarchy_dependencies_recursive_tag().
Definition at line 3699 of file lib_override.cc.
References BKE_lib_id_swap(), LIB_TAG_LIB_OVERRIDE_NEED_RESYNC, and ID::tag.
Referenced by BKE_lib_override_library_update().
|
static |
Define the temp_index
of libraries from their highest level of indirect usage.
E.g. if lib_a uses lib_b, lib_c and lib_d, and lib_b also uses lib_d, then lib_a has an index of 1, lib_b and lib_c an index of 2, and lib_d an index of 3.
Definition at line 2661 of file lib_override.cc.
References BKE_library_foreach_ID_link(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id, IDWALK_READONLY, lib_override_sort_libraries_func(), Main::libraries, library, and LISTBASE_FOREACH.
Referenced by BKE_lib_override_library_main_resync().
|
static |
Definition at line 1145 of file lib_override.cc.
References BKE_lib_override_library_create_from_tag(), BKE_main_relations_create(), BKE_main_relations_free(), BKE_main_relations_tag_set(), BLI_assert, data, ID_IS_OVERRIDE_LIBRARY_REAL, ID::lib, lib_override_group_tag_data_clear(), lib_override_group_tag_data_object_to_collection_init(), lib_override_hierarchy_dependencies_recursive_tag(), lib_override_linked_group_tag(), lib_override_overrides_group_tag(), LIB_TAG_DOIT, LIB_TAG_MISSING, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, ID::override_library, IDOverrideLibrary::reference, and scene.
Referenced by BKE_lib_override_library_create().
|
static |
Definition at line 253 of file lib_override.cc.
References BKE_id_copy_ex(), BKE_key_from_id(), BKE_lib_override_library_init(), BLI_assert, ID::flag, Key::id, id_us_min(), ID::lib, LIB_EMBEDDED_DATA_LIB_OVERRIDE, LIB_ID_COPY_DEFAULT, LIB_ID_COPY_NO_LIB_OVERRIDE, and LIB_ID_CREATE_NO_MAIN.
Referenced by BKE_lib_override_library_create_from_id(), and BKE_lib_override_library_create_from_tag().
|
static |
Definition at line 1208 of file lib_override.cc.
References ViewLayer::basact, BKE_collection_add_from_collection(), BKE_collection_add_from_object(), BKE_collection_has_collection(), BKE_collection_has_object(), BKE_collection_is_in_scene(), BKE_collection_object_add(), BKE_collection_object_add_from(), BKE_id_new(), BKE_main_collection_sync_remap(), BKE_scene_objects_as_gset(), BKE_view_layer_base_find(), BKE_view_layer_has_collection(), BLI_assert, BLI_gset_free(), BLI_gset_lookup(), COLLECTION_HIDE_RENDER, COLLECTION_HIDE_VIEWPORT, Main::collections, DEG_id_tag_update(), DEG_id_tag_update_ex(), ELEM, Collection::flag, GS, Collection::id, Object::id, Scene::id, ID_GR, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY, ID_OB, ID_REAL_USERS, ID_RECALC_BASE_FLAGS, ID_RECALC_SELECT, ID_RECALC_TRANSFORM, id_us_min(), ID::lib, LISTBASE_FOREACH, Scene::master_collection, ID::name, ID::newid, Main::objects, ID::override_library, IDOverrideLibrary::reference, and scene.
Referenced by BKE_lib_override_library_create(), BKE_lib_override_library_main_resync(), and lib_override_library_resync().
|
static |
Definition at line 3556 of file lib_override.cc.
References BLI_ghash_lookup_p(), ID_IS_OVERRIDE_LIBRARY_REAL, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, lib_override_library_id_reset_do(), MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, MainIDRelationsEntryItem::next, ID::override_library, Main::relations, MainIDRelations::relations_from_pointers, MainIDRelationsEntry::tags, and MainIDRelationsEntry::to_ids.
Referenced by BKE_lib_override_library_id_hierarchy_reset().
|
static |
Definition at line 3473 of file lib_override.cc.
References BKE_lib_override_library_property_delete(), BLI_assert, DEG_id_tag_update_ex(), ELEM, IDOverrideLibrary::flag, ID_RECALC_COPY_ON_WRITE, IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED, IDOVERRIDE_LIBRARY_RUNTIME_TAG_NEEDS_RELOAD, LISTBASE_FOREACH_MUTABLE, ID::override_library, override_library_rna_path_runtime_ensure(), PointerRNA::owner_id, PROP_COLLECTION, PROP_POINTER, IDOverrideLibrary::properties, ptr, IDOverrideLibrary::reference, RNA_path_resolve_property(), RNA_pointer_create(), RNA_property_pointer_get(), RNA_property_pointer_type(), RNA_property_type(), RNA_struct_is_ID(), IDOverrideLibraryRuntime::tag, and PointerRNA::type.
Referenced by BKE_lib_override_library_id_reset(), and lib_override_library_id_hierarchy_recursive_reset().
|
static |
Definition at line 2373 of file lib_override.cc.
References BKE_id_free(), BKE_lib_override_library_main_hierarchy_root_ensure(), BKE_main_id_tag_all(), BKE_main_relations_create(), BKE_main_relations_free(), BKE_main_relations_tag_set(), BLI_assert, BLI_ghash_free(), BLI_ghash_haskey(), BLI_ghash_lookup(), BLI_ghash_ptr_new(), BLI_ghashIterator_done(), BLI_ghashIterator_free(), BLI_ghashIterator_getKey(), BLI_ghashIterator_getValue(), BLI_ghashIterator_new(), BLI_ghashIterator_step(), BLI_linklist_free(), BLI_linklist_index(), BLI_linklist_prepend(), BLI_listbase_clear(), CLOG_ERROR, CLOG_INFO, BlendFileReadReport::count, data, BlendFileReadReport::do_resynced_lib_overrides_libraries_list, BlendFileReadReport::duration, IDOverrideLibrary::flag, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_REAL, IDOVERRIDE_LIBRARY_FLAG_NO_HIERARCHY, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, LinkNodePair::last_node, ID::lib, lib_override_group_tag_data_clear(), lib_override_group_tag_data_object_to_collection_init(), lib_override_hierarchy_dependencies_recursive_tag(), lib_override_library_resync(), lib_override_linked_group_tag(), lib_override_resync_id_lib_level_is_valid(), lib_override_resync_tagging_finalize_recurse(), BlendFileReadReport::lib_overrides_recursive_resync, LIB_TAG_DOIT, LIB_TAG_LIB_OVERRIDE_NEED_RESYNC, LIB_TAG_MISSING, library, LIBRARY_TAG_RESYNC_REQUIRED, LinkNode::link, LinkNodePair::list, LISTBASE_FOREACH_MUTABLE, LOG, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, MEM_freeN, ID::name, MainIDRelationsEntryItem::next, LinkNode::next, ID::override_library, PIL_check_seconds_timer(), IDOverrideLibrary::reference, Main::relations, MainIDRelations::relations_from_pointers, BlendFileReadReport::resynced_lib_overrides, BlendFileReadReport::resynced_lib_overrides_libraries, BlendFileReadReport::resynced_lib_overrides_libraries_count, scene, ID::tag, Library::tag, Library::temp_index, and MainIDRelationsEntry::to_ids.
Referenced by BKE_lib_override_library_main_resync().
Definition at line 2215 of file lib_override.cc.
References BKE_idtype_get_info_from_id(), BLI_assert, IDOverrideLibrary::hierarchy_root, ID_IS_OVERRIDE_LIBRARY_REAL, ID::override_library, and IDTypeInfo::owner_get.
Referenced by lib_override_resync_tagging_finalize_recurse().
|
static |
Definition at line 3382 of file lib_override.cc.
References atomic_fetch_and_or_uint8(), BKE_lib_override_library_operations_create(), BLI_task_pool_user_data(), LibOverrideOpCreateData::bmain, LibOverrideOpCreateData::changed, and blender::compositor::pool.
Referenced by BKE_lib_override_library_main_operations_create().
|
static |
Definition at line 2915 of file lib_override.cc.
References BLI_assert, BLI_freelistN(), lib_override_library_property_operation_clear(), LISTBASE_FOREACH, MEM_freeN, IDOverrideLibraryProperty::operations, and IDOverrideLibraryProperty::rna_path.
Referenced by BKE_lib_override_library_clear(), and BKE_lib_override_library_property_delete().
|
static |
Definition at line 2900 of file lib_override.cc.
References BLI_duplicatelist(), BLI_strdup(), ListBase::first, lib_override_library_property_operation_copy(), IDOverrideLibraryPropertyOperation::next, IDOverrideLibraryProperty::operations, and IDOverrideLibraryProperty::rna_path.
Referenced by BKE_lib_override_library_copy(), and lib_override_library_resync().
|
static |
Definition at line 3083 of file lib_override.cc.
References MEM_freeN, IDOverrideLibraryPropertyOperation::subitem_local_name, and IDOverrideLibraryPropertyOperation::subitem_reference_name.
Referenced by BKE_lib_override_library_property_operation_delete(), lib_override_library_property_clear(), and lib_override_library_resync().
|
static |
Definition at line 3072 of file lib_override.cc.
References BLI_strdup(), IDOverrideLibraryPropertyOperation::subitem_local_name, and IDOverrideLibraryPropertyOperation::subitem_reference_name.
Referenced by lib_override_library_property_copy().
|
static |
Definition at line 1668 of file lib_override.cc.
References BKE_id_remapper_add(), BKE_id_remapper_create(), BKE_id_remapper_free(), BKE_libblock_relink_multiple(), BKE_libblock_remap_multiple(), BLI_ghash_lookup(), BLI_ghashIterator_getValue(), BLI_linklist_free(), BLI_linklist_prepend(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, GHASH_ITER, id, ID_REMAP_FORCE_NEVER_NULL_USAGE, ID_REMAP_FORCE_USER_REFCOUNT, ID_REMAP_TYPE_REMAP, ID::lib, LIB_TAG_DOIT, LIB_TAG_NO_MAIN, ID::newid, and ID::tag.
Referenced by lib_override_library_resync().
|
static |
ID_IS_LINKED(id_override_new) ||
Definition at line 1712 of file lib_override.cc.
References BKE_id_multi_tagged_delete(), BKE_id_remapper_create(), BKE_id_remapper_free(), BKE_key_from_id(), BKE_lib_override_library_create_from_tag(), BKE_lib_override_library_get(), BKE_lib_override_library_is_user_edited(), BKE_lib_override_library_property_delete(), BKE_libblock_management_main_add(), BKE_libblock_relink_multiple(), BKE_main_collection_sync(), BKE_main_id_newptr_and_tag_clear(), BKE_main_id_tag_all(), BKE_main_relations_create(), BKE_main_relations_free(), BKE_main_relations_tag_set(), BKE_reportf(), BLI_addtail(), BLI_assert, BLI_duplicatelist(), BLI_findindex(), BLI_freelinkN(), BLI_ghash_free(), BLI_ghash_haskey(), BLI_ghash_insert(), BLI_ghash_lookup(), BLI_ghash_new(), BLI_ghashutil_ptrcmp(), BLI_ghashutil_ptrhash(), BLI_insertlinkreplace(), BLI_linklist_free(), BLI_linklist_prepend(), BLI_listbase_is_empty(), CLOG_ERROR, CLOG_INFO, CLOG_WARN, data, ELEM, ListBase::first, IDOverrideLibrary::flag, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, FOREACH_MAIN_LISTBASE_BEGIN, FOREACH_MAIN_LISTBASE_END, FOREACH_MAIN_LISTBASE_ID_BEGIN, FOREACH_MAIN_LISTBASE_ID_END, GS, IDOverrideLibrary::hierarchy_root, id, Library::id, id_fake_user_set(), ID_GR, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_REAL, ID_KE, ID_NT, ID_REMAP_FORCE_NEVER_NULL_USAGE, ID_REMAP_FORCE_USER_REFCOUNT, ID_REMAP_TYPE_CLEANUP, ID_SCE, IDOVERRIDE_LIBRARY_FLAG_IDPOINTER_MATCH_REFERENCE, ID::lib, LIB_LIB_OVERRIDE_RESYNC_LEFTOVER, lib_override_group_tag_data_clear(), lib_override_group_tag_data_object_to_collection_init(), lib_override_hierarchy_dependencies_recursive_tag(), lib_override_library_create_post_process(), lib_override_library_property_copy(), lib_override_library_property_operation_clear(), lib_override_library_remap(), lib_override_linked_group_tag(), lib_override_object_posemode_transfer(), lib_override_overrides_group_tag(), LIB_TAG_DOIT, LIB_TAG_INDIRECT, LIB_TAG_LIB_OVERRIDE_NEED_RESYNC, LIB_TAG_MISSING, LIB_TAG_NO_MAIN, LIB_TAG_NO_USER_REFCOUNT, LISTBASE_FOREACH, LISTBASE_FOREACH_MUTABLE, LOG, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, MAX_ID_NAME, ID::name, ID::newid, LinkNode::next, IDOverrideLibraryProperty::next, ntreeFromID(), OB_DATA_SUPPORT_ID, OBACT, ID::override_library, PROP_COLLECTION, PROP_POINTER, IDOverrideLibrary::properties, IDOverrideLibrary::reference, BlendFileReadReport::reports, RNA_id_pointer_create(), RNA_OVERRIDE_APPLY_FLAG_IGNORE_ID_POINTERS, RNA_OVERRIDE_APPLY_FLAG_NOP, RNA_struct_override_apply(), RPT_ERROR, RPT_WARNING, scene, and ID::tag.
Referenced by BKE_lib_override_library_resync(), and lib_override_library_main_resync_on_library_indirect_level().
|
static |
Definition at line 967 of file lib_override.cc.
References BLI_assert, BLI_ghash_lookup(), data, Collection::id, ID_IS_LINKED, lib_override_linked_group_tag_clear_boneshapes_objects(), lib_override_linked_group_tag_recursive(), LIB_TAG_MISSING, LinkNodePair::list, LISTBASE_FOREACH, LinkNode::next, Main::objects, and ID::tag.
Referenced by lib_override_library_create_do(), lib_override_library_main_resync_on_library_indirect_level(), and lib_override_library_resync().
|
static |
Definition at line 925 of file lib_override.cc.
References Main::collections, data, lib_override_linked_group_tag_collections_keep_tagged_check_recursive(), LISTBASE_FOREACH, bPoseChannel::next, OB_ARMATURE, and Main::objects.
Referenced by lib_override_linked_group_tag().
|
static |
Definition at line 892 of file lib_override.cc.
References Collection::children, data, ListBase::first, Collection::gobject, Object::id, CollectionObject::next, CollectionChild::next, and ID::tag.
Referenced by lib_override_linked_group_tag_clear_boneshapes_objects().
|
static |
Definition at line 835 of file lib_override.cc.
References BLI_assert, BLI_ghash_lookup(), data, ELEM, GS, ID_GR, ID_IS_LINKED, ID_OB, LibOverrideGroupTagData::id_root, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, ID::lib, LIB_TAG_MISSING, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, ID::name, MainIDRelationsEntryItem::next, Main::relations, MainIDRelations::relations_from_pointers, ID::tag, MainIDRelationsEntry::tags, and MainIDRelationsEntry::to_ids.
Referenced by lib_override_linked_group_tag().
BLI_INLINE void lib_override_object_posemode_transfer | ( | ID * | id_dst, |
ID * | id_src | ||
) |
Helper to preserve Pose mode on override objects. A bit annoying to have this special case, but not much to be done here currently, since the matching RNA property is read-only.
Definition at line 82 of file lib_override.cc.
References GS, ID_OB, Object::mode, ID::name, OB_ARMATURE, OB_MODE_POSE, Object::restore_mode, and Object::type.
Referenced by BKE_lib_override_library_update(), and lib_override_library_resync().
|
static |
Definition at line 1123 of file lib_override.cc.
References BLI_assert, data, ID_IS_OVERRIDE_LIBRARY_REAL, lib_override_overrides_group_tag_recursive(), LIB_TAG_MISSING, ID::override_library, IDOverrideLibrary::reference, ID::tag, and UNUSED_VARS_NDEBUG.
Referenced by BKE_lib_override_library_delete(), lib_override_library_create_do(), and lib_override_library_resync().
|
static |
Definition at line 1049 of file lib_override.cc.
References BKE_lib_override_library_get(), BLI_assert, BLI_ghash_lookup(), data, ELEM, IDOverrideLibrary::flag, IDOverrideLibrary::hierarchy_root, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_REAL, LibOverrideGroupTagData::id_root, IDOVERRIDE_LIBRARY_FLAG_NO_HIERARCHY, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, ID::lib, LIB_TAG_MISSING, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, MainIDRelationsEntryItem::next, ID::override_library, IDOverrideLibrary::reference, Main::relations, MainIDRelations::relations_from_pointers, ID::tag, MainIDRelationsEntry::tags, and MainIDRelationsEntry::to_ids.
Referenced by lib_override_overrides_group_tag().
|
static |
Definition at line 440 of file lib_override.cc.
References BKE_key_from_id(), BLI_assert, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, from, GS, IDOverrideLibrary::hierarchy_root, id, Key::id, ID_IS_OVERRIDE_LIBRARY_REAL, ID_KE, ID::name, ID::newid, ID::override_library, and IDOverrideLibrary::reference.
Referenced by BKE_lib_override_library_create_from_tag().
|
static |
Definition at line 463 of file lib_override.cc.
References BKE_id_remapper_add(), BKE_key_from_id(), BLI_assert, Key::id, and ID::newid.
Referenced by BKE_lib_override_library_create_from_tag().
|
static |
Definition at line 2205 of file lib_override.cc.
References ID_IS_LINKED.
Referenced by lib_override_library_main_resync_on_library_indirect_level(), and lib_override_resync_tagging_finalize_recurse().
|
static |
Definition at line 2242 of file lib_override.cc.
References BLI_assert, BLI_ghash_ensure_p(), BLI_ghash_lookup(), BLI_linklist_append(), CLOG_ERROR, CLOG_INFO, Library::filepath, MainIDRelationsEntry::from_ids, IDOverrideLibrary::hierarchy_root, id, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_REAL, IDWALK_CB_LOOPBACK, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, ID::lib, lib_override_library_main_resync_root_get(), lib_override_resync_id_lib_level_is_valid(), LIB_TAG_LIB_OVERRIDE_NEED_RESYNC, LOG, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, ID::name, MainIDRelationsEntryItem::next, ID::override_library, Main::relations, MainIDRelations::relations_from_pointers, ID::tag, MainIDRelationsEntry::tags, and Library::temp_index.
Referenced by lib_override_library_main_resync_on_library_indirect_level().
|
static |
Definition at line 1439 of file lib_override.cc.
References BKE_lib_override_library_get(), BLI_assert, BLI_assert_unreachable, BLI_ghash_lookup(), CLOG_ERROR, ELEM, ID::flag, MainIDRelationsEntry::from_ids, id, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_REAL, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, ID::lib, LIB_EMBEDDED_DATA_LIB_OVERRIDE, LOG, MAINIDRELATIONS_ENTRY_TAGS_PROCESSED, ID::name, MainIDRelationsEntryItem::next, Main::relations, MainIDRelations::relations_from_pointers, and MainIDRelationsEntry::tags.
Referenced by BKE_lib_override_library_main_hierarchy_root_ensure().
|
static |
Definition at line 1519 of file lib_override.cc.
References BLI_assert, BLI_ghash_lookup(), CLOG_WARN, ELEM, MainIDRelationsEntry::from_ids, IDOverrideLibrary::hierarchy_root, id, ID_IS_OVERRIDE_LIBRARY, ID_IS_OVERRIDE_LIBRARY_REAL, IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE, ID::lib, LOG, ID::name, MainIDRelationsEntryItem::next, ID::override_library, IDOverrideLibrary::reference, Main::relations, MainIDRelations::relations_from_pointers, and MainIDRelationsEntry::to_ids.
Referenced by BKE_lib_override_library_main_hierarchy_root_ensure().
|
static |
Definition at line 2617 of file lib_override.cc.
References LibraryIDLinkCallbackData::cb_flag, CLOG_ERROR, CLOG_WARN, Library::filepath, id, ID_IS_LINKED, LibraryIDLinkCallbackData::id_owner, LibraryIDLinkCallbackData::id_pointer, IDWALK_CB_LOOPBACK, IDWALK_RET_NOP, ID::lib, LOG, ID::name, Library::temp_index, and LibraryIDLinkCallbackData::user_data.
Referenced by lib_override_libraries_index_define().
BLI_INLINE GHash* override_library_rna_path_mapping_ensure | ( | IDOverrideLibrary * | override | ) |
Definition at line 2840 of file lib_override.cc.
References BLI_ghash_insert(), BLI_ghash_new(), BLI_ghashutil_strcmp(), BLI_ghashutil_strhash_p_murmur(), IDOverrideLibraryProperty::next, override, override_library_rna_path_runtime_ensure(), and IDOverrideLibraryRuntime::rna_path_to_override_properties.
Referenced by BKE_lib_override_library_property_find(), and BKE_lib_override_library_property_get().
BLI_INLINE IDOverrideLibraryRuntime* override_library_rna_path_runtime_ensure | ( | IDOverrideLibrary * | override | ) |
Definition at line 2830 of file lib_override.cc.
References override.
Referenced by lib_override_library_id_reset_do(), and override_library_rna_path_mapping_ensure().
|
static |
Definition at line 68 of file lib_override.cc.
Referenced by BKE_lib_override_library_main_hierarchy_root_ensure(), BKE_lib_override_library_main_resync(), BKE_lib_override_library_operations_create(), lib_override_library_main_resync_on_library_indirect_level(), lib_override_library_resync(), lib_override_resync_tagging_finalize_recurse(), lib_override_root_find(), lib_override_root_hierarchy_set(), and lib_override_sort_libraries_func().