Blender V4.3
BKE_anim_data.hh File Reference
#include <functional>
#include <optional>
#include "BLI_function_ref.hh"

Go to the source code of this file.

Classes

struct  OwnedAnimData
 

Typedefs

typedef enum eAnimData_MergeCopy_Modes eAnimData_MergeCopy_Modes
 

Enumerations

enum  eAnimData_MergeCopy_Modes { ADT_MERGECOPY_KEEP_DST = 0 , ADT_MERGECOPY_SRC_COPY = 1 , ADT_MERGECOPY_SRC_REF = 2 }
 

Functions

bool id_type_can_have_animdata (short id_type)
 
bool id_can_have_animdata (const ID *id)
 
AnimDataBKE_animdata_from_id (const ID *id)
 
AnimDataBKE_animdata_ensure_id (ID *id)
 
bool BKE_animdata_set_action (ReportList *reports, ID *id, bAction *act)
 
bool BKE_animdata_set_tmpact (ReportList *reports, ID *id, bAction *act)
 
bool BKE_animdata_action_editable (const AnimData *adt)
 
bool BKE_animdata_action_ensure_idroot (const ID *owner, bAction *action)
 
void BKE_animdata_free (ID *id, bool do_id_user)
 
bool BKE_animdata_id_is_animated (const ID *id)
 
void BKE_animdata_foreach_id (AnimData *adt, LibraryForeachIDData *data)
 
AnimDataBKE_animdata_copy (Main *bmain, AnimData *adt, int flag)
 
AnimDataBKE_animdata_copy_in_lib (Main *bmain, std::optional< Library * > owner_library, AnimData *adt, int flag)
 
bool BKE_animdata_copy_id (Main *bmain, ID *id_to, ID *id_from, int flag)
 
void BKE_animdata_copy_id_action (Main *bmain, ID *id)
 
void BKE_animdata_duplicate_id_action (Main *bmain, ID *id, uint duplicate_flags)
 
void BKE_animdata_merge_copy (Main *bmain, ID *dst_id, ID *src_id, eAnimData_MergeCopy_Modes action_mode, bool fix_drivers)
 
void BKE_animdata_blend_write (BlendWriter *writer, ID *id)
 
void BKE_animdata_blend_read_data (BlendDataReader *reader, ID *id)
 
void BKE_animdata_liboverride_post_process (ID *id)
 
void BKE_animdata_main_cb (struct Main *bmain, blender::FunctionRef< void(ID *, AnimData *)> func)
 
void BKE_fcurves_main_cb (struct Main *bmain, blender::FunctionRef< void(ID *, FCurve *)> func)
 
void BKE_fcurves_id_cb (struct ID *id, blender::FunctionRef< void(ID *, FCurve *)> func)
 

Typedef Documentation

◆ eAnimData_MergeCopy_Modes

Enumeration Type Documentation

◆ eAnimData_MergeCopy_Modes

Enumerator
ADT_MERGECOPY_KEEP_DST 
ADT_MERGECOPY_SRC_COPY 
ADT_MERGECOPY_SRC_REF 

Definition at line 147 of file BKE_anim_data.hh.

Function Documentation

◆ BKE_animdata_action_editable()

bool BKE_animdata_action_editable ( const AnimData * adt)

◆ BKE_animdata_action_ensure_idroot()

bool BKE_animdata_action_ensure_idroot ( const ID * owner,
bAction * action )

Ensure that the action's idroot is set correctly given the ID type of the owner. Return true if it is, false if it was already set to an incompatible type.

Definition at line 232 of file anim_data.cc.

References blender::animrig::legacy::action_treat_as_legacy(), GS, bAction::idroot, and ID::name.

Referenced by animdata_set_action(), blender::animrig::generic_assign_action(), and what_does_obaction().

◆ BKE_animdata_blend_read_data()

◆ BKE_animdata_blend_write()

◆ BKE_animdata_copy()

AnimData * BKE_animdata_copy ( Main * bmain,
AnimData * adt,
int flag )

Make a copy of the given AnimData - to be used when copying data-blocks.

Note
Regarding handling of IDs managed by the AnimData struct, this function follows the behaviors of the generic BKE_id_copy_ex, please see its documentation for more details.
Parameters
flagControl ID pointers management, see LIB_ID_CREATE_.../LIB_ID_COPY_... flags in BKE_lib_id.hh.
Returns
The copied animdata.

Definition at line 447 of file anim_data.cc.

References BKE_animdata_copy_in_lib(), and flag.

Referenced by BKE_animdata_copy_id(), and ED_armature_join_objects_exec().

◆ BKE_animdata_copy_id()

