diff options
author | Howard Trickey <howard.trickey@gmail.com> | 2014-03-06 19:55:12 +0400 |
---|---|---|
committer | Howard Trickey <howard.trickey@gmail.com> | 2014-03-06 19:55:12 +0400 |
commit | c1be7e12ee3cb853769f63d4da1747b838908411 (patch) | |
tree | ef6147c9be8d9c7af7849dd4c452ce76b42239aa /source/blender | |
parent | d4ad050632633b9fe964722575fd44412685e3fb (diff) |
Fix T37510 Knife missed cuts on small faces.
For very thin faces, knife sometimes missed cutting a few.
Problem was that a test for edges being totally inside a face
was being applied in inappropriate circumstances. An assumed
invariant about the knife hit structure is not true when
actually in the middle of making cuts.
Also make a 'big epsilon' a little smaller, though don't think
that was the problem in this bug.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/mesh/editmesh_knife.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index c762c82442e..772fe7d306e 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -77,7 +77,7 @@ #define KNIFE_FLT_EPS 0.00001f #define KNIFE_FLT_EPS_SQUARED (KNIFE_FLT_EPS * KNIFE_FLT_EPS) -#define KNIFE_FLT_EPSBIG 0.001f +#define KNIFE_FLT_EPSBIG 0.0005f typedef struct KnifeColors { unsigned char line[3]; @@ -653,7 +653,7 @@ static void knife_add_single_cut(KnifeTool_OpData *kcd, KnifeLineHit *lh1, Knife } /* Check if edge actually lies within face (might not, if this face is concave) */ - if (lh1->v && lh2->v) { + if ((lh1->v && !lh1->kfe) && (lh2->v && !lh2->kfe)) { if (!knife_verts_edge_in_face(lh1->v, lh2->v, f)) { return; } |