No functional changes. Move the following keyframing functions to the animrig folder * `insert_keyframe_direct` * `insert_keyframe` * `delete_keyframe` * `clear_keyframe` In order to disentangle the code I had to move the following as well * `delete_keyframe_fcurve` * `visualkey_can_use` * `visualkey_get_values` In order to sort the functions I made 3 files (and their header counterparts) * fcurve.cc * keyframing.cc * visualkey.cc The following functions I made public so they won't get duplicated * `update_autoflags_fcurve_direct` * `ANIM_setting_get_rna_values` There are public keyframing functions that I left in the editors/animation/keyframing.cc file I'd like to limit the scope of this refactor, and then clean up the moved functions before moving even more over Part of #113278 Pull Request: https://projects.blender.org/blender/blender/pulls/113503
43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
/* SPDX-FileCopyrightText: 2023 Blender Foundation
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup animrig
|
|
*/
|
|
|
|
#include "ANIM_fcurve.hh"
|
|
#include "BKE_fcurve.h"
|
|
#include "DNA_anim_types.h"
|
|
#include "ED_anim_api.hh"
|
|
|
|
namespace blender::animrig {
|
|
|
|
/**
|
|
* \note caller needs to run #BKE_nla_tweakedit_remap to get NLA relative frame.
|
|
* caller should also check #BKE_fcurve_is_protected before keying.
|
|
*/
|
|
bool delete_keyframe_fcurve(AnimData *adt, FCurve *fcu, float cfra)
|
|
{
|
|
bool found;
|
|
int i;
|
|
|
|
/* try to find index of beztriple to get rid of */
|
|
i = BKE_fcurve_bezt_binarysearch_index(fcu->bezt, cfra, fcu->totvert, &found);
|
|
if (found) {
|
|
/* delete the key at the index (will sanity check + do recalc afterwards) */
|
|
BKE_fcurve_delete_key(fcu, i);
|
|
BKE_fcurve_handles_recalc(fcu);
|
|
|
|
/* Only delete curve too if it won't be doing anything anymore */
|
|
if (BKE_fcurve_is_empty(fcu)) {
|
|
ANIM_fcurve_delete_from_animdata(nullptr, adt, fcu);
|
|
}
|
|
|
|
/* return success */
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
} // namespace blender::animrig
|