[Bf-blender-cvs] [5d9d32fd1fa] master: Fix T63841: armature with X-axis mirror does not mirror bbone scale

Philipp Oeser noreply at git.blender.org
Wed Apr 24 22:46:08 CEST 2019


Commit: 5d9d32fd1fa3aef6aa207246184aa2c617478faf
Author: Philipp Oeser
Date:   Wed Apr 24 15:42:06 2019 +0200
Branches: master
https://developer.blender.org/rB5d9d32fd1fa3aef6aa207246184aa2c617478faf

Fix T63841: armature with X-axis mirror does not mirror bbone scale

Reviewers: brecht

Maniphest Tasks: T63841

Differential Revision: https://developer.blender.org/D4733

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

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

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

diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index e4f2adff77d..2b74f3849f7 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -1325,10 +1325,18 @@ static void createTransPose(TransInfo *t)
 
 void restoreBones(TransDataContainer *tc)
 {
-  bArmature *arm = tc->obedit->data;
+  bArmature *arm;
   BoneInitData *bid = tc->custom.type.data;
   EditBone *ebo;
 
+  if (tc->obedit) {
+    arm = tc->obedit->data;
+  }
+  else {
+    BLI_assert(tc->poseobj != NULL);
+    arm = tc->poseobj->data;
+  }
+
   while (bid->bone) {
     ebo = bid->bone;
 
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index e816f4b31ff..5f4311f68eb 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -968,6 +968,23 @@ static void recalcData_objects(TransInfo *t)
       }
     }
   }
+  else if (t->flag & T_POSE && (t->mode == TFM_BONESIZE)) {
+    /* Handle the exception where for TFM_BONESIZE in edit mode we pretend to be
+     * in pose mode (to use bone orientation matrix),
+     * in that case we have to do mirroring as well. */
+    FOREACH_TRANS_DATA_CONTAINER (t, tc) {
+      Object *ob = tc->poseobj;
+      bArmature *arm = ob->data;
+      if (arm->flag & ARM_MIRROR_EDIT) {
+        if (t->state != TRANS_CANCEL) {
+          ED_armature_edit_transform_mirror_update(ob);
+        }
+        else {
+          restoreBones(tc);
+        }
+      }
+    }
+  }
   else if (t->flag & T_POSE) {
     GSet *motionpath_updates = BLI_gset_ptr_new("motionpath updates");



More information about the Bf-blender-cvs mailing list