diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-12-19 06:15:19 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-12-19 06:15:19 +0300 |
commit | cfd1b48492e8bd8f747f60f12c3fd624c127b9a3 (patch) | |
tree | 4b581a2667fc68d70422e89bd32c3544d33a6906 /source/blender/bmesh | |
parent | 5df597171bb9065952436027f5a1a271368e51ff (diff) | |
parent | e418c858ab85a28f312ffc8a3b2f625438558472 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/tools/bmesh_bevel.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index 2c6213dacce..d00d0d508c7 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -718,14 +718,18 @@ static void slide_dist(EdgeHalf *e, BMVert *v, float d, float slideco[3]) /* Is co not on the edge e? if not, return the closer end of e in ret_closer_v */ static bool is_outside_edge(EdgeHalf *e, const float co[3], BMVert **ret_closer_v) { - float d_squared; - - d_squared = dist_squared_to_line_segment_v3(co, e->e->v1->co, e->e->v2->co); - if (d_squared > BEVEL_EPSILON_BIG * BEVEL_EPSILON_BIG) { - if (len_squared_v3v3(co, e->e->v1->co) > len_squared_v3v3(co, e->e->v2->co)) - *ret_closer_v = e->e->v2; - else - *ret_closer_v = e->e->v1; + float h[3], u[3], lambda, lenu, *l1 = e->e->v1->co; + + sub_v3_v3v3(u, e->e->v2->co, l1); + sub_v3_v3v3(h, co, l1); + lenu = normalize_v3(u); + lambda = dot_v3v3(u, h); + if (lambda <= -BEVEL_EPSILON_BIG * lenu) { + *ret_closer_v = e->e->v1; + return true; + } + else if (lambda >= (1.0f + BEVEL_EPSILON_BIG) * lenu) { + *ret_closer_v = e->e->v2; return true; } else { |