BMesh: remove edge search when flipping faces

Replace search with direct lookup.
This commit is contained in:
Campbell Barton 2016-11-09 00:04:58 +11:00
parent 0085001eb0
commit 4f28dac872
Notes: blender-bot 2023-02-14 07:25:50 +01:00
Referenced by issue #49967, Microdisplacement bug or known limitation?
1 changed files with 8 additions and 22 deletions

View File

@ -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 */