From 4f28dac8722a213599add020d41cb04fe262dadf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 9 Nov 2016 00:04:58 +1100 Subject: BMesh: remove edge search when flipping faces Replace search with direct lookup. --- source/blender/bmesh/intern/bmesh_core.c | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) (limited to 'source/blender/bmesh/intern/bmesh_core.c') diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index c75e2649257..6abc52d75ef 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -1045,9 +1045,9 @@ static bool bm_loop_reverse_loop( #endif const int len = f->len; - BMLoop *l_iter, *oldprev, *oldnext; + BMLoop *l_iter; BMEdge **edar = BLI_array_alloca(edar, len); - int i, j, edok; + int i; for (i = 0, l_iter = l_first; i < len; i++, l_iter = l_iter->next) { bmesh_radial_loop_remove((edar[i] = l_iter->e), l_iter); @@ -1055,8 +1055,8 @@ static bool bm_loop_reverse_loop( /* actually reverse the loop */ for (i = 0, l_iter = l_first; i < len; i++) { - oldnext = l_iter->next; - oldprev = l_iter->prev; + BMLoop *oldnext = l_iter->next; + BMLoop *oldprev = l_iter->prev; l_iter->next = oldprev; l_iter->prev = oldnext; l_iter = oldnext; @@ -1067,26 +1067,12 @@ static bool bm_loop_reverse_loop( } } - if (len == 2) { /* two edged face */ - /* do some verification here! */ - l_first->e = edar[1]; - l_first->next->e = edar[0]; - } - else { - for (i = 0, l_iter = l_first; i < len; i++, l_iter = l_iter->next) { - edok = 0; - for (j = 0; j < len; j++) { - edok = BM_verts_in_edge(l_iter->v, l_iter->next->v, edar[j]); - if (edok) { - l_iter->e = edar[j]; - break; - } - } - } - } /* rebuild radial */ - for (i = 0, l_iter = l_first; i < len; i++, l_iter = l_iter->next) + for (i = 0, l_iter = l_first->prev; i < len; i++, l_iter = l_iter->prev) { + BLI_assert(BM_verts_in_edge(l_iter->v, l_iter->next->v, edar[i])); + l_iter->e = edar[i]; bmesh_radial_loop_append(l_iter->e, l_iter); + } #ifndef NDEBUG /* validate radial */ -- cgit v1.2.3