|
Blender V5.0
|
#include <ANIM_action.hh>
Inherits bAction.
Protected Member Functions | |
| int64_t | find_layer_index (const Layer &layer) const |
| int64_t | find_slot_index (const Slot &slot) const |
| int | strip_keyframe_data_append (StripKeyframeData *strip_data) |
| void | strip_keyframe_data_remove_if_unused (int index) |
Protected Attributes | |
| friend | Strip |
| friend | Layer |
Additional Inherited Members | |
| Public Attributes inherited from bAction | |
| ID | id |
| struct ActionLayer ** | layer_array |
| int | layer_array_num |
| int | layer_active_index |
| struct ActionSlot ** | slot_array |
| int | slot_array_num |
| int32_t | last_slot_handle |
| struct ActionStripKeyframeData ** | strip_keyframe_data_array |
| int | strip_keyframe_data_array_num |
| char | _pad0 [4] |
| ListBase | curves |
| ListBase | groups |
| ListBase | markers |
| int | flag |
| int | active_marker |
| int | idroot |
| char | _pad1 [4] |
| float | frame_start |
| float | frame_end |
| PreviewImage * | preview |
Container of animation data for one or more animated IDs.
An Action broadly consists of four things:
StripData is not stored in the Strips themselves, but rather is stored separately at the top level of the Action, and each Strip references a StripData item. This allows Strip instancing by having more than one Strip reference the same StripData item.
Each Action has a set of Slots defined at its top level. The animation data within a StripData item is organized into one or more subsets, each of which is marked as being for a different Slot.
For an ID to be animated by an Action, the ID must specify both an Action and a Slot within that Action. The Slot that the ID uses determines which subset of the animation data throughout the Action it is animated by. If an Action but no Slot is specified, the ID is simply not animated.
To continue supporting legacy actions at runtime, there are Action::is_action_legacy() and Action::is_action_layered() that report whether an Action uses that legacy F-Curve data or is instead a layered Action. These methods will eventually be removed when runtime support for legacy actions is fully removed. For code in blend file loading and versioning, which will stick around for the long-term, use animrig::versioning::action_is_layered() instead. (Note that an empty Action is considered both a valid legacy and layered action.)
Definition at line 94 of file ANIM_action.hh.
|
default |
Referenced by Action(), and slot_for_handle().
|
delete |
Copy constructor is deleted, as code should use regular ID library management functions to duplicate this data-block.
References Action(), ATTR_WARN_UNUSED_RESULT, get_frame_range(), get_frame_range_of_keys(), get_frame_range_of_slot(), get_layer_for_keyframing(), is_cyclic(), Layer, name, slot(), and slot_setup_for_id().
Return the layer's index, or -1 if not found in this Action.
Definition at line 325 of file animrig/intern/action.cc.
References Layer, layer(), and layers().
Referenced by layer_remove().
Return the slot's index, or -1 if not found in this Action.
Definition at line 336 of file animrig/intern/action.cc.
References slot(), and slots().
Referenced by slot_remove().
| float2 blender::animrig::Action::get_frame_range | ( | ) | const |
Retrieve the intended playback frame range of the entire Action.
Definition at line 802 of file animrig/intern/action.cc.
References ACT_FRAME_RANGE, blender::animrig::legacy::fcurves_all(), bAction::flag, bAction::frame_end, bAction::frame_start, and blender::animrig::get_frame_range_of_fcurves().
Referenced by Action(), draw_nla_main_data(), and blender::animrig::insert_key_layer().
| float2 blender::animrig::Action::get_frame_range_of_keys | ( | bool | include_modifiers | ) | const |
Calculate the extents of this Action.
Performs a scan of all F-Curves for their first & last key frames.
Definition at line 832 of file animrig/intern/action.cc.
References blender::animrig::legacy::fcurves_all(), and blender::animrig::get_frame_range_of_fcurves().
Referenced by Action(), and blender::animrig::tests::TEST_F().
| float2 blender::animrig::Action::get_frame_range_of_slot | ( | slot_handle_t | slot_handle | ) | const |
Retrieve the intended playback frame range of a slot.
Definition at line 812 of file animrig/intern/action.cc.
References ACT_FRAME_RANGE, blender::animrig::legacy::fcurves_all(), blender::animrig::fcurves_for_action_slot(), bAction::flag, bAction::frame_end, bAction::frame_start, blender::animrig::get_frame_range_of_fcurves(), and is_action_layered().
Referenced by Action().
| Layer * blender::animrig::Action::get_layer_for_keyframing | ( | ) |
Get the layer that should be used for user-level keyframe insertion.
Definition at line 701 of file animrig/intern/action.cc.
References blender::animrig::assert_baklava_phase_1_invariants(), is_empty(), Layer, layer(), and layers().
Referenced by Action(), and blender::animrig::prep_action_layer_for_keying().
| bool blender::animrig::Action::has_keyframes | ( | slot_handle_t | action_slot_handle | ) | const |
Check if the slot with this handle has any keyframes.
If called on a legacy action, action_slot_handle is ignored and the fcurves of the legacy action are checked for keyframes.
Definition at line 736 of file animrig/intern/action.cc.
References bAction::curves, blender::animrig::fcurves_for_action_slot(), is_action_legacy(), and LISTBASE_FOREACH.
Referenced by blender::animrig::legacy::assigned_action_has_keyframes().
| bool blender::animrig::Action::has_single_frame | ( | ) | const |
Return whether the action has one unique point in time keyed.
This is mostly for the pose library, which will have different behavior depending on whether an Action corresponds to a "pose" (one keyframe) or "animation snippet" (multiple keyframes).
Definition at line 756 of file animrig/intern/action.cc.
References compare_ff(), and blender::animrig::legacy::fcurves_all().
| bool blender::animrig::Action::is_action_layered | ( | ) | const |
Return whether this is a layered Action.
Definition at line 231 of file animrig/intern/action.cc.
References BLI_listbase_is_empty(), bAction::curves, bAction::groups, bAction::layer_array_num, and bAction::slot_array_num.
Referenced by blender::bke::action_blend_write(), animchannels_delete_containers(), animviz_calc_motionpaths(), BKE_animdata_id_is_animated(), BKE_animsys_evaluate_animdata(), BKE_nla_tweakmode_enter(), BKE_nla_tweakmode_exit(), clear_anim_v3d_exec(), blender::animrig::clear_keyframe(), delete_key_v3d_without_keying_set(), blender::animrig::delete_keyframe(), blender::animrig::fcurve_find_by_rna_path(), blender::animrig::fcurves_for_action_slot(), blender::animrig::fcurves_for_action_slot(), blender::animrig::find_related_action(), blender::animrig::foreach_fcurve_in_action_slot(), get_frame_range_of_slot(), blender::animrig::insert_key_layered_action(), key_data_from_adt(), blender::animrig::prep_action_layer_for_keying(), separate_slots_poll(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), and what_does_obaction().
| bool blender::animrig::Action::is_action_legacy | ( | ) | const |
Return whether this is a legacy Action.
Definition at line 226 of file animrig/intern/action.cc.
References bAction::layer_array_num, and bAction::slot_array_num.
Referenced by achannel_is_part_of_disconnected_slot(), blender::animrig::action_fcurve_detach(), blender::animrig::legacy::action_fcurves_remove(), action_to_keylist(), blender::seq::animation_backup_original(), blender::seq::animation_restore_original(), blender::animrig::animdata_fcurve_delete(), animfilter_act_group(), animfilter_action(), animsys_blend_in_action(), animsys_evaluate_action(), blender::animrig::assert_baklava_phase_1_invariants(), blender::animrig::legacy::assigned_action_has_keyframes(), BKE_animdata_id_is_animated(), blender::deg::DepsgraphRelationBuilder::build_animdata_action_targets(), blender::animrig::legacy::channel_groups_all(), blender::animrig::legacy::channel_groups_for_assigned_slot(), blender::animrig::versioning::convert_legacy_animato_action(), blender::animrig::convert_to_layered_action(), ED_anim_ale_fcurve_delete(), ED_curve_updateAnimPaths(), blender::animrig::fcurve_find_in_action(), blender::animrig::fcurve_find_in_action_slot(), blender::animrig::legacy::fcurves_first_slot(), blender::animrig::foreach_fcurve_in_action(), blender::animrig::foreach_fcurve_in_action_slot(), has_keyframes(), merge_actions_selection_exec(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), and update_duplicate_action_constraint_settings().
| bool blender::animrig::Action::is_cyclic | ( | ) | const |
Returns whether this Action is configured as cyclic.
Definition at line 794 of file animrig/intern/action.cc.
References ACT_CYCLIC, ACT_FRAME_RANGE, and bAction::flag.
Referenced by Action(), blender::animrig::insert_key_layer(), and nlastrip_new().
| bool blender::animrig::Action::is_empty | ( | ) | const |
Return whether this Action has any data at all.
Definition at line 217 of file animrig/intern/action.cc.
References BLI_listbase_is_empty(), bAction::curves, bAction::groups, bAction::layer_array_num, and bAction::slot_array_num.
Referenced by blender::bke::action_free_data(), blender::animrig::animdata_remove_empty_action(), animfilter_action(), blender::deg::DepsgraphRelationBuilder::build_action(), blender::deg::DepsgraphRelationBuilder::build_animdata_action_targets(), blender::animrig::versioning::convert_legacy_animato_actions(), get_layer_for_keyframing(), and layer_keystrip_ensure().
| bool blender::animrig::Action::is_slot_animated | ( | slot_handle_t | slot_handle | ) | const |
Return whether this Action actually has any animation data for the given slot.
Definition at line 626 of file animrig/intern/action.cc.
References blender::animrig::fcurves_for_action_slot(), blender::Span< T >::is_empty(), and blender::animrig::Slot::unassigned.
Referenced by BKE_animdata_id_is_animated().
Definition at line 253 of file animrig/intern/action.cc.
References Layer, and bAction::layer_array.
Definition at line 249 of file animrig/intern/action.cc.
References Layer, and bAction::layer_array.
Referenced by blender::animrig::action_channelbag_ensure(), blender::bke::action_copy_data(), blender::animrig::action_fcurve_attach(), blender::animrig::tests::add_fcurve_to_action(), blender::animrig::assert_baklava_phase_1_invariants(), blender::animrig::legacy::channelbag_ensure(), blender::animrig::fcurve_find_by_rna_path(), blender::animrig::fcurve_find_in_action(), find_layer_index(), get_layer_for_keyframing(), blender::io::fbx::import_animations(), layer_keystrip_ensure(), blender::animrig::move_slot(), strip_keyframe_data_remove_if_unused(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), and blender::animrig::tests::TEST_F().
| Layer & blender::animrig::Action::layer_add | ( | std::optional< StringRefNull > | name | ) |
Create a new layer in this Action.
The new layer is added to the end of the layer array, and will be empty (no strips).
| name | The name to give the new layer. If no name is given, a default name is used. The name may be altered (e.g. appending ".001") to enforce uniqueness within the Action. |
Definition at line 258 of file animrig/intern/action.cc.
References blender::animrig::ActionLayer_alloc(), DATA_, blender::animrig::grow_array_and_append(), bAction::idroot, Layer, bAction::layer_active_index, bAction::layer_array, bAction::layer_array_num, ActionLayer::name, name, and STRNCPY_UTF8.
Referenced by blender::animrig::legacy::channelbag_ensure(), blender::animrig::versioning::convert_legacy_animato_action(), blender::animrig::convert_to_layered_action(), blender::ed::animrig::extract_pose(), layer_keystrip_ensure(), separate_slots_exec(), slot_channels_move_to_new_action_exec(), blender::animrig::tests::TEST_F(), and blender::animrig::tests::TEST_F().
| void blender::animrig::Action::layer_keystrip_ensure | ( | ) |
Ensure that there is at least one layer with the infinite keyframe strip.
Definition at line 303 of file animrig/intern/action.cc.
References blender::animrig::assert_baklava_phase_1_invariants(), DATA_, is_empty(), Layer, layer(), layer_add(), layers(), and blender::animrig::Layer::strips().
Referenced by blender::animrig::action_channelbag_ensure(), blender::animrig::action_fcurve_attach(), blender::animrig::tests::add_fcurve_to_action(), blender::io::fbx::import_animations(), blender::animrig::move_slot(), blender::animrig::prep_action_layer_for_keying(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), and blender::animrig::tests::TEST_F().
| bool blender::animrig::Action::layer_remove | ( | Layer & | layer_to_remove | ) |
Remove the layer from this Action.
After this call, the passed reference is no longer valid, as the memory will have been freed. Any strips on the layer will be freed too.
Definition at line 288 of file animrig/intern/action.cc.
References find_layer_index(), Layer, bAction::layer_active_index, bAction::layer_array, bAction::layer_array_num, blender::animrig::layer_ptr_destructor(), and blender::dna::array::remove_index().
| blender::Span< Layer * > blender::animrig::Action::layers | ( | ) |
Definition at line 244 of file animrig/intern/action.cc.
References Layer, bAction::layer_array, and bAction::layer_array_num.
| blender::Span< const Layer * > blender::animrig::Action::layers | ( | ) | const |
Definition at line 239 of file animrig/intern/action.cc.
References Layer, bAction::layer_array, and bAction::layer_array_num.
Referenced by blender::bke::action_blend_write(), blender::bke::action_copy_data(), blender::animrig::action_fcurve_detach(), blender::bke::action_free_data(), blender::animrig::assert_baklava_phase_1_invariants(), blender::deg::DepsgraphRelationBuilder::build_animdata_action_targets(), blender::animrig::legacy::channel_groups_all(), blender::animrig::legacy::channelbag_ensure(), blender::animrig::channelbag_for_action_slot(), blender::animrig::evaluate_action(), find_layer_index(), blender::animrig::legacy::first_keyframe_strip(), blender::animrig::foreach_fcurve_in_action(), blender::animrig::foreach_fcurve_in_action_slot(), get_layer_for_keyframing(), layer_keystrip_ensure(), blender::animrig::move_slot(), strip_keyframe_data_remove_if_unused(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), and blender::ed::animrig::update_pose_action_from_scene().
Definition at line 359 of file animrig/intern/action.cc.
References bAction::slot_array.
Definition at line 355 of file animrig/intern/action.cc.
References bAction::slot_array.
Referenced by Action(), blender::bke::action_blend_write(), blender::bke::action_copy_data(), blender::animrig::tests::add_fcurve_to_action(), blender::animrig::nla::assign_action(), blender::animrig::assign_action_ensure_slot_for_keying(), BKE_action_flip_with_pose(), blender::animrig::legacy::channelbag_get(), convert_action_exec(), blender::animrig::legacy::fcurves_first_slot(), find_slot_index(), blender::animrig::generic_slot_for_autoassign(), blender::animrig::get_best_pose_slot_for_id(), rearrange_layered_action_slots(), separate_slots_exec(), slot_active_get(), slot_active_set(), slot_add(), slot_add_for_id(), slot_add_for_id_type(), slot_display_name_define(), slot_display_name_set(), blender::animrig::legacy::slot_ensure(), slot_find_by_identifier(), slot_for_handle(), slot_for_handle(), slot_identifier_define(), slot_identifier_propagate(), slot_identifier_set(), slot_idtype_define(), slot_move_to_index(), slot_setup_for_id(), and blender::animrig::tests::TEST_F().
| Slot * blender::animrig::Action::slot_active_get | ( | ) |
Get the active Slot.
This requires a linear scan of the slots, to find the one with the 'Active' flag set. Storing this on the Slot itself has the advantage that the 'active' status of a Slot can be determined without requiring access to the owning Action.
As this already does a linear scan for the active slot, the slot is returned as a pointer; obtaining the pointer from a handle would require another linear scan to get the pointer, whereas obtaining the handle from the pointer is a constant operation.
Definition at line 616 of file animrig/intern/action.cc.
| void blender::animrig::Action::slot_active_set | ( | slot_handle_t | slot_handle | ) |
Set the active Slot, ensuring only one Slot is flagged as the Active one.
| slot_handle | if #Slot::unassigned, there will not be any active slot. Passing an unknown/invalid slot handle will result in no slot being active. |
Definition at line 609 of file animrig/intern/action.cc.
References slot(), and slots().
Referenced by click_select_channel_action_slot(), and mouse_action_keys().
| Slot & blender::animrig::Action::slot_add | ( | ) |
Create a new Slot.
This method should generally not be used outside of low-level code and legacy action versioning code, because it creates a Slot with an unspecified intended ID type, which should be avoided. Prefer slot_add_for_id_type() and slot_add_for_id() for adding new slots.
TODO: we should probably rename this method to make it clear that it shouldn't be used as the standard way to add a slot.
The slot is given a default name and will be suitable for any ID type. After assigning the slot to an ID, it will be changed to only be suitable for that ID's type.
Definition at line 503 of file animrig/intern/action.cc.
References ARRAY_SIZE, BLI_strncpy_utf8(), DATA_, blender::animrig::grow_array_and_append(), bAction::idroot, slot(), bAction::slot_array, bAction::slot_array_num, blender::animrig::slot_identifier_ensure_unique(), and STRNCPY_UTF8.
Referenced by blender::animrig::tests::add_fcurve_to_action(), blender::animrig::versioning::convert_legacy_animato_action(), blender::animrig::convert_to_layered_action(), blender::animrig::duplicate_slot(), blender::animrig::move_slot(), slot_add_for_id(), slot_add_for_id_type(), blender::animrig::legacy::slot_ensure(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), and blender::animrig::tests::TEST_F().
Create a new, unused Slot suitable for the given ID.
The slot will be named after animated_id.adt.last_slot_identifier, defaulting to the ID's name when that is not set. This is done so that toggling Actions works transparently, when toggling between this and the Action last assigned to the ID.
The slot will only be suitable for the ID's type.
Note that this assigns neither this Action nor the new Slot to the ID. This function merely initializes the Slot itself to suitable values to start animating this ID.
Definition at line 542 of file animrig/intern/action.cc.
References BKE_animdata_from_id(), GS, ActionSlot::idtype, blender::StringRefBase::is_empty(), AnimData::last_slot_identifier, ID::name, slot(), slot_add(), and slot_identifier_define().
Referenced by blender::animrig::assign_action_ensure_slot_for_keying(), BKE_animdata_transfer_by_basepath(), blender::ed::animrig::extract_pose(), blender::bke::greasepencil::convert::AnimDataConvertor::fcurves_convert_finalize(), and blender::animrig::tests::TEST_F().
Create a new, unused Slot for the given ID type.
The returned slot will only be suitable for the specified ID type.
Definition at line 527 of file animrig/intern/action.cc.
References ARRAY_SIZE, BLI_strncpy_utf8(), DATA_, ActionSlot::idtype, slot(), slot_add(), and blender::animrig::slot_identifier_ensure_unique().
Referenced by blender::io::fbx::import_animations().
| void blender::animrig::Action::slot_display_name_define | ( | Slot & | slot, |
| StringRefNull | new_display_name ) |
Set the slot display name (the part of the identifier after the two-letter ID prefix), and ensure the resulting identifier is unique.
This has to be done on the Action level to ensure each slot has a unique identifier within the Action.
Definition at line 409 of file animrig/intern/action.cc.
References ARRAY_SIZE, BLI_assert_msg, BLI_strncpy_utf8(), blender::StringRefNull::c_str(), blender::StringRefBase::size(), size(), slot(), and blender::animrig::slot_identifier_ensure_unique().
Referenced by slot_display_name_set(), and blender::animrig::legacy::slot_ensure().
| void blender::animrig::Action::slot_display_name_set | ( | Main & | bmain, |
| Slot & | slot, | ||
| StringRefNull | new_display_name ) |
Set the slot display name (the part of the identifier after the two-letter ID prefix), ensure the resulting identifier is unique, and propagate the new identifier to all data-blocks that use it
This has to be done on the Action level to ensure each slot has a unique identifier within the Action.
Definition at line 403 of file animrig/intern/action.cc.
References slot(), slot_display_name_define(), and slot_identifier_propagate().
| Slot * blender::animrig::Action::slot_find_by_identifier | ( | StringRefNull | slot_identifier | ) |
Return the slot in this action with the given identifier, if any.
Definition at line 479 of file animrig/intern/action.cc.
References blender::StringRefNull::c_str(), slot(), slots(), and STREQ.
Referenced by blender::animrig::generic_slot_for_autoassign().
| Slot * blender::animrig::Action::slot_for_handle | ( | slot_handle_t | handle | ) |
Return the Slot with the given handle.
| handle | can be Slot::unassigned, in which case nullptr is returned. |
Definition at line 364 of file animrig/intern/action.cc.
References Action(), slot(), and slot_for_handle().
Referenced by acf_fcurve_name(), achannel_is_part_of_disconnected_slot(), blender::animrig::action_fcurve_attach(), blender::animrig::action_slot_get_id_for_keying(), action_slot_summary_to_keylist(), ANIM_animchannel_keyframes_loop(), animfilter_action(), blender::animrig::assign_action_ensure_slot_for_keying(), blender::animrig::nla::assign_action_slot_handle(), BKE_nla_tweakmode_enter(), BKE_nla_tweakmode_exit(), blender::deg::DepsgraphRelationBuilder::build_animdata_action_targets(), blender::animrig::delete_keyframe(), blender::ed::outliner::TreeElementIDAction::expand(), blender::animrig::fcurve_find_by_rna_path(), blender::animrig::generic_assign_action_slot(), blender::animrig::get_action_slot_pair(), merge_actions_selection_exec(), blender::ed::animation::pastebuf_find_matching_copybuf_item(), blender::animrig::internal::rebuild_slot_user_cache(), slot_for_handle(), blender::ed::object::test_constraint(), and blender::animrig::tests::TEST_F().
| const Slot * blender::animrig::Action::slot_for_handle | ( | slot_handle_t | handle | ) | const |
Definition at line 370 of file animrig/intern/action.cc.
References slot(), slots(), and blender::animrig::Slot::unassigned.
| void blender::animrig::Action::slot_identifier_define | ( | Slot & | slot, |
| StringRefNull | new_identifier ) |
Set the slot identifier, and ensure it is unique.
Definition at line 439 of file animrig/intern/action.cc.
References BLI_assert_msg, blender::StringRefNull::c_str(), blender::animrig::Slot::identifier_length_min, size(), slot(), blender::animrig::slot_identifier_ensure_unique(), and STRNCPY_UTF8.
Referenced by blender::animrig::versioning::convert_legacy_animato_action(), blender::io::fbx::import_animations(), slot_add_for_id(), slot_identifier_set(), and blender::animrig::tests::TEST_F().
Update the AnimData::last_slot_identifier field of any ID that is animated by this Slot.
Should be called after slot_identifier_define(slot). This is implemented as a separate function due to the need to access bmain, which is available in the RNA on-property-update handler, but not in the RNA property setter.
Definition at line 448 of file animrig/intern/action.cc.
References AnimData::action, BKE_animdata_from_id(), FOREACH_MAIN_LISTBASE_BEGIN, FOREACH_MAIN_LISTBASE_END, FOREACH_MAIN_LISTBASE_ID_BEGIN, FOREACH_MAIN_LISTBASE_ID_END, bAction::id, id_can_have_animdata(), AnimData::last_slot_identifier, slot(), AnimData::slot_handle, and STRNCPY_UTF8.
Referenced by slot_display_name_set(), and slot_identifier_set().
| void blender::animrig::Action::slot_identifier_set | ( | Main & | bmain, |
| Slot & | slot, | ||
| StringRefNull | new_identifier ) |
Set the slot identifier, ensure it is unique, and propagate the new identifier to all data-blocks that use it.
This has to be done on the Action level to ensure each slot has a unique identifier within the Action.
Definition at line 428 of file animrig/intern/action.cc.
References slot(), slot_identifier_define(), and slot_identifier_propagate().
Referenced by convert_action_exec().
Set the slot's target ID type, updating the identifier prefix to match and ensuring that the resulting identifier is unique.
This has to be done on the Action level to ensure each slot has a unique identifier within the Action.
Definition at line 421 of file animrig/intern/action.cc.
References slot(), and blender::animrig::slot_identifier_ensure_unique().
| void blender::animrig::Action::slot_move_to_index | ( | Slot & | slot, |
| int | to_slot_index ) |
Move the given slot to position to_slot_index among the slots of the action.
slot must belong to this action, and to_slot_index must be a valid index in the slot array.
Definition at line 598 of file animrig/intern/action.cc.
References blender::animrig::array_shift_range(), BLI_assert, BLI_assert_msg, slot(), bAction::slot_array, bAction::slot_array_num, and slots().
Referenced by rearrange_layered_action_slots().
| bool blender::animrig::Action::slot_remove | ( | Slot & | slot_to_remove | ) |
Remove a slot, and ALL animation data that belongs to it.
After this call, the reference is no longer valid as the slot will have been freed.
Note that this does NOT unassign this slot from all its users. When the Action is linked into another file, that other file cannot be updated, and so missing slots are something that has to be handled anyway. Also any new slot on this Action will NOT reuse this slot's handle.
Definition at line 576 of file animrig/intern/action.cc.
References find_slot_index(), ActionSlot::handle, blender::dna::array::remove_index(), bAction::slot_array, bAction::slot_array_num, blender::animrig::slot_ptr_destructor(), and strip_keyframe_data().
Referenced by animchannels_delete_containers(), and blender::animrig::move_slot().
Set the slot's ID type to that of the animated ID, ensure the identifier prefix is set accordingly, and that the identifier is unique within the Action.
This is a low-level function, and shouldn't be called directly outside of the generic slot-assignment functions.
Definition at line 718 of file animrig/intern/action.cc.
References BLI_assert, GS, ID_IS_EDITABLE, ID_IS_OVERRIDE_LIBRARY, ID::name, and slot().
Referenced by Action(), and blender::animrig::generic_assign_action_slot().
| blender::Span< Slot * > blender::animrig::Action::slots | ( | ) |
Definition at line 351 of file animrig/intern/action.cc.
References bAction::slot_array, and bAction::slot_array_num.
| blender::Span< const Slot * > blender::animrig::Action::slots | ( | ) | const |
Definition at line 347 of file animrig/intern/action.cc.
References bAction::slot_array, and bAction::slot_array_num.
Referenced by blender::bke::action_blend_write(), blender::bke::action_copy_data(), blender::bke::action_foreach_id(), blender::bke::action_free_data(), animfilter_action_slots(), blender::animrig::nla::assign_action(), blender::animrig::assign_action_ensure_slot_for_keying(), blender::animrig::legacy::channelbag_get(), convert_action_exec(), do_versions_after_linking_450(), blender::animrig::duplicate_slot(), blender::ed::outliner::TreeElementIDAction::expand(), blender::animrig::legacy::fcurves_first_slot(), find_slot_index(), blender::animrig::generic_assign_action_slot(), blender::animrig::generic_slot_for_autoassign(), blender::animrig::move_slot(), rearrange_layered_action_slots(), blender::animrig::internal::rebuild_slot_user_cache(), slot_active_get(), slot_active_set(), blender::animrig::legacy::slot_ensure(), slot_find_by_identifier(), slot_for_handle(), blender::animrig::slot_identifier_ensure_unique(), slot_move_to_index(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), and blender::animrig::tests::TEST_F().
| Span< StripKeyframeData * > blender::animrig::Action::strip_keyframe_data | ( | ) |
Definition at line 691 of file animrig/intern/action.cc.
References bAction::strip_keyframe_data_array, and bAction::strip_keyframe_data_array_num.
| Span< const StripKeyframeData * > blender::animrig::Action::strip_keyframe_data | ( | ) | const |
Strip data array access.
Definition at line 682 of file animrig/intern/action.cc.
References bAction::strip_keyframe_data_array, and bAction::strip_keyframe_data_array_num.
Referenced by blender::bke::action_blend_write(), blender::bke::action_copy_data(), blender::bke::action_free_data(), blender::animrig::Strip::data(), blender::animrig::Strip::data(), slot_remove(), blender::animrig::tests::TEST_F(), and blender::ed::animrig::update_pose_action_from_scene().
|
protected |
Append the given StripKeyframeData item to the action's keyframe data array.
Note: this takes ownership of strip_data.
Definition at line 636 of file animrig/intern/action.cc.
References BLI_assert, blender::animrig::grow_array_and_append(), bAction::strip_keyframe_data_array, and bAction::strip_keyframe_data_array_num.
Referenced by blender::animrig::Strip::create().
|
protected |
Remove the keyframe strip data at index if it is no longer used anywhere in the action.
If the strip data is unused, it is both removed from the array and freed. Otherwise no changes are made and the action remains as-is.
Note: this may alter the indices of some strip data items, due to items shifting around to fill the gap left by the removed item. This method ensures that all indices stored within the action (e.g. in the strips themselves) are properly updated to the new values so that everything is still referencing the same data. However, if any indices are stored outside the action, they will no longer be valid.
Definition at line 646 of file animrig/intern/action.cc.
References BLI_assert, Layer, layer(), layers(), blender::animrig::shrink_array_and_swap_remove(), Strip, bAction::strip_keyframe_data_array, and bAction::strip_keyframe_data_array_num.
Referenced by blender::animrig::Layer::strip_remove().
|
protected |
Definition at line 477 of file ANIM_action.hh.
Referenced by Action(), find_layer_index(), get_layer_for_keyframing(), layer(), layer(), layer_add(), layer_keystrip_ensure(), layer_remove(), layers(), layers(), and strip_keyframe_data_remove_if_unused().
|
protected |
Definition at line 476 of file ANIM_action.hh.
Referenced by strip_keyframe_data_remove_if_unused().