From 5d9d32fd1fa3aef6aa207246184aa2c617478faf Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Wed, 24 Apr 2019 15:42:06 +0200 Subject: Fix T63841: armature with X-axis mirror does not mirror bbone scale Reviewers: brecht Maniphest Tasks: T63841 Differential Revision: https://developer.blender.org/D4733 --- .../blender/editors/transform/transform_conversions.c | 10 +++++++++- source/blender/editors/transform/transform_generics.c | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'source') 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"); -- cgit v1.2.3