bmesh code cleanup
* minor edits to header * make BM_vert_dissolve() easier to read.
This commit is contained in:
parent
e20d09f079
commit
b4b7d809f1
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue