From c65b3b73fd2c0c0011ef36d8fc36301de4a42fe0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 25 Feb 2012 22:23:40 +0000 Subject: bmesh api cleanup * better type safety for BM_elem_flag_* and BM_elem_index_* functions. * add BMElem type to be used where BMFace/Edge/Vert/Loop can be interchanged. * fix bug in select manifold, found when making functions more strict. --- source/blender/bmesh/intern/bmesh_marking.c | 78 ++++++++++++++--------------- 1 file changed, 39 insertions(+), 39 deletions(-) (limited to 'source/blender/bmesh/intern/bmesh_marking.c') diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index be542dfef0f..78c85e089e1 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -55,7 +55,7 @@ static void recount_totsels(BMesh *bm) { BMIter iter; - BMHeader *ele; + BMElem *ele; const char iter_types[3] = {BM_VERTS_OF_MESH, BM_EDGES_OF_MESH, BM_FACES_OF_MESH}; @@ -124,7 +124,7 @@ void BM_mesh_select_mode_flush(BMesh *bm) 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->e->head), BM_ELEM_SELECT)) { + if (!BM_elem_flag_test(l_iter->e, BM_ELEM_SELECT)) { ok = FALSE; break; } @@ -286,13 +286,13 @@ void BM_edge_select_set(BMesh *bm, BMEdge *e, int select) if (select) { if (!BM_elem_flag_test(e, BM_ELEM_SELECT)) bm->totedgesel += 1; - BM_elem_flag_enable(&(e->head), BM_ELEM_SELECT); + BM_elem_flag_enable(e, BM_ELEM_SELECT); BM_elem_select_set(bm, e->v1, TRUE); BM_elem_select_set(bm, e->v2, TRUE); } else { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) bm->totedgesel -= 1; - BM_elem_flag_disable(&(e->head), BM_ELEM_SELECT); + BM_elem_flag_disable(e, BM_ELEM_SELECT); if ( bm->selectmode == SCE_SELECT_EDGE || bm->selectmode == SCE_SELECT_FACE || @@ -352,7 +352,7 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) bm->totfacesel++; } - BM_elem_flag_enable(&(f->head), BM_ELEM_SELECT); + BM_elem_flag_enable(f, BM_ELEM_SELECT); l_iter = l_first = BM_FACE_FIRST_LOOP(f); do { BM_vert_select_set(bm, l_iter->v, TRUE); @@ -364,7 +364,7 @@ void BM_face_select_set(BMesh *bm, BMFace *f, int select) BMLoop *l; if (BM_elem_flag_test(f, BM_ELEM_SELECT)) bm->totfacesel -= 1; - BM_elem_flag_disable(&(f->head), BM_ELEM_SELECT); + BM_elem_flag_disable(f, BM_ELEM_SELECT); /* flush down to edges */ BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { @@ -427,7 +427,7 @@ void BM_select_mode_set(BMesh *bm, int selectmode) for (v = BM_iter_new(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BM_iter_step(&verts)) BM_elem_flag_disable(v, 0); for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges)) { - if (BM_elem_flag_test(&(e->head), BM_ELEM_SELECT)) { + if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { BM_edge_select_set(bm, e, TRUE); } } @@ -437,7 +437,7 @@ void BM_select_mode_set(BMesh *bm, int selectmode) for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges)) BM_elem_flag_disable(e, 0); for (f = BM_iter_new(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BM_iter_step(&faces)) { - if (BM_elem_flag_test(&(f->head), BM_ELEM_SELECT)) { + if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { BM_face_select_set(bm, f, TRUE); } } @@ -448,26 +448,26 @@ void BM_select_mode_set(BMesh *bm, int selectmode) int BM_mesh_count_flag(struct BMesh *bm, const char htype, const char hflag, int respecthide) { - BMHeader *head; + BMElem *ele; BMIter iter; int tot = 0; if (htype & BM_VERT) { - for (head = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); head; head = BM_iter_step(&iter)) { - if (respecthide && BM_elem_flag_test(head, BM_ELEM_HIDDEN)) continue; - if (BM_elem_flag_test(head, hflag)) tot++; + 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 (htype & BM_EDGE) { - for (head = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); head; head = BM_iter_step(&iter)) { - if (respecthide && BM_elem_flag_test(head, BM_ELEM_HIDDEN)) continue; - if (BM_elem_flag_test(head, hflag)) tot++; + 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 (htype & BM_FACE) { - for (head = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); head; head = BM_iter_step(&iter)) { - if (respecthide && BM_elem_flag_test(head, BM_ELEM_HIDDEN)) continue; - if (BM_elem_flag_test(head, hflag)) tot++; + 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++; } } @@ -515,7 +515,7 @@ BMFace *BM_active_face_get(BMesh *bm, int sloppy) ese = bm->selected.last; for ( ; ese; ese = ese->prev) { if (ese->htype == BM_FACE) { - f = (BMFace *)ese->data; + f = (BMFace *)ese->ele; if (BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { f = NULL; @@ -549,16 +549,16 @@ BMFace *BM_active_face_get(BMesh *bm, int sloppy) void BM_editselection_center(BMesh *bm, float r_center[3], BMEditSelection *ese) { if (ese->htype == BM_VERT) { - BMVert *eve = ese->data; + BMVert *eve = (BMVert *)ese->ele; copy_v3_v3(r_center, eve->co); } else if (ese->htype == BM_EDGE) { - BMEdge *eed = ese->data; + BMEdge *eed = (BMEdge *)ese->ele; add_v3_v3v3(r_center, eed->v1->co, eed->v2->co); mul_v3_fl(r_center, 0.5); } else if (ese->htype == BM_FACE) { - BMFace *efa = ese->data; + BMFace *efa = (BMFace *)ese->ele; BM_face_center_bounds_calc(bm, efa, r_center); } } @@ -566,11 +566,11 @@ void BM_editselection_center(BMesh *bm, float r_center[3], BMEditSelection *ese) void BM_editselection_normal(float r_normal[3], BMEditSelection *ese) { if (ese->htype == BM_VERT) { - BMVert *eve = ese->data; + BMVert *eve = (BMVert *)ese->ele; copy_v3_v3(r_normal, eve->no); } else if (ese->htype == BM_EDGE) { - BMEdge *eed = ese->data; + BMEdge *eed = (BMEdge *)ese->ele; float plane[3]; /* need a plane to correct the normal */ float vec[3]; /* temp vec storage */ @@ -587,7 +587,7 @@ void BM_editselection_normal(float r_normal[3], BMEditSelection *ese) } else if (ese->htype == BM_FACE) { - BMFace *efa = ese->data; + BMFace *efa = (BMFace *)ese->ele; copy_v3_v3(r_normal, efa->no); } } @@ -600,7 +600,7 @@ void BM_editselection_normal(float r_normal[3], BMEditSelection *ese) void BM_editselection_plane(BMesh *bm, float r_plane[3], BMEditSelection *ese) { if (ese->htype == BM_VERT) { - BMVert *eve = ese->data; + BMVert *eve = (BMVert *)ese->ele; float vec[3] = {0.0f, 0.0f, 0.0f}; if (ese->prev) { /* use previously selected data to make a useful vertex plane */ @@ -619,7 +619,7 @@ void BM_editselection_plane(BMesh *bm, float r_plane[3], BMEditSelection *ese) } } else if (ese->htype == BM_EDGE) { - BMEdge *eed = ese->data; + BMEdge *eed = (BMEdge *)ese->ele; /* the plane is simple, it runs along the edge * however selecting different edges can swap the direction of the y axis. @@ -635,7 +635,7 @@ void BM_editselection_plane(BMesh *bm, float r_plane[3], BMEditSelection *ese) } else if (ese->htype == BM_FACE) { - BMFace *efa = ese->data; + BMFace *efa = (BMFace *)ese->ele; float vec[3] = {0.0f, 0.0f, 0.0f}; /* for now, use face normal */ @@ -693,12 +693,12 @@ void BM_editselection_plane(BMesh *bm, float r_plane[3], BMEditSelection *ese) normalize_v3(r_plane); } -int BM_select_history_check(BMesh *bm, void *data) +int BM_select_history_check(BMesh *bm, const BMElem *ele) { BMEditSelection *ese; for (ese = bm->selected.first; ese; ese = ese->next) { - if (ese->data == data) { + if (ese->ele == ele) { return TRUE; } } @@ -706,11 +706,11 @@ int BM_select_history_check(BMesh *bm, void *data) return FALSE; } -void BM_select_history_remove(BMesh *bm, void *data) +void BM_select_history_remove(BMesh *bm, BMElem *ele) { BMEditSelection *ese; for (ese = bm->selected.first; ese; ese = ese->next) { - if (ese->data == data) { + if (ese->ele == ele) { BLI_freelinkN(&(bm->selected), ese); break; } @@ -723,13 +723,13 @@ void BM_select_history_clear(BMesh *bm) bm->selected.first = bm->selected.last = NULL; } -void BM_select_history_store(BMesh *bm, void *data) +void BM_select_history_store(BMesh *bm, BMElem *ele) { BMEditSelection *ese; - if (!BM_select_history_check(bm, data)) { + if (!BM_select_history_check(bm, ele)) { ese = (BMEditSelection *) MEM_callocN(sizeof(BMEditSelection), "BMEdit Selection"); - ese->htype = ((BMHeader *)data)->htype; - ese->data = data; + ese->htype = ((BMHeader *)ele)->htype; + ese->ele = ele; BLI_addtail(&(bm->selected), ese); } } @@ -742,7 +742,7 @@ void BM_select_history_validate(BMesh *bm) while (ese) { nextese = ese->next; - if (!BM_elem_flag_test(ese->data, BM_ELEM_SELECT)) { + if (!BM_elem_flag_test(ese->ele, BM_ELEM_SELECT)) { BLI_freelinkN(&(bm->selected), ese); } ese = nextese; @@ -755,7 +755,7 @@ void BM_mesh_elem_flag_disable_all(BMesh *bm, const char htype, const char hflag BM_EDGES_OF_MESH, BM_FACES_OF_MESH}; BMIter iter; - BMHeader *ele; + BMElem *ele; int i; if (hflag & BM_ELEM_SELECT) { @@ -781,7 +781,7 @@ void BM_mesh_elem_flag_enable_all(BMesh *bm, const char htype, const char hflag) BM_EDGES_OF_MESH, BM_FACES_OF_MESH}; BMIter iter; - BMHeader *ele; + BMElem *ele; int i; if (hflag & BM_ELEM_SELECT) { -- cgit v1.2.3