55 ListBase backups = {
nullptr,
nullptr};
56 const bool is_bone_selection_relevant = !selected_bone_names.
is_empty();
60 auto store_animated_pchans = [&](
FCurve * ,
const char *bone_name) {
61 if (backed_up_bone_names.
contains(bone_name)) {
67 if (pchan ==
nullptr) {
72 if (is_bone_selection_relevant && !selected_bone_names.
contains(bone_name)) {
77 MEM_callocN(
sizeof(*chan_bak),
"PoseChannelBackup"));
78 chan_bak->
pchan = pchan;
79 chan_bak->
olddata = blender::dna::shallow_copy(*chan_bak->
pchan);
86 backed_up_bone_names.
add_new(bone_name);
119 *chan_bak->pchan = blender::dna::shallow_copy(chan_bak->olddata);
121 if (chan_bak->oldprops) {
133 if (chan_bak->oldprops) {
145 ob->
runtime->pose_backup = pose_backup;
150 if (ob->
runtime->pose_backup ==
nullptr) {
159 if (ob->
runtime->pose_backup ==
nullptr) {
164 ob->
runtime->pose_backup =
nullptr;
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
void IDP_FreeProperty(IDProperty *prop)
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_SyncGroupValues(IDProperty *dest, const IDProperty *src) 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)
BoneNameSet BKE_armature_find_selected_bone_names(const bArmature *armature)
blender::Set< std::string > BoneNameSet
void BKE_pose_backup_clear(Object *ob)
PoseBackup * BKE_pose_backup_create_selected_bones(const Object *ob, const bAction *action)
bool BKE_pose_backup_restore_on_object(Object *ob)
bool BKE_pose_backup_is_selection_relevant(const PoseBackup *pose_backup)
void BKE_pose_backup_restore(const PoseBackup *pbd)
static PoseBackup * pose_backup_create(const Object *ob, const bAction *action, const BoneNameSet &selected_bone_names)
void BKE_pose_backup_free(PoseBackup *pbd)
PoseBackup * BKE_pose_backup_create_all_bones(const Object *ob, const bAction *action)
void BKE_pose_backup_create_on_object(Object *ob, const bAction *action)
ObjectRuntimeHandle * runtime
bool is_bone_selection_relevant