Fix T64533: Using "X-Axis Mirror" while posing with auto keyframe on does not keyframe the mirrored bone

Use an additional pose bone flag so we can keep track of mirrored bones that should be autokeyframed.

Reviewed By: Brecht

Differential Revision: https://developer.blender.org/D5033
This commit is contained in:
2019-06-06 15:52:52 +02:00
parent 3a20c056e8
commit 93ec2c94e5
3 changed files with 10 additions and 4 deletions

View File

@@ -812,7 +812,7 @@ static void bone_children_clear_transflag(int mode, short around, ListBase *lb)
bone->flag |= BONE_TRANSFORM_CHILD;
}
else {
bone->flag &= ~BONE_TRANSFORM;
bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
}
bone_children_clear_transflag(mode, around, &bone->childbase);
@@ -838,14 +838,14 @@ int count_set_pose_transflags(Object *ob,
bone->flag |= BONE_TRANSFORM;
}
else {
bone->flag &= ~BONE_TRANSFORM;
bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
}
bone->flag &= ~BONE_HINGE_CHILD_TRANSFORM;
bone->flag &= ~BONE_TRANSFORM_CHILD;
}
else {
bone->flag &= ~BONE_TRANSFORM;
bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
}
}
@@ -6778,7 +6778,8 @@ void autokeyframe_pose(bContext *C, Scene *scene, Object *ob, int tmode, short t
}
for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) {
if (pchan->bone->flag & BONE_TRANSFORM) {
if (pchan->bone->flag & (BONE_TRANSFORM | BONE_TRANSFORM_MIRROR)) {
ListBase dsources = {NULL, NULL};
/* clear any 'unkeyed' flag it may have */

View File

@@ -819,6 +819,9 @@ static void pose_transform_mirror_update(Object *ob, PoseInitData_Mirror *pid)
pid++;
}
BKE_pchan_apply_mat4(pchan, pchan_mtx_final, false);
/* set flag to let autokeyframe know to keyframe the mirrred bone */
pchan->bone->flag |= BONE_TRANSFORM_MIRROR;
}
}
}

View File

@@ -249,6 +249,8 @@ typedef enum eBone_Flag {
BONE_RELATIVE_PARENTING = (1 << 23),
/** it will add the parent end roll to the inroll */
BONE_ADD_PARENT_END_ROLL = (1 << 24),
/** this bone was transformed by the mirror function */
BONE_TRANSFORM_MIRROR = (1 << 25),
} eBone_Flag;