bmesh code cleanup
authorCampbell Barton <ideasman42@gmail.com>
Sat, 25 Feb 2012 23:41:31 +0000 (23:41 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 25 Feb 2012 23:41:31 +0000 (23:41 +0000)
* minor edits to header
* make BM_vert_dissolve() easier to read.

source/blender/bmesh/bmesh.h
source/blender/bmesh/bmesh_operator_api.h
source/blender/bmesh/intern/bmesh_mods.c
source/blender/bmesh/intern/bmesh_operator_api_inline.c

index c04bc919e5a13daa82f3664e23f0a97e7fcaecee..86c0d4b534fc228051e47a5eed0bd981d7e31077 100644 (file)
@@ -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);
index f7ff7ea71a686973d78fa480d50c39da41d3a1fe..f6d33dd1b5059ec85f5a4c7ca58471c3b3e50236 100644 (file)
@@ -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
index dff05df5e660c95db7139918a7b11c8703e4c213..e182a72f4563f7d6716dcd88dd6f831a403bf3f1 100644 (file)
 #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)
index 7e5d6c3376f8a49d6e6e1d89033c337147ea5fd9..733dcc364589470d35cacbccb5be04813ea06595 100644 (file)
@@ -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)
 {