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>2012-02-26 02:23:40 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-26 02:23:40 +0400
commitc65b3b73fd2c0c0011ef36d8fc36301de4a42fe0 (patch)
tree3a45d161d5814bf403ffa9093a2d417b6f7a960e /source/blender/bmesh/intern/bmesh_marking.c
parent72e1316dc4b607440430779d78a26a76a4527c4b (diff)
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.
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_marking.c')
-rw-r--r--source/blender/bmesh/intern/bmesh_marking.c78
1 files changed, 39 insertions, 39 deletions
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) {