[Bf-blender-cvs] [c6f975e3e58] master: Better support for (mirrored) bbone scaling in pose mode

Philipp Oeser noreply at git.blender.org
Mon May 13 20:11:56 CEST 2019


Commit: c6f975e3e58996cfdeec56741ea652e3f06f9b25
Author: Philipp Oeser
Date:   Mon May 13 13:16:22 2019 +0200
Branches: master
https://developer.blender.org/rBc6f975e3e58996cfdeec56741ea652e3f06f9b25

Better support for (mirrored) bbone scaling in pose mode

since own rB5d9d32fd1fa3 (mirror bbone scaling in editmode)
- bbone scaling in posemode was missing immediate updates
- bbone scaling in posemode could crash

This now properly supports mirroring in posemode as well.
note: for bbone scaling, I made both X-Axis-Mirror options (editmode
option as well as posemode option) valid.

Fixes T64091

Reviewers: brecht

Maniphest Tasks: T64091

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

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

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

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

diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index ddd8a1d19e4..758551be0b5 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -800,6 +800,10 @@ static void pose_transform_mirror_update(Object *ob, PoseInitData_Mirror *pid)
       bPoseChannel *pchan = BKE_pose_channel_get_mirrored(ob->pose, pchan_orig->name);
 
       if (pchan) {
+        /* also do bbone scaling */
+        pchan->bone->xwidth = pchan_orig->bone->xwidth;
+        pchan->bone->zwidth = pchan_orig->bone->zwidth;
+
         /* we assume X-axis flipping for now */
         pchan->curve_in_x = pchan_orig->curve_in_x * -1;
         pchan->curve_out_x = pchan_orig->curve_out_x * -1;
@@ -1014,12 +1018,22 @@ static void recalcData_objects(TransInfo *t)
     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);
+      if (ob->mode == OB_MODE_EDIT) {
+        if (arm->flag & ARM_MIRROR_EDIT) {
+          if (t->state != TRANS_CANCEL) {
+            ED_armature_edit_transform_mirror_update(ob);
+          }
+          else {
+            restoreBones(tc);
+          }
         }
-        else {
-          restoreBones(tc);
+      }
+      else if (ob->mode == OB_MODE_POSE) {
+        /* actually support TFM_BONESIZE in posemode as well */
+        DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
+        bPose *pose = ob->pose;
+        if (arm->flag & ARM_MIRROR_EDIT || pose->flag & POSE_MIRROR_EDIT) {
+          pose_transform_mirror_update(ob, NULL);
         }
       }
     }



More information about the Bf-blender-cvs mailing list