From b4b7d809f1da75a9c3a4d0a0b54eed5f2e3ea5c1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 25 Feb 2012 23:41:31 +0000 Subject: bmesh code cleanup * minor edits to header * make BM_vert_dissolve() easier to read. --- source/blender/bmesh/bmesh.h | 12 +++---- source/blender/bmesh/bmesh_operator_api.h | 12 +++++++ source/blender/bmesh/intern/bmesh_mods.c | 37 ++++++++-------------- .../bmesh/intern/bmesh_operator_api_inline.c | 8 +---- 4 files changed, 32 insertions(+), 37 deletions(-) (limited to 'source/blender') diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h index c04bc919e5a..86c0d4b534f 100644 --- a/source/blender/bmesh/bmesh.h +++ b/source/blender/bmesh/bmesh.h @@ -144,12 +144,12 @@ BMFace *BM_face_create_quad_tri(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v3, B BMFace *BM_face_create_ngon(BMesh *bm, BMVert *v1, BMVert *v2, BMEdge **edges, int len, int nodouble); /* stuff for dealing with header flags */ -#define BM_elem_flag_test(ele, hflag) _bm_elem_flag_test (&(ele)->head, hflag) -#define BM_elem_flag_enable(ele, hflag) _bm_elem_flag_enable (&(ele)->head, hflag) -#define BM_elem_flag_disable(ele, hflag) _bm_elem_flag_disable (&(ele)->head, hflag) -#define BM_elem_flag_set(ele, hflag, val) _bm_elem_flag_set (&(ele)->head, hflag, val) -#define BM_elem_flag_toggle(ele, hflag) _bm_elem_flag_toggle (&(ele)->head, hflag) -#define BM_elem_flag_merge(ele_a, ele_b) _bm_elem_flag_merge (&(ele_a)->head, &(ele_b)->head) +#define BM_elem_flag_test( ele, hflag) _bm_elem_flag_test (&(ele)->head, hflag) +#define BM_elem_flag_enable( ele, hflag) _bm_elem_flag_enable (&(ele)->head, hflag) +#define BM_elem_flag_disable(ele, hflag) _bm_elem_flag_disable (&(ele)->head, hflag) +#define BM_elem_flag_set( ele, hflag, val) _bm_elem_flag_set (&(ele)->head, hflag, val) +#define BM_elem_flag_toggle( ele, hflag) _bm_elem_flag_toggle (&(ele)->head, hflag) +#define BM_elem_flag_merge( ele_a, ele_b) _bm_elem_flag_merge (&(ele_a)->head, &(ele_b)->head) BM_INLINE char _bm_elem_flag_test(const BMHeader *element, const char hflag); BM_INLINE void _bm_elem_flag_enable(BMHeader *element, const char hflag); diff --git a/source/blender/bmesh/bmesh_operator_api.h b/source/blender/bmesh/bmesh_operator_api.h index f7ff7ea71a6..f6d33dd1b50 100644 --- a/source/blender/bmesh/bmesh_operator_api.h +++ b/source/blender/bmesh/bmesh_operator_api.h @@ -76,6 +76,18 @@ extern "C" { struct BMesh; struct GHashIterator; +#define BMO_elem_flag_test( bm, ele, oflag) _bmo_elem_flag_test (bm, (ele)->oflags, oflag) +#define BMO_elem_flag_enable( bm, ele, oflag) _bmo_elem_flag_enable (bm, (ele)->oflags, oflag) +#define BMO_elem_flag_disable(bm, ele, oflag) _bmo_elem_flag_disable (bm, (ele)->oflags, oflag) +#define BMO_elem_flag_set( bm, ele, oflag, val) _bmo_elem_flag_set (bm, (ele)->oflags, oflag, val) +#define BMO_elem_flag_toggle( bm, ele, oflag) _bmo_elem_flag_toggle (bm, (ele)->oflags, oflag) + +BM_INLINE short _bmo_elem_flag_test(BMesh *bm, BMFlagLayer *oflags, const short oflag); +BM_INLINE void _bmo_elem_flag_enable(BMesh *bm, BMFlagLayer *oflags, const short oflag); +BM_INLINE void _bmo_elem_flag_disable(BMesh *bm, BMFlagLayer *oflags, const short oflag); +BM_INLINE void _bmo_elem_flag_set(BMesh *bm, BMFlagLayer *oflags, const short oflag, int val); +BM_INLINE void _bmo_elem_flag_toggle(BMesh *bm, BMFlagLayer *oflags, const short oflag); + /* slot type arrays are terminated by the last member * having a slot type of 0.*/ #define BMO_OP_SLOT_SENTINEL 0 diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index dff05df5e66..e182a72f456 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -59,28 +59,17 @@ #if 1 int BM_vert_dissolve(BMesh *bm, BMVert *v) { - BMIter iter; - BMEdge *e; - int len = 0; - - if (!v) { - return FALSE; - } - - e = BM_iter_new(&iter, bm, BM_EDGES_OF_VERT, v); - for ( ; e; e = BM_iter_step(&iter)) { - len++; - } + const int len = BM_vert_edge_count(v); if (len == 1) { - if (v->e) - BM_edge_kill(bm, v->e); - BM_vert_kill(bm, v); + BM_vert_kill(bm, v); /* will kill edges too */ return TRUE; } - - if (!BM_vert_is_manifold(bm, v)) { - if (!v->e) BM_vert_kill(bm, v); + else if (!BM_vert_is_manifold(bm, v)) { + if (!v->e) { + BM_vert_kill(bm, v); + return TRUE; + } else if (!v->e->l) { if (len == 2) { BM_vert_collapse_edge(bm, v->e, v); @@ -88,18 +77,18 @@ int BM_vert_dissolve(BMesh *bm, BMVert *v) else { /* this may be too harsh, we could do nothing here instead. * To test, connect 3 edges to a vert and dissolve the vert. It will be removed */ - BM_edge_kill(bm, v->e); - BM_vert_kill(bm, v); + + BM_vert_kill(bm, v); /* will kill edges too */ } + return TRUE; } else { return FALSE; } - - return TRUE; } - - return BM_disk_dissolve(bm, v); + else { + return BM_disk_dissolve(bm, v); + } } int BM_disk_dissolve(BMesh *bm, BMVert *v) diff --git a/source/blender/bmesh/intern/bmesh_operator_api_inline.c b/source/blender/bmesh/intern/bmesh_operator_api_inline.c index 7e5d6c3376f..733dcc36458 100644 --- a/source/blender/bmesh/intern/bmesh_operator_api_inline.c +++ b/source/blender/bmesh/intern/bmesh_operator_api_inline.c @@ -41,7 +41,7 @@ * ghash or a mapping slot to do it. */ /* flags 15 and 16 (1<<14 and 1<<15) are reserved for bmesh api use */ -BM_INLINE int _bmo_elem_flag_test(BMesh *bm, BMFlagLayer *oflags, const short oflag) +BM_INLINE short _bmo_elem_flag_test(BMesh *bm, BMFlagLayer *oflags, const short oflag) { return oflags[bm->stackdepth-1].f & oflag; } @@ -67,12 +67,6 @@ BM_INLINE void _bmo_elem_flag_toggle(BMesh *bm, BMFlagLayer *oflags, const short oflags[bm->stackdepth-1].f ^= oflag; } -#define BMO_elem_flag_test( bm, ele, oflag) _bmo_elem_flag_test (bm, (ele)->oflags, oflag) -#define BMO_elem_flag_enable( bm, ele, oflag) _bmo_elem_flag_enable (bm, (ele)->oflags, oflag) -#define BMO_elem_flag_disable(bm, ele, oflag) _bmo_elem_flag_disable (bm, (ele)->oflags, oflag) -#define BMO_elem_flag_set( bm, ele, oflag, val) _bmo_elem_flag_set (bm, (ele)->oflags, oflag, val) -#define BMO_elem_flag_toggle( bm, ele, oflag) _bmo_elem_flag_toggle (bm, (ele)->oflags, oflag) - BM_INLINE void BMO_slot_map_int_insert(BMesh *bm, BMOperator *op, const char *slotname, void *element, int val) { -- cgit v1.2.3