diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2014-10-30 14:54:05 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2014-10-30 14:56:43 +0300 |
commit | d8094b62e21d0a98c8d3f22631c2c978b2390609 (patch) | |
tree | b64ee3ec0d2352117de9c491a9a4672599d72031 /source/blender/editors/transform | |
parent | c2dc51d8271bc91586ef3c731c3cd7382456d482 (diff) |
Transform: snapping: normal-align: Cleanup!
Use BLI's `rotation_between_vecs_to_mat3` helper instead of own custom code,
both simplifies the code and fixes wrong handling when snapped normal was exactly
opposed to org one (i.e. 180° rot case).
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r-- | source/blender/editors/transform/transform.c | 16 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 11 |
2 files changed, 6 insertions, 21 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index d704f62654b..9547f0bc77f 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4187,29 +4187,21 @@ static void applyTranslationValue(TransInfo *t, float vec[3]) if (td->flag & TD_SKIP) continue; - + /* handle snapping rotation before doing the translation */ if (usingSnappingNormal(t)) { if (validSnappingNormal(t)) { const float *original_normal; - float axis[3]; - float quat[4]; float mat[3][3]; - float angle; /* In pose mode, we want to align normals with Y axis of bones... */ if (t->flag & T_POSE) original_normal = td->axismtx[1]; else original_normal = td->axismtx[2]; - - cross_v3_v3v3(axis, original_normal, t->tsnap.snapNormal); - angle = saacos(dot_v3v3(original_normal, t->tsnap.snapNormal)); - - axis_angle_to_quat(quat, axis, angle); - - quat_to_mat3(mat, quat); - + + rotation_between_vecs_to_mat3(mat, original_normal, t->tsnap.snapNormal); + ElementRotation(t, td, mat, V3D_LOCAL); } else { diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 47b20844294..dcc7024705a 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -341,22 +341,15 @@ void applyProject(TransInfo *t) if (t->tsnap.align && (t->flag & T_OBJECT)) { /* handle alignment as well */ const float *original_normal; - float axis[3]; float mat[3][3]; - float angle; float totmat[3][3], smat[3][3]; - float eul[3], fmat[3][3], quat[4]; + float eul[3], fmat[3][3]; float obmat[3][3]; /* In pose mode, we want to align normals with Y axis of bones... */ original_normal = td->axismtx[2]; - cross_v3_v3v3(axis, original_normal, no); - angle = saacos(dot_v3v3(original_normal, no)); - - axis_angle_to_quat(quat, axis, angle); - - quat_to_mat3(mat, quat); + rotation_between_vecs_to_mat3(mat, original_normal, no); mul_m3_m3m3(totmat, mat, td->mtx); mul_m3_m3m3(smat, td->smtx, totmat); |