[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