From 8565b2042eeea65967a254b29fd9af52d508efc9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 21 Feb 2014 08:01:24 +1100 Subject: Fix for BM_mesh_deselect_flush(), allowed faces with deselected edges --- source/blender/bmesh/intern/bmesh_marking.c | 51 ++++++++--------------------- 1 file changed, 13 insertions(+), 38 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 77505242002..833a556e46c 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -236,55 +236,30 @@ void BM_mesh_select_mode_flush(BMesh *bm) */ void BM_mesh_deselect_flush(BMesh *bm) { - BMEdge *e; - BMLoop *l_iter; - BMLoop *l_first; - BMFace *f; - BMIter eiter; - BMIter fiter; - - bool ok; + BMEdge *e; - /* we can use 2 sections here because the second loop isnt checking edge selection */ -#pragma omp parallel sections if (bm->totedge + bm->totface >= BM_OMP_LIMIT) - { -#pragma omp section - { - BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { - if (!(BM_elem_flag_test(e->v1, BM_ELEM_SELECT) && - BM_elem_flag_test(e->v2, BM_ELEM_SELECT) && - !BM_elem_flag_test(e, BM_ELEM_HIDDEN))) + BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) { + if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) { + if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { + if (!BM_elem_flag_test(e->v1, BM_ELEM_SELECT) || + !BM_elem_flag_test(e->v2, BM_ELEM_SELECT)) { BM_elem_flag_disable(e, BM_ELEM_SELECT); } } - } -#pragma omp section - { - BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) { - ok = true; - if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { - l_iter = l_first = BM_FACE_FIRST_LOOP(f); - do { - if (!BM_elem_flag_test(l_iter->v, BM_ELEM_SELECT)) { - ok = false; - break; - } - } while ((l_iter = l_iter->next) != l_first); - } - else { - ok = false; - } + if (e->l && !BM_elem_flag_test(e, BM_ELEM_SELECT)) { + BMLoop *l_iter; + BMLoop *l_first; - if (ok == false) { - BM_elem_flag_disable(f, BM_ELEM_SELECT); - } + l_iter = l_first = e->l; + do { + BM_elem_flag_disable(l_iter->f, BM_ELEM_SELECT); + } while ((l_iter = l_iter->radial_next) != l_first); } } } - /* end sections */ /* Remove any deselected elements from the BMEditSelection */ BM_select_history_validate(bm); -- cgit v1.2.3