Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-05-08 16:56:24 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-08 16:56:24 +0400
commita2221cad15c04eab4b4a9c687b28d9ddf9e29616 (patch)
treebb4b1cbb0be83f47264c17baf71662f513cfed9a
parent02c1e6162c8253e841497b5c10142d2b31fbc2ea (diff)
knife tool: use the squared distance for comparison.
-rw-r--r--source/blender/editors/mesh/editmesh_knife.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c
index 11a63c8a758..b37026aafd8 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -1595,7 +1595,8 @@ static float knife_snap_size(KnifeTool_OpData *kcd, float maxsize)
static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], float cagep[3], BMFace **fptr, bool *is_space)
{
BMFace *f;
- float co[3], cageco[3], sco[2], maxdist = knife_snap_size(kcd, kcd->ethresh);
+ float co[3], cageco[3], sco[2];
+ float maxdist = knife_snap_size(kcd, kcd->ethresh);
if (kcd->ignore_vert_snapping)
maxdist *= 0.5f;
@@ -1610,10 +1611,11 @@ static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], flo
kcd->curr.bmface = f;
if (f) {
+ const float maxdist_sq = maxdist * maxdist;
KnifeEdge *cure = NULL;
ListBase *lst;
Ref *ref;
- float dis, curdis = FLT_MAX;
+ float dis_sq, curdis_sq = FLT_MAX;
knife_project_v2(kcd, cageco, sco);
@@ -1626,8 +1628,8 @@ static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], flo
knife_project_v2(kcd, kfe->v1->cageco, kfe->v1->sco);
knife_project_v2(kcd, kfe->v2->cageco, kfe->v2->sco);
- dis = dist_to_line_segment_v2(sco, kfe->v1->sco, kfe->v2->sco);
- if (dis < curdis && dis < maxdist) {
+ dis_sq = dist_squared_to_line_segment_v2(sco, kfe->v1->sco, kfe->v2->sco);
+ if (dis_sq < curdis_sq && dis_sq < maxdist_sq) {
if (kcd->vc.rv3d->rflag & RV3D_CLIPPING) {
float lambda = line_point_factor_v2(sco, kfe->v1->sco, kfe->v2->sco);
float vec[3];
@@ -1636,12 +1638,12 @@ static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], flo
if (ED_view3d_clipping_test(kcd->vc.rv3d, vec, true) == 0) {
cure = kfe;
- curdis = dis;
+ curdis_sq = dis_sq;
}
}
else {
cure = kfe;
- curdis = dis;
+ curdis_sq = dis_sq;
}
}
}