diff options
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_marking.c')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_marking.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 0318fd94b92..2116acc337e 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -437,36 +437,48 @@ void BM_select_mode_set(BMesh *bm, int selectmode) } /** - * counts number of elements with flag set + * counts number of elements with flag enabled/disabled */ -int BM_mesh_count_flag(BMesh *bm, const char htype, const char hflag, int respecthide) +static int bm_mesh_flag_count(BMesh *bm, const char htype, const char hflag, + int respecthide, int test_for_enabled) { BMElem *ele; BMIter iter; + int test = (test_for_enabled ? hflag : 0); int tot = 0; if (htype & BM_VERT) { for (ele = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); ele; ele = BM_iter_step(&iter)) { if (respecthide && BM_elem_flag_test(ele, BM_ELEM_HIDDEN)) continue; - if (BM_elem_flag_test(ele, hflag)) tot++; + if (BM_elem_flag_test(ele, hflag) == test) tot++; } } if (htype & BM_EDGE) { for (ele = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); ele; ele = BM_iter_step(&iter)) { if (respecthide && BM_elem_flag_test(ele, BM_ELEM_HIDDEN)) continue; - if (BM_elem_flag_test(ele, hflag)) tot++; + if (BM_elem_flag_test(ele, hflag) == test) tot++; } } if (htype & BM_FACE) { for (ele = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); ele; ele = BM_iter_step(&iter)) { if (respecthide && BM_elem_flag_test(ele, BM_ELEM_HIDDEN)) continue; - if (BM_elem_flag_test(ele, hflag)) tot++; + if (BM_elem_flag_test(ele, hflag) == test) tot++; } } return tot; } +int BM_mesh_enabled_flag_count(BMesh *bm, const char htype, const char hflag, int respecthide) +{ + return bm_mesh_flag_count(bm, htype, hflag, respecthide, TRUE); +} + +int BM_mesh_disabled_flag_count(BMesh *bm, const char htype, const char hflag, int respecthide) +{ + return bm_mesh_flag_count(bm, htype, hflag, respecthide, FALSE); +} + /** * \note use BM_elem_flag_test(ele, BM_ELEM_SELECT) to test selection * \note by design, this will not touch the editselection history stuff |