Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-02-21 01:01:24 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-02-21 01:16:49 +0400
commit8565b2042eeea65967a254b29fd9af52d508efc9 (patch)
treefe6b62a8c6e0d75245b0e42875b4a646c4c1e2fc
parent4056db22cdf3be0d2601b40eb7e29ab23ad051e3 (diff)
Fix for BM_mesh_deselect_flush(), allowed faces with deselected edges
-rw-r--r--source/blender/bmesh/intern/bmesh_marking.c51
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);