[Bf-blender-cvs] [d8094b6] master: Transform: snapping: normal-align: Cleanup!

Bastien Montagne noreply at git.blender.org
Thu Oct 30 13:08:57 CET 2014


Commit: d8094b62e21d0a98c8d3f22631c2c978b2390609
Author: Bastien Montagne
Date:   Thu Oct 30 12:54:05 2014 +0100
Branches: master
https://developer.blender.org/rBd8094b62e21d0a98c8d3f22631c2c978b2390609

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).

===================================================================

M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_snap.c

===================================================================

diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index d704f62..9547f0b 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 47b2084..dcc7024 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);




More information about the Bf-blender-cvs mailing list