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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-02-23 13:26:53 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-23 13:26:53 +0400
commit09ee59c669dfa51bab22fe2552d619763a8c98a3 (patch)
treebb656638c2f686ef43166e26ed2a48351f8a543d /source
parentbc02db27c5461a8228ea8d06325a2170998dbb72 (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.h2
-rw-r--r--source/blender/bmesh/intern/bmesh_iterators.c12
-rw-r--r--source/blender/bmesh/intern/bmesh_mods.c14
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.c21
-rw-r--r--source/blender/bmesh/intern/bmesh_structure.c59
-rw-r--r--source/blender/bmesh/intern/bmesh_structure.h12
-rw-r--r--source/blender/bmesh/operators/bmo_dissolve.c8
-rw-r--r--source/blender/bmesh/tools/BME_bevel.c10
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;