diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-01-29 19:11:34 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-01-29 19:14:21 +0400 |
commit | 1e0654f162afdc75c4e4286e2bd8d276fe668f78 (patch) | |
tree | 228f154fddfe3bdc7c68bf1ed0ee67a2c5f0c84d /source/blender/editors/transform | |
parent | 41ee052a45e897975134750fd685e447bb1b3b2e (diff) |
Fix T38393: bone roll not restored properly after cancelling rotation of bones.
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 2 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 31 |
2 files changed, 21 insertions, 12 deletions
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 47bd52755a7..9be83bffc5b 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -1197,6 +1197,7 @@ static void createTransArmatureVerts(TransInfo *t) if ((ebo->flag & BONE_ROOTSEL) == 0) { td->extra = ebo; + td->ival = ebo->roll; } td->ext = NULL; @@ -1219,6 +1220,7 @@ static void createTransArmatureVerts(TransInfo *t) ED_armature_ebone_to_mat3(ebo, td->axismtx); td->extra = ebo; /* to fix roll */ + td->ival = ebo->roll; td->ext = NULL; td->val = NULL; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 55ecc53fd01..8bf3e6583ec 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -806,21 +806,28 @@ static void recalcData_view3d(TransInfo *t) float roll; ebo = td->extra; - copy_v3_v3(up_axis, td->axismtx[2]); - - if (t->mode != TFM_ROTATION) { - sub_v3_v3v3(vec, ebo->tail, ebo->head); - normalize_v3(vec); - rotation_between_vecs_to_quat(qrot, td->axismtx[1], vec); - mul_qt_v3(qrot, up_axis); + + if (t->state == TRANS_CANCEL) { + /* restore roll */ + ebo->roll = td->ival; } else { - mul_m3_v3(t->mat, up_axis); + copy_v3_v3(up_axis, td->axismtx[2]); + + if (t->mode != TFM_ROTATION) { + sub_v3_v3v3(vec, ebo->tail, ebo->head); + normalize_v3(vec); + rotation_between_vecs_to_quat(qrot, td->axismtx[1], vec); + mul_qt_v3(qrot, up_axis); + } + else { + mul_m3_v3(t->mat, up_axis); + } + + /* roll has a tendency to flip in certain orientations - [#34283], [#33974] */ + roll = ED_rollBoneToVector(ebo, up_axis, false); + ebo->roll = angle_compat_rad(roll, ebo->roll); } - - /* roll has a tendency to flip in certain orientations - [#34283], [#33974] */ - roll = ED_rollBoneToVector(ebo, up_axis, false); - ebo->roll = angle_compat_rad(roll, ebo->roll); } } } |