27 return scene->
adt !=
nullptr && scene->
adt->
action !=
nullptr &&
39 fcurve,
"sequence_editor.strips_all[", strip.
name + 2);
50 return fcurve_matches(*strip, fcurve);
53 for (
FCurve *fcu : fcurves) {
56 for (
i = 0;
i < fcu->totvert;
i++) {
58 bezt->
vec[0][0] += ofs;
59 bezt->
vec[1][0] += ofs;
60 bezt->
vec[2][0] += ofs;
64 for (
i = 0;
i < fcu->totvert;
i++) {
82 return fcurve_matches(*strip, fcurve);
86 for (
FCurve *fcu : fcurves) {
87 action_fcurve_remove(action, *fcu);
96 assert_baklava_phase_1_invariants(action);
120 assert_baklava_phase_1_invariants(action);
158 "SeqAnimationBackup has fcurves for both legacy and layered actions, which "
159 "should never happen.");
163 [&](
const FCurve &fcurve) { return fcurve_matches(*strip, fcurve); });
167 src->
curves, [&](
const FCurve &fcurve) { return fcurve_matches(*strip, fcurve); });
170 for (
const FCurve *fcu : fcurves) {
179 fcu_copy->
grp =
nullptr;
197 src->
drivers, [&](
const FCurve &fcurve) { return fcurve_matches(*strip, fcurve); });
199 for (
const FCurve *fcu : fcurves) {
FCurve * BKE_fcurve_copy(const FCurve *fcu)
#define BLI_assert_msg(a, msg)
void void void BLI_movelisttolist(ListBase *dst, ListBase *src) ATTR_NONNULL(1
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void DEG_id_tag_update(ID *id, unsigned int flags)
bool is_action_legacy() const
blender::Span< const FCurve * > fcurves() const
void action_fcurve_attach(Action &action, slot_handle_t action_slot, FCurve &fcurve_to_attach, std::optional< StringRefNull > group_name)
bool fcurve_matches_collection_path(const FCurve &fcurve, StringRefNull collection_rna_path, StringRefNull data_name)
void channelbag_fcurves_move(Channelbag &channelbag_dst, Channelbag &channelbag_src)
Vector< FCurve * > fcurves_in_listbase_filtered(ListBase fcurves, FunctionRef< bool(const FCurve &fcurve)> predicate)
Vector< FCurve * > fcurves_in_action_slot_filtered(bAction *act, slot_handle_t slot_handle, FunctionRef< bool(const FCurve &fcurve)> predicate)
const animrig::Channelbag * channelbag_for_action_slot(const Action &action, slot_handle_t slot_handle)
Vector< FCurve * > fcurves_in_span_filtered(Span< FCurve * > fcurves, FunctionRef< bool(const FCurve &fcurve)> predicate)
decltype(::ActionSlot::handle) slot_handle_t
static void strip_drivers_duplicate(Strip *strip, AnimData *dst, AnimationBackup *src)
static void strip_animation_duplicate(Strip *strip, animrig::Action &dst, const animrig::slot_handle_t dst_slot_handle, AnimationBackup *src)
bool animation_keyframes_exist(const Scene *scene)
void animation_duplicate_backup_to_scene(Scene *scene, Strip *strip, AnimationBackup *backup)
void offset_animdata(const Scene *scene, Strip *strip, float ofs)
bool animation_drivers_exist(Scene *scene)
void free_animdata(Scene *scene, Strip *strip)
void animation_backup_original(Scene *scene, AnimationBackup *backup)
void animation_restore_original(Scene *scene, AnimationBackup *backup)
bool fcurve_matches(const Strip &strip, const FCurve &fcurve)
blender::animrig::Channelbag channelbag