diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-02-28 23:30:44 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-02-28 23:30:44 +0400 |
commit | dcfd1dd7e2bf13a68ae02f471f08e15ef400a9e7 (patch) | |
tree | 97c06db07e389bde54dbad2767f4d10b38b1fce6 /source/blender/bmesh/intern/bmesh_core.c | |
parent | 2a7f1af61ec8e11e73e2c16ca5579baca04bf78a (diff) |
code cleanup: de-duplicate bmesh face creation code,
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_core.c')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_core.c | 97 |
1 files changed, 45 insertions, 52 deletions
diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index dbf7239fb42..290668de10b 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -52,7 +52,7 @@ static int bm_edge_splice(BMesh *bm, BMEdge *e, BMEdge *etarget); #endif -BMVert *BM_vert_create(BMesh *bm, const float co[3], const struct BMVert *example) +BMVert *BM_vert_create(BMesh *bm, const float co[3], const BMVert *example) { BMVert *v = BLI_mempool_calloc(bm->vpool); @@ -236,6 +236,40 @@ BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short co return f2; } +/** + * only create the face, since this calloc's the length is initialized to 0, + * leave adding loops to the caller. + */ +BM_INLINE BMFace *bm_face_create__internal(BMesh *bm) +{ + BMFace *f; + + f = BLI_mempool_calloc(bm->fpool); + +#ifdef USE_DEBUG_INDEX_MEMCHECK + DEBUG_MEMCHECK_INDEX_INVALIDATE(f) +#else + BM_elem_index_set(f, -1); /* set_ok_invalid */ +#endif + + bm->elem_index_dirty |= BM_FACE; /* may add to middle of the pool */ + + bm->totface++; + + f->head.htype = BM_FACE; + + /* allocate flag */ + f->oflags = BLI_mempool_calloc(bm->toolflagpool); + + CustomData_bmesh_set_default(&bm->pdata, &f->head.data); + +#ifdef USE_BMESH_HOLES + f->totbounds = 0; +#endif + + return f; +} + BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, int nodouble) { BMFace *f = NULL; @@ -257,20 +291,8 @@ BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, BLI_assert(f == NULL); } } - - f = BLI_mempool_calloc(bm->fpool); -#ifdef USE_DEBUG_INDEX_MEMCHECK - DEBUG_MEMCHECK_INDEX_INVALIDATE(f) -#else - BM_elem_index_set(f, -1); /* set_ok_invalid */ -#endif - - bm->elem_index_dirty |= BM_FACE; /* may add to middle of the pool */ - - bm->totface++; - - f->head.htype = BM_FACE; + f = bm_face_create__internal(bm); startl = lastl = bm_face_boundary_add(bm, f, verts[0], edges[0]); @@ -287,19 +309,10 @@ BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, lastl = l; } - /* allocate flag */ - f->oflags = BLI_mempool_calloc(bm->toolflagpool); - - CustomData_bmesh_set_default(&bm->pdata, &f->head.data); - startl->prev = lastl; lastl->next = startl; f->len = len; - -#ifdef USE_BMESH_HOLES - f->totbounds = 0; -#endif BM_CHECK_ELEMENT(bm, f); @@ -608,7 +621,7 @@ void BM_vert_kill(BMesh *bm, BMVert *v) e = v->e; while (v->e) { - nexte = bm_disk_edge_next(e, v); + nexte = bmesh_disk_edge_next(e, v); BM_edge_kill(bm, e); e = nexte; } @@ -804,7 +817,7 @@ static int UNUSED_FUNCTION(count_flagged_disk)(BMVert *v, int flag) do { i += BM_ELEM_API_FLAG_TEST(e, flag) ? 1 : 0; - e = bm_disk_edge_next(e, v); + e = bmesh_disk_edge_next(e, v); } while (e != v->e); return i; @@ -834,7 +847,7 @@ static int disk_is_flagged(BMVert *v, int flag) l = l->radial_next; } while (l != e->l); - e = bm_disk_edge_next(e, v); + e = bmesh_disk_edge_next(e, v); } while (e != v->e); return TRUE; @@ -1034,40 +1047,20 @@ error: /* BMESH_TODO - this is only used once, investigate sharing code with BM_face_create */ -static BMFace *bm_face_create__internal(BMesh *bm, BMFace *UNUSED(example)) +static BMFace *bm_face_create__sfme(BMesh *bm, BMFace *UNUSED(example)) { BMFace *f; #ifdef USE_BMESH_HOLES BMLoopList *lst; #endif - f = BLI_mempool_calloc(bm->fpool); -#ifdef USE_BMESH_HOLES - lst = BLI_mempool_calloc(bm->looplistpool); -#endif + f = bm_face_create__internal(bm); - f->head.htype = BM_FACE; #ifdef USE_BMESH_HOLES + lst = BLI_mempool_calloc(bm->looplistpool); BLI_addtail(&f->loops, lst); #endif -#ifdef USE_DEBUG_INDEX_MEMCHECK - DEBUG_MEMCHECK_INDEX_INVALIDATE(f) -#else - BM_elem_index_set(f, -1); /* set_ok_invalid */ -#endif - - bm->elem_index_dirty |= BM_FACE; /* may add to middle of the pool */ - - bm->totface++; - - /* allocate flag */ - f->oflags = BLI_mempool_calloc(bm->toolflagpool); - - CustomData_bmesh_set_default(&bm->pdata, &f->head.data); - - f->len = 0; - #ifdef USE_BMESH_HOLES f->totbounds = 1; #endif @@ -1144,7 +1137,7 @@ BMFace *bmesh_sfme(BMesh *bm, BMFace *f, BMVert *v1, BMVert *v2, /* allocate new edge between v1 and v2 */ e = BM_edge_create(bm, v1, v2, example, FALSE); - f2 = bm_face_create__internal(bm, f); + f2 = bm_face_create__sfme(bm, f); f1loop = bm_loop_create(bm, v2, e, f, v2loop); f2loop = bm_loop_create(bm, v1, e, f2, v1loop); @@ -1436,7 +1429,7 @@ BMEdge *bmesh_jekv(BMesh *bm, BMEdge *ke, BMVert *kv, const short check_edge_dou len = bmesh_disk_count(kv); if (len == 2) { - oe = bm_disk_edge_next(ke, kv); + oe = bmesh_disk_edge_next(ke, kv); tv = bmesh_edge_other_vert_get(ke, kv); ov = bmesh_edge_other_vert_get(oe, kv); halt = bmesh_verts_in_edge(kv, tv, oe); /* check for double edge */ @@ -1953,7 +1946,7 @@ static BMVert *bm_urmv_loop(BMesh *bm, BMLoop *sl) * will leave the original sv on some *other* fan (not the * one-face fan that holds the unglue face). */ while (sv->e == sl->e || sv->e == sl->prev->e) { - sv->e = bm_disk_edge_next(sv->e, sv); + sv->e = bmesh_disk_edge_next(sv->e, sv); } /* Split all fans connected to the vert, duplicating it for |