[Bf-blender-cvs] [a6a9a12e8f3] master: Fix T75142: No autokeying with pose mode X-Mirror

Sybren A. Stüvel noreply at git.blender.org
Mon Mar 30 13:36:45 CEST 2020


Commit: a6a9a12e8f32058a52d88a4846db906782f0cafe
Author: Sybren A. Stüvel
Date:   Mon Mar 30 13:06:09 2020 +0200
Branches: master
https://developer.blender.org/rBa6a9a12e8f32058a52d88a4846db906782f0cafe

Fix T75142: No autokeying with pose mode X-Mirror

This was caused by the removal of some `BONE_TRANSFORM_MIRROR` flag
handling in rBde530a95dc7b482dc22c933b9b8b2a98c79b5663. I simply
restored those lines that caused this issue.

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

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

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

diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c
index 04ab9e04439..1049db74a75 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -459,15 +459,20 @@ int count_set_pose_transflags(Object *ob,
 
   for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
     bone = pchan->bone;
-    bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
     if (PBONE_VISIBLE(arm, bone)) {
       if ((bone->flag & BONE_SELECTED)) {
         bone->flag |= BONE_TRANSFORM;
       }
+      else {
+        bone->flag &= ~BONE_TRANSFORM;
+      }
 
       bone->flag &= ~BONE_HINGE_CHILD_TRANSFORM;
       bone->flag &= ~BONE_TRANSFORM_CHILD;
     }
+    else {
+      bone->flag &= ~BONE_TRANSFORM;
+    }
   }
 
   /* make sure no bone can be transformed when a parent is transformed */
diff --git a/source/blender/editors/transform/transform_convert_armature.c b/source/blender/editors/transform/transform_convert_armature.c
index 4e8e0cc2369..53dd54d4b53 100644
--- a/source/blender/editors/transform/transform_convert_armature.c
+++ b/source/blender/editors/transform/transform_convert_armature.c
@@ -530,6 +530,12 @@ void pose_transform_mirror_update(TransInfo *t, TransDataContainer *tc, Object *
   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;
+  }
+
   bPose *pose = ob->pose;
   PoseInitData_Mirror *pid = NULL;
   if ((t->mode != TFM_BONESIZE) && (pose->flag & POSE_MIRROR_RELATIVE)) {
@@ -565,6 +571,9 @@ void pose_transform_mirror_update(TransInfo *t, TransDataContainer *tc, Object *
     }
     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;
+
     /* In this case we can do target-less IK grabbing. */
     if (t->mode == TFM_TRANSLATION) {
       bKinematicConstraint *data = has_targetless_ik(pchan);



More information about the Bf-blender-cvs mailing list