diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-01-18 05:15:38 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-01-18 06:01:20 +0300 |
commit | 5cd34282201f54b0c9480e57d40bce013a6af9e2 (patch) | |
tree | ef020af46da9b70ff5a2231dfccaac6a1ae3e017 /source | |
parent | 8573c1a84728546e949ced6e6f198afd16ac4dc4 (diff) |
Transform: no need to store distance to snap point
Compare squared distance to snap target since the value is only ever used for comparison.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/transform/transform.h | 8 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 14 |
2 files changed, 13 insertions, 9 deletions
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 39b137fb5f3..f6b4d7da57f 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 ea07193b85b..ed48478246f 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; } } } |