bool BKE_animdata_copy_id ( Main * bmain,
ID * id_to,
ID * id_from,
int flag )
Parameters
flagControl ID pointers management, see LIB_ID_CREATE_.../LIB_ID_COPY_... flags in BKE_lib_id.hh
Returns
true is successfully copied.

Definition at line 452 of file anim_data.cc.

References IdAdtTemplate::adt, BKE_animdata_copy(), BKE_animdata_free(), BKE_animdata_from_id(), flag, GS, LIB_ID_CREATE_NO_USER_REFCOUNT, and ID::name.

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

◆ BKE_animdata_copy_id_action()

void BKE_animdata_copy_id_action ( Main * bmain,
ID * id )

Copy AnimData Actions.

Definition at line 515 of file anim_data.cc.

References animdata_copy_id_action(), and ID_IS_OVERRIDE_LIBRARY.

◆ BKE_animdata_copy_in_lib()

AnimData * BKE_animdata_copy_in_lib ( Main * bmain,
std::optional< Library * > owner_library,
AnimData * adt,
int flag )

Same as BKE_animdata_copy, but allows to duplicate Action IDs into a library.

Parameters
owner_librarythe Library to 'assign' the newly created ID to. Use nullptr to make ID not use any library (i.e. become a local ID). Use std::nullopt for default behavior (i.e. behavior of the BKE_animdata_copy function).

Definition at line 364 of file anim_data.cc.

References AnimData::action, BKE_fcurves_copy(), BKE_id_copy_in_lib(), BKE_nla_tracks_copy_from_adt(), BLI_assert, BLI_listbase_clear(), AnimData::driver_array, AnimData::drivers, flag, id_us_plus(), LIB_ID_COPY_ACTIONS, LIB_ID_CREATE_NO_MAIN, LIB_ID_CREATE_NO_USER_REFCOUNT, MEM_dupallocN, AnimData::overrides, AnimData::tmpact, and blender::animrig::Slot::users_invalidate().

Referenced by BKE_animdata_copy(), BKE_libblock_copy_in_lib(), and blender::bke::greasepencil::convert::legacy_gpencil_to_grease_pencil().

◆ BKE_animdata_duplicate_id_action()

void BKE_animdata_duplicate_id_action ( Main * bmain,
ID * id,
uint duplicate_flags )

◆ BKE_animdata_ensure_id()

◆ BKE_animdata_foreach_id()

void BKE_animdata_foreach_id ( AnimData * adt,
LibraryForeachIDData * data )

◆ BKE_animdata_free()

◆ BKE_animdata_from_id()

AnimData * BKE_animdata_from_id ( const ID * id)

Get AnimData from the given ID-block.

Definition at line 89 of file anim_data.cc.

References IdAdtTemplate::adt, and id_can_have_animdata().

