diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-10-15 11:56:18 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-10-15 11:57:51 +0300 |
commit | f53a21747c87e9b2358209f2b4a94b4c06c8b6bc (patch) | |
tree | ec0851849ceee3d1c6eb1f09310b078dd8eb8dc2 /source/blender/bmesh/intern | |
parent | a595cda2cdb4f4004b478a00ca3d0f674c0e8b1a (diff) |
Fix T46494: Can't de-select a face w/ mixed modes
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_marking.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 17b6d1d99e7..cd3c8325831 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -102,6 +102,7 @@ static bool bm_vert_is_edge_select_any(const BMVert *v) } #endif +#if 0 static bool bm_edge_is_face_select_any_other(BMLoop *l_first) { const BMLoop *l_iter = l_first; @@ -114,6 +115,7 @@ static bool bm_edge_is_face_select_any_other(BMLoop *l_first) } return false; } +#endif #if 0 static bool bm_edge_is_face_select_any(const BMEdge *e) @@ -498,6 +500,20 @@ void BM_face_select_set(BMesh *bm, BMFace *f, const bool select) BM_elem_flag_disable(f, BM_ELEM_SELECT); bm->totfacesel -= 1; } + /** + * \note This allows a temporarily invalid state - where for eg + * an edge bay be de-selected, but an adjacent face remains selected. + * + * Rely on #BM_mesh_select_mode_flush to correct these cases. + */ +#if 1 + l_iter = l_first = BM_FACE_FIRST_LOOP(f); + do { + BM_vert_select_set(bm, l_iter->v, false); + BM_edge_select_set(bm, l_iter->e, false); + } while ((l_iter = l_iter->next) != l_first); +#else + /* disabled, see T46494 */ /* flush down to edges */ l_iter = l_first = BM_FACE_FIRST_LOOP(f); @@ -515,6 +531,7 @@ void BM_face_select_set(BMesh *bm, BMFace *f, const bool select) BM_vert_select_set(bm, l_iter->v, false); } } while ((l_iter = l_iter->next) != l_first); +#endif } } |