diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-02-23 13:26:53 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-02-23 13:26:53 +0400 |
commit | 09ee59c669dfa51bab22fe2552d619763a8c98a3 (patch) | |
tree | bb656638c2f686ef43166e26ed2a48351f8a543d /source | |
parent | bc02db27c5461a8228ea8d06325a2170998dbb72 (diff) |
bmesh minor api refactor
* BM_vert_in_face now loops over a vert's faces rather then every vert in the face.
* rename bmesh_radial_find_first_facevert --> bmesh_radial_find_first_faceloop
* rename bmesh_radial_find_next_facevert --> bmesh_radial_find_next_faceloop
* rename BM_vert_collapse_edges --> BM_vert_collapse_edge (only collapses one)
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/bmesh/bmesh.h | 2 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_iterators.c | 12 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_mods.c | 14 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_queries.c | 21 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_structure.c | 59 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_structure.h | 12 | ||||
-rw-r--r-- | source/blender/bmesh/operators/bmo_dissolve.c | 8 | ||||
-rw-r--r-- | source/blender/bmesh/tools/BME_bevel.c | 10 |
8 files changed, 57 insertions, 81 deletions
diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h index aecf94e2892..4535e7b8c58 100644 --- a/source/blender/bmesh/bmesh.h +++ b/source/blender/bmesh/bmesh.h @@ -216,7 +216,7 @@ BMFace *BM_face_split(BMesh *bm, BMFace *f, /* these 2 functions are very similar */ BMEdge* BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, const int join_faces); -BMEdge* BM_vert_collapse_edges(BMesh *bm, BMEdge *ke, BMVert *kv); +BMEdge* BM_vert_collapse_edge(BMesh *bm, BMEdge *ke, BMVert *kv); /* splits an edge. ne is set to the new edge created. */ diff --git a/source/blender/bmesh/intern/bmesh_iterators.c b/source/blender/bmesh/intern/bmesh_iterators.c index 083de99b7c4..281f42300ff 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.c +++ b/source/blender/bmesh/intern/bmesh_iterators.c @@ -200,7 +200,7 @@ void bmiter__face_of_vert_begin(BMIter *iter) if (iter->count) { iter->firstedge = bmesh_disk_find_first_faceedge(iter->vdata->e, iter->vdata); iter->nextedge = iter->firstedge; - iter->firstloop = bmesh_radial_find_first_facevert(iter->firstedge->l, iter->vdata); + iter->firstloop = bmesh_radial_find_first_faceloop(iter->firstedge->l, iter->vdata); iter->nextloop = iter->firstloop; } } @@ -210,10 +210,10 @@ void *bmiter__face_of_vert_step(BMIter *iter) if (iter->count && iter->nextloop) { iter->count--; - iter->nextloop = bmesh_radial_find_next_facevert(iter->nextloop, iter->vdata); + iter->nextloop = bmesh_radial_find_next_faceloop(iter->nextloop, iter->vdata); if (iter->nextloop == iter->firstloop) { iter->nextedge = bmesh_disk_find_next_faceedge(iter->nextedge, iter->vdata); - iter->firstloop = bmesh_radial_find_first_facevert(iter->nextedge->l, iter->vdata); + iter->firstloop = bmesh_radial_find_first_faceloop(iter->nextedge->l, iter->vdata); iter->nextloop = iter->firstloop; } } @@ -238,7 +238,7 @@ void bmiter__loop_of_vert_begin(BMIter *iter) if (iter->count) { iter->firstedge = bmesh_disk_find_first_faceedge(iter->vdata->e, iter->vdata); iter->nextedge = iter->firstedge; - iter->firstloop = bmesh_radial_find_first_facevert(iter->firstedge->l, iter->vdata); + iter->firstloop = bmesh_radial_find_first_faceloop(iter->firstedge->l, iter->vdata); iter->nextloop = iter->firstloop; } } @@ -248,10 +248,10 @@ void *bmiter__loop_of_vert_step(BMIter *iter) if (iter->count) { iter->count--; - iter->nextloop = bmesh_radial_find_next_facevert(iter->nextloop, iter->vdata); + iter->nextloop = bmesh_radial_find_next_faceloop(iter->nextloop, iter->vdata); if (iter->nextloop == iter->firstloop) { iter->nextedge = bmesh_disk_find_next_faceedge(iter->nextedge, iter->vdata); - iter->firstloop = bmesh_radial_find_first_facevert(iter->nextedge->l, iter->vdata); + iter->firstloop = bmesh_radial_find_first_faceloop(iter->nextedge->l, iter->vdata); iter->nextloop = iter->firstloop; } } diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index 25b70f56953..72910d7f993 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -307,7 +307,7 @@ BMEdge *BM_verts_connect(BMesh *bm, BMVert *v1, BMVert *v2, BMFace **nf) BMLoop *nl; BMFace *face; - /* be warned: this can do weird things in some ngon situation, see BM_LegalSplit */ + /* be warned: this can do weird things in some ngon situation, see BM_face_legal_splits */ for (face = BM_iter_new(&iter, bm, BM_FACES_OF_VERT, v1); face; face = BM_iter_step(&iter)) { for (v = BM_iter_new(&iter2, bm, BM_VERTS_OF_FACE, face); v; v = BM_iter_step(&iter2)) { if (v == v2) { @@ -344,7 +344,9 @@ BMFace *BM_face_split(BMesh *bm, BMFace *f, BMVert *v1, BMVert *v2, BMLoop **nl, { const int has_mdisp = CustomData_has_layer(&bm->ldata, CD_MDISPS); BMFace *nf, *of; - + + BLI_assert(v1 != v2); + /* do we have a multires layer */ if (has_mdisp) { of = BM_face_copy(bm, f, FALSE, FALSE); @@ -397,7 +399,7 @@ BMFace *BM_face_split(BMesh *bm, BMFace *f, BMVert *v1, BMVert *v2, BMLoop **nl, * * Note that this is not a general edge collapse function. * - * Note this function is very close to 'BM_vert_collapse_edges', both collapse + * Note this function is very close to 'BM_vert_collapse_edge', both collapse * a vertex and return a new edge. Except this takes a factor and merges * custom data. * @@ -476,7 +478,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, con } /* single face or no faces */ - /* same as BM_vert_collapse_edges() however we already + /* same as BM_vert_collapse_edge() however we already * have vars to perform this operation so dont call. */ bmesh_jekv(bm, ke, kv); ne = BM_edge_exists(tv, tv2); @@ -486,7 +488,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, con /** - * BM_vert_collapse_edges + * BM_vert_collapse_edge * * Collapses a vertex onto another vertex it shares an edge with. * @@ -494,7 +496,7 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, con * The New Edge */ -BMEdge *BM_vert_collapse_edges(BMesh *bm, BMEdge *ke, BMVert *kv) +BMEdge *BM_vert_collapse_edge(BMesh *bm, BMEdge *ke, BMVert *kv) { /* nice example implimentation but we want loops to have their customdata * accounted for */ diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index dd5e6ecc826..1408c094083 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -101,26 +101,7 @@ BMLoop *BM_face_other_loop(BMEdge *e, BMFace *f, BMVert *v) int BM_vert_in_face(BMFace *f, BMVert *v) { - BMLoop *l_iter, *l_first; - -#ifdef USE_BMESH_HOLES - BMLoopList *lst; - for (lst = f->loops.first; lst; lst = lst->next) -#endif - { -#ifdef USE_BMESH_HOLES - l_iter = l_first = lst->first; -#else - l_iter = l_first = f->l_first; -#endif - do { - if (l_iter->v == v) { - return TRUE; - } - } while ((l_iter = l_iter->next) != l_first); - } - - return FALSE; + return bmesh_radial_find_first_faceloop(BM_FACE_FIRST_LOOP(f), v) != NULL; } /* diff --git a/source/blender/bmesh/intern/bmesh_structure.c b/source/blender/bmesh/intern/bmesh_structure.c index 268d8bfa346..c0ddb19153e 100644 --- a/source/blender/bmesh/intern/bmesh_structure.c +++ b/source/blender/bmesh/intern/bmesh_structure.c @@ -339,21 +339,21 @@ struct BMEdge *bmesh_disk_find_next_faceedge(struct BMEdge *e, struct BMVert *v) /*****radial cycle functions, e.g. loops surrounding edges**** */ int bmesh_radial_validate(int radlen, BMLoop *l) { - BMLoop *l2 = l; + BMLoop *l_iter = l; int i = 0; if (bmesh_radial_length(l) != radlen) return FALSE; do { - if (!l2) { + if (!l_iter) { bmesh_error(); return FALSE; } - if (l2->e != l->e) + if (l_iter->e != l->e) return FALSE; - if (l2->v != l->e->v1 && l2->v != l->e->v2) + if (l_iter->v != l->e->v1 && l_iter->v != l->e->v2) return FALSE; if (i > BM_LOOP_RADIAL_MAX) { @@ -362,8 +362,7 @@ int bmesh_radial_validate(int radlen, BMLoop *l) } i++; - l2 = l2->radial_next; - } while (l2 != l); + } while ((l_iter = bmesh_radial_nextloop(l_iter)) != l); return TRUE; } @@ -414,31 +413,27 @@ void bmesh_radial_remove_loop(BMLoop *l, BMEdge *e) * Finds the first loop of v around radial * cycle */ -BMLoop *bmesh_radial_find_first_facevert(BMLoop *l, BMVert *v) +BMLoop *bmesh_radial_find_first_faceloop(BMLoop *l, BMVert *v) { - BMLoop *curloop; - curloop = l; + BMLoop *l_iter; + l_iter = l; do { - if (curloop->v == v) { - return curloop; + if (l_iter->v == v) { + return l_iter; } - - curloop = bmesh_radial_nextloop(curloop); - } while (curloop != l); + } while ((l_iter = bmesh_radial_nextloop(l_iter)) != l); return NULL; } -BMLoop *bmesh_radial_find_next_facevert(BMLoop *l, BMVert *v) +BMLoop *bmesh_radial_find_next_faceloop(BMLoop *l, BMVert *v) { - BMLoop *curloop; - curloop = bmesh_radial_nextloop(l); + BMLoop *l_iter; + l_iter = bmesh_radial_nextloop(l); do { - if (curloop->v == v) { - return curloop; + if (l_iter->v == v) { + return l_iter; } - - curloop = bmesh_radial_nextloop(curloop); - } while (curloop != l); + } while ((l_iter = bmesh_radial_nextloop(l_iter)) != l); return l; } @@ -520,13 +515,15 @@ int bmesh_radial_find_face(BMEdge *e, BMFace *f) int bmesh_radial_count_facevert(BMLoop *l, BMVert *v) { - BMLoop *curloop; + BMLoop *l_iter; int count = 0; - curloop = l; + l_iter = l; do { - if (curloop->v == v) count++; - curloop = bmesh_radial_nextloop(curloop); - } while (curloop != l); + if (l_iter->v == v) { + count++; + } + } while ((l_iter = bmesh_radial_nextloop(l_iter)) != l); + return count; } @@ -918,10 +915,6 @@ BMEdge *bmesh_disk_existedge(BMVert *v1, BMVert *v2) } /* end disk cycle routine */ -BMLoop *bmesh_radial_nextloop(BMLoop *l) -{ - return l->radial_next; -} void bmesh_radial_append(BMEdge *e, BMLoop *l) { @@ -1017,7 +1010,7 @@ int bmesh_disk_count_facevert(BMVert *v) * cycle * */ -BMLoop *bmesh_radial_find_first_facevert(BMLoop *l, BMVert *v) +BMLoop *bmesh_radial_find_first_faceloop(BMLoop *l, BMVert *v) { BMLoop *curloop; curloop = l; @@ -1031,7 +1024,7 @@ BMLoop *bmesh_radial_find_first_facevert(BMLoop *l, BMVert *v) return NULL; } -BMLoop *bmesh_radial_find_next_facevert(BMLoop *l, BMVert *v) +BMLoop *bmesh_radial_find_next_faceloop(BMLoop *l, BMVert *v) { BMLoop *curloop; curloop = bmesh_radial_nextloop(l); diff --git a/source/blender/bmesh/intern/bmesh_structure.h b/source/blender/bmesh/intern/bmesh_structure.h index 74da6cc3c58..4be577ca476 100644 --- a/source/blender/bmesh/intern/bmesh_structure.h +++ b/source/blender/bmesh/intern/bmesh_structure.h @@ -43,7 +43,7 @@ struct ListBase; void remove_loop_radial_link(BMLoop *l); -/*DOUBLE CIRCULAR LINKED LIST FUNCTIONS*/ +/* DOUBLE CIRCULAR LINKED LIST FUNCTIONS */ void bmesh_cycle_append(void *h, void *nt); int bmesh_cycle_remove(void *h, void *remn); int bmesh_cycle_validate(int len, void *h); @@ -52,7 +52,7 @@ int bmesh_cycle_length(void *h); /* LOOP CYCLE MANAGEMENT */ int bmesh_loop_validate(BMFace *f); -/*DISK CYCLE MANAGMENT*/ +/* DISK CYCLE MANAGMENT */ int bmesh_disk_append_edge(struct BMEdge *e, struct BMVert *v); void bmesh_disk_remove_edge(struct BMEdge *e, struct BMVert *v); struct BMEdge *bmesh_disk_nextedge(struct BMEdge *e, struct BMVert *v); @@ -61,17 +61,17 @@ int bmesh_disk_count_facevert(struct BMVert *v); struct BMEdge *bmesh_disk_find_first_faceedge(struct BMEdge *e, struct BMVert *v); struct BMEdge *bmesh_disk_find_next_faceedge(struct BMEdge *e, struct BMVert *v); -/*RADIAL CYCLE MANAGMENT*/ +/* RADIAL CYCLE MANAGMENT */ void bmesh_radial_append(struct BMEdge *e, struct BMLoop *l); void bmesh_radial_remove_loop(struct BMLoop *l, struct BMEdge *e); int bmesh_radial_find_face(struct BMEdge *e, struct BMFace *f); struct BMLoop *bmesh_radial_nextloop(struct BMLoop *l); int bmesh_radial_count_facevert(struct BMLoop *l, struct BMVert *v); -struct BMLoop *bmesh_radial_find_first_facevert(struct BMLoop *l, struct BMVert *v); -struct BMLoop *bmesh_radial_find_next_facevert(struct BMLoop *l, struct BMVert *v); +struct BMLoop *bmesh_radial_find_first_faceloop(struct BMLoop *l, struct BMVert *v); +struct BMLoop *bmesh_radial_find_next_faceloop(struct BMLoop *l, struct BMVert *v); int bmesh_radial_validate(int radlen, struct BMLoop *l); -/*EDGE UTILITIES*/ +/* EDGE UTILITIES */ int bmesh_vert_in_edge(struct BMEdge *e, struct BMVert *v); int bmesh_verts_in_edge(struct BMVert *v1, struct BMVert *v2, struct BMEdge *e); int bmesh_edge_swapverts(struct BMEdge *e, struct BMVert *orig, struct BMVert *newv); /*relink edge*/ diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c index 46124590d5e..2ee70bb4644 100644 --- a/source/blender/bmesh/operators/bmo_dissolve.c +++ b/source/blender/bmesh/operators/bmo_dissolve.c @@ -170,7 +170,7 @@ void dissolvefaces_exec(BMesh *bm, BMOperator *op) BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { if (BM_vert_edge_count(v) == 2) { - BM_vert_collapse_edges(bm, v->e, v); + BM_vert_collapse_edge(bm, v->e, v); } } } @@ -221,7 +221,7 @@ void dissolve_edgeloop_exec(BMesh *bm, BMOperator *op) /* clean up extreneous 2-valence vertice */ for (i = 0; i < BLI_array_count(verts); i++) { if (verts[i]->e) { - BM_vert_collapse_edges(bm, verts[i]->e, verts[i]); + BM_vert_collapse_edge(bm, verts[i]->e, verts[i]); } } @@ -275,7 +275,7 @@ void dissolveedges_exec(BMesh *bm, BMOperator *op) BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) { if (BMO_elem_flag_test(bm, v, VERT_MARK)) { if (BM_vert_edge_count(v) == 2) { - BM_vert_collapse_edges(bm, v->e, v); + BM_vert_collapse_edge(bm, v->e, v); } } } @@ -550,7 +550,7 @@ void dissolvelimit_exec(BMesh *bm, BMOperator *op) BMVert *v = (BMVert *)weight_elems[i].ele; /* check twice because cumulative effect could disolve over angle limit */ if (BM_vert_edge_angle(bm, v) < angle_limit) { - BM_vert_collapse_edges(bm, v->e, v); /* join edges */ + BM_vert_collapse_edge(bm, v->e, v); /* join edges */ } } } diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 540e5da29e7..23e4ad7e289 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -475,7 +475,7 @@ static BMVert *BME_bevel_wire(BMesh *bm, BMVert *v, float value, int res, int UN //void BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, int calcnorm) { //hrm, why is there a fac here? it just removes a vert - BM_vert_collapse_edges(bm, v->e, v); + BM_vert_collapse_edge(bm, v->e, v); } return v1; @@ -527,14 +527,14 @@ static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(opti ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->prev->radial_next->f, kl->f, kl->prev->e); - BM_vert_collapse_edges(bm, ke, kv); + BM_vert_collapse_edge(bm, ke, kv); } else { BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e); ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->next->radial_next->f, kl->f, kl->next->e); - BM_vert_collapse_edges(bm, ke, kv); + BM_vert_collapse_edge(bm, ke, kv); } /* find saved loop pointer */ l = se->l; @@ -573,14 +573,14 @@ static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(opti ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->prev->radial_next->f, kl->f, kl->prev->e); - BM_vert_collapse_edges(bm, ke, kv); + BM_vert_collapse_edge(bm, ke, kv); } else { BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e); ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->next->radial_next->f, kl->f, kl->next->e); - BM_vert_collapse_edges(bm, ke, kv); + BM_vert_collapse_edge(bm, ke, kv); } /* find saved loop pointer */ l = se->l; |