forked from bartvdbraak/blender
Use squared dist /w comparisons (mask, edge-slide)
This commit is contained in:
parent
7b7eac9211
commit
7cbb659400
@ -72,7 +72,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C,
|
||||
MaskLayer *masklay, *point_masklay;
|
||||
MaskSpline *point_spline;
|
||||
MaskSplinePoint *point = NULL;
|
||||
float dist = FLT_MAX, co[2];
|
||||
float dist_best_sq = FLT_MAX, co[2];
|
||||
int width, height;
|
||||
float u;
|
||||
float scalex, scaley;
|
||||
@ -123,7 +123,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C,
|
||||
}
|
||||
|
||||
for (j = 0; j < tot_point - 1; j++) {
|
||||
float cur_dist, a[2], b[2];
|
||||
float dist_sq, a[2], b[2];
|
||||
|
||||
a[0] = points[2 * j] * scalex;
|
||||
a[1] = points[2 * j + 1] * scaley;
|
||||
@ -131,16 +131,16 @@ bool ED_mask_find_nearest_diff_point(const bContext *C,
|
||||
b[0] = points[2 * j + 2] * scalex;
|
||||
b[1] = points[2 * j + 3] * scaley;
|
||||
|
||||
cur_dist = dist_to_line_segment_v2(co, a, b);
|
||||
dist_sq = dist_squared_to_line_segment_v2(co, a, b);
|
||||
|
||||
if (cur_dist < dist) {
|
||||
if (dist_sq < dist_best_sq) {
|
||||
if (tangent)
|
||||
sub_v2_v2v2(tangent, &diff_points[2 * j + 2], &diff_points[2 * j]);
|
||||
|
||||
point_masklay = masklay;
|
||||
point_spline = spline;
|
||||
point = use_deform ? &spline->points[(cur_point - spline->points_deform)] : cur_point;
|
||||
dist = cur_dist;
|
||||
dist_best_sq = dist_sq;
|
||||
u = (float)j / tot_point;
|
||||
}
|
||||
}
|
||||
@ -154,7 +154,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C,
|
||||
}
|
||||
}
|
||||
|
||||
if (point && dist < threshold) {
|
||||
if (point && dist_best_sq < threshold) {
|
||||
if (masklay_r)
|
||||
*masklay_r = point_masklay;
|
||||
|
||||
@ -174,7 +174,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C,
|
||||
}
|
||||
|
||||
if (score_r) {
|
||||
*score_r = dist;
|
||||
*score_r = dist_best_sq;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -5668,7 +5668,7 @@ static bool createEdgeSlideVerts(TransInfo *t)
|
||||
float projectMat[4][4];
|
||||
float mval[2] = {(float)t->mval[0], (float)t->mval[1]};
|
||||
float mval_start[2], mval_end[2];
|
||||
float mval_dir[3], maxdist, (*loop_dir)[3], *loop_maxdist;
|
||||
float mval_dir[3], dist_best_sq, (*loop_dir)[3], *loop_maxdist;
|
||||
int numsel, i, j, loop_nr, l_nr;
|
||||
int use_btree_disp;
|
||||
|
||||
@ -5995,7 +5995,7 @@ static bool createEdgeSlideVerts(TransInfo *t)
|
||||
/* find mouse vectors, the global one, and one per loop in case we have
|
||||
* multiple loops selected, in case they are oriented different */
|
||||
zero_v3(mval_dir);
|
||||
maxdist = -1.0f;
|
||||
dist_best_sq = -1.0f;
|
||||
|
||||
loop_dir = MEM_callocN(sizeof(float) * 3 * loop_nr, "sv loop_dir");
|
||||
loop_maxdist = MEM_mallocN(sizeof(float) * loop_nr, "sv loop_maxdist");
|
||||
@ -6005,7 +6005,7 @@ static bool createEdgeSlideVerts(TransInfo *t)
|
||||
if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
|
||||
BMIter iter2;
|
||||
BMEdge *e2;
|
||||
float d;
|
||||
float dist_sq;
|
||||
|
||||
/* search cross edges for visible edge to the mouse cursor,
|
||||
* then use the shared vertex to calculate screen vector*/
|
||||
@ -6043,19 +6043,19 @@ static bool createEdgeSlideVerts(TransInfo *t)
|
||||
}
|
||||
|
||||
/* global direction */
|
||||
d = dist_to_line_segment_v2(mval, sco_b, sco_a);
|
||||
if ((maxdist == -1.0f) ||
|
||||
dist_sq = dist_squared_to_line_segment_v2(mval, sco_b, sco_a);
|
||||
if ((dist_best_sq == -1.0f) ||
|
||||
/* intentionally use 2d size on 3d vector */
|
||||
(d < maxdist && (len_squared_v2v2(sco_b, sco_a) > 0.1f)))
|
||||
(dist_sq < dist_best_sq && (len_squared_v2v2(sco_b, sco_a) > 0.1f)))
|
||||
{
|
||||
maxdist = d;
|
||||
dist_best_sq = dist_sq;
|
||||
sub_v3_v3v3(mval_dir, sco_b, sco_a);
|
||||
}
|
||||
|
||||
/* per loop direction */
|
||||
l_nr = sv_array[j].loop_nr;
|
||||
if (loop_maxdist[l_nr] == -1.0f || d < loop_maxdist[l_nr]) {
|
||||
loop_maxdist[l_nr] = d;
|
||||
if (loop_maxdist[l_nr] == -1.0f || dist_sq < loop_maxdist[l_nr]) {
|
||||
loop_maxdist[l_nr] = dist_sq;
|
||||
sub_v3_v3v3(loop_dir[l_nr], sco_b, sco_a);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user