diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-02-21 01:01:24 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-02-21 01:16:49 +0400 |
commit | 8565b2042eeea65967a254b29fd9af52d508efc9 (patch) | |
tree | fe6b62a8c6e0d75245b0e42875b4a646c4c1e2fc | |
parent | 4056db22cdf3be0d2601b40eb7e29ab23ad051e3 (diff) |
Fix for BM_mesh_deselect_flush(), allowed faces with deselected edges
-rw-r--r-- | source/blender/bmesh/intern/bmesh_marking.c | 51 |
1 files 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); |