[Bf-blender-cvs] [5cd3428] master: Transform: no need to store distance to snap point

Campbell Barton noreply at git.blender.org
Mon Jan 18 04:08:41 CET 2016


Commit: 5cd34282201f54b0c9480e57d40bce013a6af9e2
Author: Campbell Barton
Date:   Mon Jan 18 13:15:38 2016 +1100
Branches: master
https://developer.blender.org/rB5cd34282201f54b0c9480e57d40bce013a6af9e2

Transform: no need to store distance to snap point

Compare squared distance to snap target since the value is only ever used for comparison.

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

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

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

diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 39b137f..f6b4d7d 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -90,12 +90,16 @@ typedef struct TransSnap {
 	char	snapNodeBorder;
 	ListBase points;
 	TransSnapPoint	*selectedPoint;
-	float	dist; // Distance from snapPoint to snapTarget
 	double	last;
 	void  (*applySnap)(struct TransInfo *, float *);
 	void  (*calcSnap)(struct TransInfo *, float *);
 	void  (*targetSnap)(struct TransInfo *);
-	/* Get the transform distance between two points (used by Closest snap) */
+	/**
+	 * Get the transform distance between two points (used by Closest snap)
+	 *
+	 * \note Return value can be anything,
+	 * where the smallest absolute value defines whats closest.
+	 */
 	float  (*distance)(struct TransInfo *, const float p1[3], const float p2[3]);
 } TransSnap;
 
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index ea07193..ed48478 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -823,7 +823,7 @@ static void ApplySnapResize(TransInfo *t, float vec[3])
 
 static float TranslationBetween(TransInfo *UNUSED(t), const float p1[3], const float p2[3])
 {
-	return len_v3v3(p1, p2);
+	return len_squared_v3v3(p1, p2);
 }
 
 static float RotationBetween(TransInfo *t, const float p1[3], const float p2[3])
@@ -1157,6 +1157,7 @@ static void TargetSnapClosest(TransInfo *t)
 {
 	// Only valid if a snap point has been selected
 	if (t->tsnap.status & POINT_INIT) {
+		float dist_closest = 0.0f;
 		TransData *closest = NULL, *td = NULL;
 		
 		/* Object mode */
@@ -1179,11 +1180,11 @@ static void TargetSnapClosest(TransInfo *t)
 						dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint);
 
 						if ((dist != TRANSFORM_DIST_INVALID) &&
-						    (closest == NULL || fabsf(dist) < fabsf(t->tsnap.dist)))
+						    (closest == NULL || fabsf(dist) < fabsf(dist_closest)))
 						{
 							copy_v3_v3(t->tsnap.snapTarget, loc);
 							closest = td;
-							t->tsnap.dist = dist; 
+							dist_closest = dist;
 						}
 					}
 				}
@@ -1197,11 +1198,10 @@ static void TargetSnapClosest(TransInfo *t)
 					dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint);
 
 					if ((dist != TRANSFORM_DIST_INVALID) &&
-					    (closest == NULL || fabsf(dist) < fabsf(t->tsnap.dist)))
+					    (closest == NULL || fabsf(dist) < fabsf(dist_closest)))
 					{
 						copy_v3_v3(t->tsnap.snapTarget, loc);
 						closest = td;
-						t->tsnap.dist = dist; 
 					}
 				}
 			}
@@ -1222,11 +1222,11 @@ static void TargetSnapClosest(TransInfo *t)
 				dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint);
 				
 				if ((dist != TRANSFORM_DIST_INVALID) &&
-				    (closest == NULL || fabsf(dist) < fabsf(t->tsnap.dist)))
+				    (closest == NULL || fabsf(dist) < fabsf(dist_closest)))
 				{
 					copy_v3_v3(t->tsnap.snapTarget, loc);
 					closest = td;
-					t->tsnap.dist = dist; 
+					dist_closest = dist;
 				}
 			}
 		}




More information about the Bf-blender-cvs mailing list