Referenced by achannel_setting_slider_cb(), action_to_animdata(), ANIM_list_elem_update(), ANIM_remove_driver(), animdata_copy_id_action(), animdata_filter_base_is_ok(), animfilter_block_data(), animrecord_check_state(), animviz_calc_motionpaths(), blender::animrig::assign_action_ensure_slot_for_keying(), blender::animrig::assign_action_slot(), BKE_animdata_blend_write(), BKE_animdata_copy_id(), BKE_animdata_fix_paths_remove(), BKE_animdata_id_is_animated(), BKE_animdata_liboverride_post_process(), BKE_animdata_merge_copy(), BKE_animdata_set_action(), BKE_animdata_set_tmpact(), BKE_animdata_transfer_by_basepath(), BKE_animsys_eval_animdata(), BKE_animsys_eval_driver(), BKE_animsys_update_driver_array(), BKE_fcurve_find_by_rna_context_ui(), BKE_fcurves_id_cb(), BKE_lib_override_library_property_is_animated(), BKE_library_id_can_use_filter_id(), BKE_nla_debug_print_flags(), blender::deg::DepsgraphNodeBuilder::build_animdata(), blender::deg::DepsgraphRelationBuilder::build_animdata_curves(), blender::deg::DepsgraphRelationBuilder::build_animdata_drivers(), blender::deg::DepsgraphRelationBuilder::build_copy_on_write_relations(), blender::deg::DepsgraphRelationBuilder::build_driver_relations(), calculate_fcurve_bounds_and_unhide(), blender::animrig::clear_keyframe(), convert_action_exec(), convert_action_poll(), curve_is_animated(), blender::animrig::delete_keyframe(), do_graph_region_driver_buttons(), do_version_hue_sat_node(), do_versions_after_linking_250(), do_versions_after_linking_300(), do_versions_after_linking_400(), do_versions_ipos_to_animato(), draw_fcurve_curve(), ED_curve_updateAnimPaths(), blender::ed::outliner::TreeElementID::expand(), blender::animrig::Action::find_suitable_slot_for(), blender::animrig::foreach_action_slot_use_with_references(), blender::bke::nla::foreach_strip(), gather_frames_to_render(), gather_frames_to_render_for_id(), blender::animrig::get_action(), blender::animrig::get_action_slot_pair(), get_fcurves_of_property(), blender::interface::internal::get_property_drivers(), blender::ed::greasepencil::get_selected_object_keyframes(), blender::deg::graph_tag_ids_for_visible_update(), id_data_find_fcurve(), id_frame_has_keyframe(), insert_key_button_exec(), ipo_to_animdata(), blender::bke::greasepencil::convert::legacy_gpencil_to_grease_pencil(), blender::bke::greasepencil::convert::legacy_object_modifier_common(), blender::bke::greasepencil::convert::legacy_object_thickness_modifier_thickness_anim(), library_foreach_ID_link(), blender::ed::object::make_local_exec(), blender::ed::object::make_local_material_tag(), make_new_animlistelem(), mouse_nla_tracks(), nlastrip_shuffle_transformed(), nlastrips_to_animdata(), poseAnim_mapping_refresh(), poselib_keytag_pose(), pyrna_struct_driver_add(), RE_RenderAnim(), recalcData_nla(), remove_sequencer_fcurves(), RNA_property_anim_editable(), RNA_property_driver_editable(), seq_prefetch_frames(), seq_render_mask(), blender::ed::object::single_object_action_users(), blender::ed::object::single_objectdata_action_users(), blender::animrig::Action::slot_name_propagate(), tag_update_animation_element(), texture_slot_move_exec(), transdata_get_track_shuffle_offset_side(), uiTemplateAction(), undocurve_from_editcurve(), undocurve_to_editcurve(), verify_driver_fcurve(), version_liboverride_rnacollections_insertion_animdata(), version_nla_action_strip_hold(), version_nla_tweakmode_incomplete(), and version_principled_bsdf_update_animdata().

◆ BKE_animdata_id_is_animated()

◆ BKE_animdata_liboverride_post_process()

void BKE_animdata_liboverride_post_process ( ID * id)

Process the AnimData struct after all library overrides have been applied.

This is necessary as an extra step to fix the NLA, as that requires multiple pointers & various sets of flags to all be consistent. It's much easier to do that once all overrides have been applied.

Definition at line 1521 of file anim_data.cc.

References BKE_animdata_from_id(), and BKE_nla_liboverride_post_process().

Referenced by BKE_lib_override_library_update().

◆ BKE_animdata_main_cb()

void BKE_animdata_main_cb ( struct Main * bmain,
blender::FunctionRef< void(ID *, AnimData *)> func )

◆ BKE_animdata_merge_copy()

◆ BKE_animdata_set_action()

bool BKE_animdata_set_action ( ReportList * reports,
ID * id,
bAction * act )

Set active action used by AnimData from the given ID-block.

Called when user tries to change the active action of an AnimData block (via RNA, Outliner, etc.)

Parameters
reportsCan be NULL.
idThe owner of the animation data
actThe Action to set, or NULL to clear.
Returns
true when the action was successfully updated, false otherwise.

Definition at line 194 of file anim_data.cc.

References AnimData::action, animdata_set_action(), blender::animrig::assign_action(), BKE_animdata_action_editable(), BKE_animdata_ensure_id(), BKE_animdata_from_id(), BKE_report(), RPT_ERROR, and RPT_WARNING.

Referenced by blender::ed::outliner::actionset_id_fn(), blender::ed::outliner::unlink_action_fn(), and blender::ed::outliner::unlinkact_animdata_fn().

◆ BKE_animdata_set_tmpact()

bool BKE_animdata_set_tmpact ( ReportList * reports,
ID * id,
bAction * act )

Same as BKE_animdata_set_action(), except sets tmpact instead of action.

Definition at line 181 of file anim_data.cc.

References animdata_set_action(), BKE_animdata_from_id(), BKE_report(), RPT_WARNING, and AnimData::tmpact.

◆ BKE_fcurves_id_cb()

◆ BKE_fcurves_main_cb()

void BKE_fcurves_main_cb ( struct Main * bmain,
blender::FunctionRef< void(ID *, FCurve *)> func )

Apply the given callback function on all F-Curves attached to data in main database.

Referenced by do_versions_after_linking_270(), ED_armature_join_objects_exec(), and blender::ed::greasepencil::join_object_with_active().

◆ id_can_have_animdata()

◆ id_type_can_have_animdata()

bool id_type_can_have_animdata ( short id_type)