[Bf-blender-cvs] [5ba41bea8a7] blender-v2.81-release: Fix autokeyframe not working on bones mirrored bones

Sebastian Parborg noreply at git.blender.org
Mon Oct 14 18:16:37 CEST 2019


Commit: 5ba41bea8a742b5e139eba29f8edc2c422b70ef1
Author: Sebastian Parborg
Date:   Mon Oct 14 17:46:28 2019 +0200
Branches: blender-v2.81-release
https://developer.blender.org/rB5ba41bea8a742b5e139eba29f8edc2c422b70ef1

Fix autokeyframe not working on bones mirrored bones

The previous code for this didn't work as the MIRROR bone flag would be
cleared before the autokeyframe code was run.

===================================================================

M	source/blender/editors/transform/transform_convert.c
M	source/blender/editors/transform/transform_generics.c

===================================================================

diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c
index 5862faaf667..64ad8b2091e 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -429,7 +429,7 @@ static void bone_children_clear_transflag(int mode, short around, ListBase *lb)
       bone->flag |= BONE_TRANSFORM_CHILD;
     }
     else {
-      bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
+      bone->flag &= ~BONE_TRANSFORM;
     }
 
     bone_children_clear_transflag(mode, around, &bone->childbase);
@@ -455,14 +455,14 @@ int count_set_pose_transflags(Object *ob,
         bone->flag |= BONE_TRANSFORM;
       }
       else {
-        bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
+        bone->flag &= ~BONE_TRANSFORM;
       }
 
       bone->flag &= ~BONE_HINGE_CHILD_TRANSFORM;
       bone->flag &= ~BONE_TRANSFORM_CHILD;
     }
     else {
-      bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
+      bone->flag &= ~BONE_TRANSFORM;
     }
   }
 
@@ -1542,8 +1542,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 | BONE_TRANSFORM_MIRROR)) {
-
+      if ((pchan->bone->flag & BONE_TRANSFORM) ||
+          ((pose->flag & POSE_MIRROR_EDIT) && (pchan->bone->flag & BONE_TRANSFORM_MIRROR))) {
         ListBase dsources = {NULL, NULL};
 
         /* clear any 'unkeyed' flag it may have */
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 7ff25509347..2e4f4344481 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -792,6 +792,12 @@ static void pose_transform_mirror_update(Object *ob, PoseInitData_Mirror *pid)
   unit_m4(flip_mtx);
   flip_mtx[0][0] = -1;
 
+  for (bPoseChannel *pchan_orig = ob->pose->chanbase.first; pchan_orig;
+       pchan_orig = pchan_orig->next) {
+    /* Clear the MIRROR flag from previous runs */
+    pchan_orig->bone->flag &= ~BONE_TRANSFORM_MIRROR;
+  }
+
   for (bPoseChannel *pchan_orig = ob->pose->chanbase.first; pchan_orig;
        pchan_orig = pchan_orig->next) {
     /* no layer check, correct mirror is more important */



More information about the Bf-blender-cvs mailing list