45 ListBase backups = {
nullptr,
nullptr};
46 const bool is_bone_selection_relevant = !selected_bone_names.
is_empty();
50 auto store_animated_pchans = [&](
FCurve * ,
const char *bone_name) {
51 if (backed_up_bone_names.
contains(bone_name)) {
57 if (pchan ==
nullptr) {
62 if (is_bone_selection_relevant && !selected_bone_names.
contains(bone_name)) {
67 MEM_callocN(
sizeof(*chan_bak),
"PoseChannelBackup"));
68 chan_bak->
pchan = pchan;
76 backed_up_bone_names.
add_new(bone_name);
109 memcpy(chan_bak->pchan, &chan_bak->olddata,
sizeof(chan_bak->olddata));
111 if (chan_bak->oldprops) {
123 if (chan_bak->oldprops) {
Blender kernel action and pose functionality.
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
void IDP_FreeProperty(struct IDProperty *prop)
void IDP_SyncGroupValues(struct IDProperty *dest, const struct IDProperty *src) ATTR_NONNULL()
struct IDProperty * IDP_CopyProperty(const struct IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
bool contains(const Key &key) const
void add_new(const Key &key)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void BKE_action_find_fcurves_with_bones(const bAction *action, FoundFCurveCallback callback)
blender::Set< std::string > BoneNameSet
BoneNameSet BKE_armature_find_selected_bone_names(const bArmature *armature)
SymEdge< T > * prev(const SymEdge< T > *se)
static PoseBackup * pose_backup_create(const Object *ob, const bAction *action, const BoneNameSet &selected_bone_names)
void ED_pose_backup_free(PoseBackup *pbd)
PoseBackup * ED_pose_backup_create_all_bones(const Object *ob, const bAction *action)
bool ED_pose_backup_is_selection_relevant(const struct PoseBackup *pose_backup)
PoseBackup * ED_pose_backup_create_selected_bones(const Object *ob, const bAction *action)
void ED_pose_backup_restore(const PoseBackup *pbd)
bool is_bone_selection_relevant
struct bPoseChannel * pchan
struct PoseChannelBackup * next
struct IDProperty * oldprops
struct bPoseChannel olddata