Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorPhilipp Oeser <info@graphics-engineer.com>2019-04-24 16:42:06 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2019-04-24 23:29:17 +0300
commit5d9d32fd1fa3aef6aa207246184aa2c617478faf (patch)
treeacf2f51549e70e8eaf9fd24cedc3446bb5ab09d5 /source
parenta14735d11d2e16f24f63513d58b1d95864bdf27f (diff)
Fix T63841: armature with X-axis mirror does not mirror bbone scale
Reviewers: brecht Maniphest Tasks: T63841 Differential Revision: https://developer.blender.org/D4733
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/transform/transform_conversions.c10
-rw-r--r--source/blender/editors/transform/transform_generics.c17
2 files changed, 26 insertions, 1 deletions
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");