diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-04-12 11:40:47 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-04-12 11:40:47 +0400 |
commit | c74ace03e025b9ee94664f2ec8291279effb3500 (patch) | |
tree | e09f248ed6fb07de69d5ab1101d751defc0b2153 /source/blender/bmesh | |
parent | 30888ac25c3fe76e50cdcc940419b247840b05ff (diff) |
fix [#30907] Inset tool with Select Outer disabled does not allow translation of new faces
inset with select-inner faces gave invalid selection.
also correct spelling in some comments.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_marking.c | 43 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_marking.h | 4 |
2 files changed, 45 insertions, 2 deletions
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 03c4d3c9cbb..a83987be94c 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -395,7 +395,7 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) * Sets the selection mode for the bmesh, * updating the selection state. */ -void BM_select_mode_set(BMesh *bm, int selectmode) +void BM_mesh_select_mode_set(BMesh *bm, int selectmode) { BMIter iter; BMElem *ele; @@ -446,6 +446,47 @@ void BM_select_mode_set(BMesh *bm, int selectmode) } /** + * \brief De-Select, Re-Select elements + * Awkwardly named function + * + * Deselect's one type of elements then re-selects another, + * Use case is to de-select stray edges or verts. + */ +void BM_mesh_select_flush_strip(BMesh *bm, const char htype_desel, const char htype_sel) +{ + const char iter_types[3] = {BM_VERTS_OF_MESH, + BM_EDGES_OF_MESH, + BM_FACES_OF_MESH}; + + const char flag_types[3] = {BM_VERT, BM_EDGE, BM_FACE}; + + BMIter iter; + BMElem *ele; + int i; + + for (i = 0; i < 3; i++) { + if (htype_desel & flag_types[i]) { + ele = BM_iter_new(&iter, bm, iter_types[i], NULL); + for ( ; ele; ele = BM_iter_step(&iter)) { + BM_elem_flag_disable(ele, BM_ELEM_SELECT); + } + } + } + + for (i = 0; i < 3; i++) { + if (htype_sel & flag_types[i]) { + ele = BM_iter_new(&iter, bm, iter_types[i], NULL); + for ( ; ele; ele = BM_iter_step(&iter)) { + if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) { + BM_elem_select_set(bm, ele, TRUE); + } + } + } + } + +} + +/** * counts number of elements with flag enabled/disabled */ static int bm_mesh_flag_count(BMesh *bm, const char htype, const char hflag, diff --git a/source/blender/bmesh/intern/bmesh_marking.h b/source/blender/bmesh/intern/bmesh_marking.h index fa078c74b2e..b981f917df6 100644 --- a/source/blender/bmesh/intern/bmesh_marking.h +++ b/source/blender/bmesh/intern/bmesh_marking.h @@ -54,12 +54,14 @@ void BM_vert_select_set(BMesh *bm, BMVert *v, int select); void BM_edge_select_set(BMesh *bm, BMEdge *e, int select); void BM_face_select_set(BMesh *bm, BMFace *f, int select); -void BM_select_mode_set(BMesh *bm, int selectmode); +void BM_mesh_select_mode_set(BMesh *bm, int selectmode); void BM_mesh_select_mode_flush(BMesh *bm); void BM_mesh_deselect_flush(BMesh *bm); void BM_mesh_select_flush(BMesh *bm); +void BM_mesh_select_flush_strip(BMesh *bm, const char htype_desel, const char htype_sel); + int BM_mesh_enabled_flag_count(BMesh *bm, const char htype, const char hflag, int respecthide); int BM_mesh_disabled_flag_count(BMesh *bm, const char htype, const char hflag, int respecthide); |