diff options
author | mano-wii <germano.costa@ig.com.br> | 2020-01-28 00:31:15 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2020-01-28 00:31:15 +0300 |
commit | 5df494d75c9a8460951e22b5616859b137684394 (patch) | |
tree | 0fe2ca9d0cfc8e74dd255ce6f454dafd8ed7b111 | |
parent | 944956aba87daf4156f4cff615a089503302d47e (diff) |
bmesh_intersect_edges: Don't detect faces if an edge already exists
For optimization.
-rw-r--r-- | source/blender/bmesh/tools/bmesh_intersect_edges.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c b/source/blender/bmesh/tools/bmesh_intersect_edges.c index 75cfd99489b..4e3f525f760 100644 --- a/source/blender/bmesh/tools/bmesh_intersect_edges.c +++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c @@ -860,7 +860,6 @@ bool BM_mesh_intersect_edges( if (BM_elem_flag_test(e, BM_ELEM_TAG)) { continue; } - BM_elem_flag_enable(e, BM_ELEM_TAG); BMVert *va, *vb, *va_dest = NULL; va = e->v1; @@ -869,9 +868,16 @@ bool BM_mesh_intersect_edges( int v_cut = BM_elem_index_get(va); int v_cut_other = BM_elem_index_get(vb); if (v_cut == -1 && v_cut_other == -1) { + if (!BM_elem_flag_test(va, BM_ELEM_TAG) && !BM_elem_flag_test(vb, BM_ELEM_TAG)) { + /* Ignore edges out of context. */ + BM_elem_flag_enable(e, BM_ELEM_TAG); + } continue; } + /* Tag to avoid testing again. */ + BM_elem_flag_enable(e, BM_ELEM_TAG); + if (v_cut == -1) { SWAP(BMVert *, va, vb); v_cut = v_cut_other; @@ -900,6 +906,11 @@ bool BM_mesh_intersect_edges( v_other_dest = v_other; } + if (BM_edge_exists(va_dest, v_other_dest)) { + /* No need to detect face. (Optimization). */ + break; + } + best_face = bm_vert_pair_best_face_get( va_dest, v_other_dest, edgenet, edgenet_len, dist); @@ -925,10 +936,11 @@ bool BM_mesh_intersect_edges( BMEdge *e_test = e_net, *e_next = NULL; while ((e_test = BM_DISK_EDGE_NEXT(e_test, v_other)) != (e_net)) { if (!BM_edge_is_wire(e_test)) { - if (BM_elem_flag_test(e, BM_ELEM_TAG)) { + if (BM_elem_flag_test(e_test, BM_ELEM_TAG)) { continue; } - if (BM_elem_index_get(e_test->v1) == -1 && BM_elem_index_get(e_test->v2) == -1) { + if (!BM_elem_flag_test(e_test->v1, BM_ELEM_TAG) && + !BM_elem_flag_test(e_test->v2, BM_ELEM_TAG)) { continue; } } |