diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-05-16 19:28:57 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-05-16 19:28:57 +0400 |
commit | fbf890200cfa93278259ddc87c7ae3636e85cc57 (patch) | |
tree | 0fea31ddba39b2384e3b12f614d0d3263b36ff0b /source/blender/bmesh/intern/bmesh_edgeloop.c | |
parent | a8964d865f387dc04b2e4c34c91269ac22edb98b (diff) |
fix for crash in grid-fill where it was possible for rail edges to overlap.
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_edgeloop.c')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_edgeloop.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_edgeloop.c b/source/blender/bmesh/intern/bmesh_edgeloop.c index 1ab7652502c..7c5b20381ab 100644 --- a/source/blender/bmesh/intern/bmesh_edgeloop.c +++ b/source/blender/bmesh/intern/bmesh_edgeloop.c @@ -601,3 +601,24 @@ void BM_edgeloop_expand(BMesh *UNUSED(bm), BMEdgeLoopStore *el_store, int el_sto BLI_assert(el_store->len == el_store_len); } + +bool BM_edgeloop_overlap_check(struct BMEdgeLoopStore *el_store_a, struct BMEdgeLoopStore *el_store_b) +{ + LinkData *node; + + /* init */ + for (node = el_store_a->verts.first; node; node = node->next) { + BM_elem_flag_disable((BMVert *)node->data, BM_ELEM_INTERNAL_TAG); + } + for (node = el_store_b->verts.first; node; node = node->next) { + BM_elem_flag_enable((BMVert *)node->data, BM_ELEM_INTERNAL_TAG); + } + + /* check 'a' */ + for (node = el_store_a->verts.first; node; node = node->next) { + if (BM_elem_flag_test((BMVert *)node->data, BM_ELEM_INTERNAL_TAG)) { + return true; + } + } + return false; +} |