bmesh minor api edits to be a little more typesafe.
authorCampbell Barton <ideasman42@gmail.com>
Mon, 27 Feb 2012 14:57:09 +0000 (14:57 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 27 Feb 2012 14:57:09 +0000 (14:57 +0000)
source/blender/bmesh/bmesh.h
source/blender/bmesh/bmesh_marking.h
source/blender/bmesh/intern/bmesh_construct.c
source/blender/bmesh/intern/bmesh_inline.c
source/blender/bmesh/intern/bmesh_marking.c
source/blender/bmesh/intern/bmesh_newcore.c
source/blender/bmesh/intern/bmesh_private.h
source/blender/bmesh/operators/bmo_subdivide.c
source/blender/editors/mesh/bmesh_tools.c

index c72f846ed2646b1a96d6570659300035de366e2b..1b15e5497a88f8996f246caf4bcf525b4246d235 100644 (file)
@@ -144,12 +144,12 @@ BMFace *BM_face_create_ngon(BMesh *bm, BMVert *v1, BMVert *v2, BMEdge **edges, i
 #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);
-BM_INLINE void _bm_elem_flag_disable(BMHeader *element, const char hflag);
-BM_INLINE void _bm_elem_flag_set(BMHeader *ele, const char hflag, const int val);
-BM_INLINE void _bm_elem_flag_toggle(BMHeader *ele, const char hflag);
-BM_INLINE void _bm_elem_flag_merge(BMHeader *ele_a, BMHeader *ele_b);
+BM_INLINE char _bm_elem_flag_test(const BMHeader *head, const char hflag);
+BM_INLINE void _bm_elem_flag_enable(BMHeader *head, const char hflag);
+BM_INLINE void _bm_elem_flag_disable(BMHeader *head, const char hflag);
+BM_INLINE void _bm_elem_flag_set(BMHeader *head, const char hflag, const int val);
+BM_INLINE void _bm_elem_flag_toggle(BMHeader *head, const char hflag);
+BM_INLINE void _bm_elem_flag_merge(BMHeader *head_a, BMHeader *head_b);
 
 /* notes on BM_elem_index_set(...) usage,
  * Set index is sometimes abused as temp storage, other times we cant be
index 578cc137691ce3cb69eefa3adb6f604b46a0a850..3f9f666ab3f6fe53ae65b23b2c3d5856ede48a84 100644 (file)
@@ -35,13 +35,15 @@ typedef struct BMEditSelection
 } BMEditSelection;
 
 /* geometry hiding code */
-void BM_elem_hide_set(BMesh *bm, void *element, int hide);
+#define BM_elem_hide_set(bm, ele, hide) _bm_elem_hide_set(bm, &(ele)->head, hide)
+void _bm_elem_hide_set(BMesh *bm, BMHeader *ele, int hide);
 void BM_vert_hide_set(BMesh *bm, BMVert *v, int hide);
 void BM_edge_hide_set(BMesh *bm, BMEdge *e, int hide);
 void BM_face_hide_set(BMesh *bm, BMFace *f, int hide);
 
 /* Selection code */
-void BM_elem_select_set(BMesh *bm, void *element, int select);
+#define BM_elem_select_set(bm, ele, hide) _bm_elem_select_set(bm, &(ele)->head, hide)
+void _bm_elem_select_set(BMesh *bm, BMHeader *ele, int select);
 
 /* use BM_elem_flag_test(ele, BM_ELEM_SELECT) to test selection */
 
index dd122dbeab1565ecb78ac275d2788dbdb862caaf..c91bd83ed0e7f9f6051879cf5d9ddf6e43f19163 100644 (file)
@@ -567,7 +567,7 @@ void BM_elem_attrs_copy(BMesh *source_mesh, BMesh *target_mesh, const void *sour
 
        /* First we copy select */
        if (BM_elem_flag_test((BMElem *)sheader, BM_ELEM_SELECT)) {
-               BM_elem_select_set(target_mesh, target, TRUE);
+               BM_elem_select_set(target_mesh, (BMElem *)target, TRUE);
        }
        
        /* Now we copy flags */
index 0f2932fde2423a5840f38e838b21937661982096..f7a0fb5c45c3523f7363da02b6bc5f0620a733da 100644 (file)
 
 #include "bmesh.h"
 
-BM_INLINE char _bm_elem_flag_test(const BMHeader *ele, const char hflag)
+BM_INLINE char _bm_elem_flag_test(const BMHeader *head, const char hflag)
 {
-       return ele->hflag & hflag;
+       return head->hflag & hflag;
 }
 
-BM_INLINE void _bm_elem_flag_enable(BMHeader *ele, const char hflag)
+BM_INLINE void _bm_elem_flag_enable(BMHeader *head, const char hflag)
 {
-       ele->hflag |= hflag;
+       head->hflag |= hflag;
 }
 
-BM_INLINE void _bm_elem_flag_disable(BMHeader *ele, const char hflag)
+BM_INLINE void _bm_elem_flag_disable(BMHeader *head, const char hflag)
 {
-       ele->hflag &= ~hflag;
+       head->hflag &= ~hflag;
 }
 
-BM_INLINE void _bm_elem_flag_set(BMHeader *ele, const char hflag, const int val)
+BM_INLINE void _bm_elem_flag_set(BMHeader *head, const char hflag, const int val)
 {
-       if (val)  _bm_elem_flag_enable(ele,  hflag);
-       else      _bm_elem_flag_disable(ele, hflag);
+       if (val)  _bm_elem_flag_enable(head,  hflag);
+       else      _bm_elem_flag_disable(head, hflag);
 }
 
-BM_INLINE void _bm_elem_flag_toggle(BMHeader *ele, const char hflag)
+BM_INLINE void _bm_elem_flag_toggle(BMHeader *head, const char hflag)
 {
-       ele->hflag ^= hflag;
+       head->hflag ^= hflag;
 }
 
-BM_INLINE void _bm_elem_flag_merge(BMHeader *ele_a, BMHeader *ele_b)
+BM_INLINE void _bm_elem_flag_merge(BMHeader *head_a, BMHeader *head_b)
 {
-       ele_a->hflag = ele_b->hflag = ele_a->hflag | ele_b->hflag;
+       head_a->hflag = head_b->hflag = head_a->hflag | head_b->hflag;
 }
 
 
-BM_INLINE void _bm_elem_index_set(BMHeader *ele, const int index)
+BM_INLINE void _bm_elem_index_set(BMHeader *head, const int index)
 {
-       ele->index = index;
+       head->index = index;
 }
 
-BM_INLINE int _bm_elem_index_get(const BMHeader *ele)
+BM_INLINE int _bm_elem_index_get(const BMHeader *head)
 {
-       return ele->index;
+       return head->index;
 }
 
 #endif /* __BMESH_INLINE_C__ */
index 78c85e089e14fa0967c6a447cc99741462804af9..8548c7816a94658962024405abe3fda053f316a9 100644 (file)
@@ -475,19 +475,17 @@ int BM_mesh_count_flag(struct BMesh *bm, const char htype, const char hflag, int
 }
 
 /* note: by design, this will not touch the editselection history stuff */
-void BM_elem_select_set(struct BMesh *bm, void *element, int select)
+void _bm_elem_select_set(struct BMesh *bm, BMHeader *head, int select)
 {
-       BMHeader *head = element;
-
        switch (head->htype) {
                case BM_VERT:
-                       BM_vert_select_set(bm, (BMVert *)element, select);
+                       BM_vert_select_set(bm, (BMVert *)head, select);
                        break;
                case BM_EDGE:
-                       BM_edge_select_set(bm, (BMEdge *)element, select);
+                       BM_edge_select_set(bm, (BMEdge *)head, select);
                        break;
                case BM_FACE:
-                       BM_face_select_set(bm, (BMFace *)element, select);
+                       BM_face_select_set(bm, (BMFace *)head, select);
                        break;
                default:
                        BLI_assert(0);
@@ -881,25 +879,25 @@ void BM_face_hide_set(BMesh *bm, BMFace *f, int hide)
        }
 }
 
-void BM_elem_hide_set(BMesh *bm, void *element, int hide)
+void _bm_elem_hide_set(BMesh *bm, BMHeader *head, int hide)
 {
-       BMHeader *h = element;
-
        /* Follow convention of always deselecting before
         * hiding an element */
-       if (hide) {
-               BM_elem_select_set(bm, element, FALSE);
-       }
-
-       switch (h->htype) {
+       switch (head->htype) {
                case BM_VERT:
-                       BM_vert_hide_set(bm, element, hide);
+                       if (hide) BM_vert_select_set(bm, (BMVert *)head, FALSE);
+                       BM_vert_hide_set(bm, (BMVert *)head, hide);
                        break;
                case BM_EDGE:
-                       BM_edge_hide_set(bm, element, hide);
+                       if (hide) BM_edge_select_set(bm, (BMEdge *)head, FALSE);
+                       BM_edge_hide_set(bm, (BMEdge *)head, hide);
                        break;
                case BM_FACE:
-                       BM_face_hide_set(bm, element, hide);
+                       if (hide) BM_face_select_set(bm, (BMFace *)head, FALSE);
+                       BM_face_hide_set(bm, (BMFace *)head, hide);
+                       break;
+               default:
+                       BMESH_ASSERT(0);
                        break;
        }
 }
index e0f50481e005af29d5cc003edf0fc580ba38fd0b..0d1475aaec4fd6fd25cefb91410d4f8aba862db7 100644 (file)
@@ -330,7 +330,7 @@ BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len,
        return f;
 }
 
-int bmesh_element_check(BMesh *UNUSED(bm), void *element, const char htype)
+int bmesh_elem_check(BMesh *UNUSED(bm), void *element, const char htype)
 {
        BMHeader *head = element;
        int err = 0;
index 730078a5f4ded8e2c537abccdef06cced473efe4..c62a135bb4e7b91ed2a322f82e1d80110cd93d76 100644 (file)
@@ -40,13 +40,13 @@ struct Link;
 struct BMLoop;
 
 /* returns positive nonzero on error */
-int bmesh_element_check(BMesh *bm, void *element, const char htype);
+int bmesh_elem_check(BMesh *bm, void *element, const char htype);
 
 #define BM_CHECK_ELEMENT(bm, el)                                              \
-    if (bmesh_element_check(bm, el, ((BMHeader *)el)->htype)) {               \
+    if (bmesh_elem_check(bm, el, ((BMHeader *)el)->htype)) {               \
         printf("check_element failure, with code %i on line %i in file\n"     \
         "    \"%s\"\n\n",                                                     \
-        bmesh_element_check(bm, el, ((BMHeader *)el)->htype),                 \
+        bmesh_elem_check(bm, el, ((BMHeader *)el)->htype),                 \
         __LINE__, __FILE__);                                                  \
     }
 
index 9967764200ed3a92e8e900b05e5a6db45ec970e6..efbb31d9cb34d5b860c337cfc636cda653696b8f 100644 (file)
@@ -1031,7 +1031,7 @@ void BM_mesh_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float s
        
        if (seltype == SUBDIV_SELECT_INNER) {
                BMOIter iter;
-               BMHeader *ele;
+               BMElem *ele;
                // int i;
                
                ele = BMO_iter_new(&iter, bm, &op, "outinner", BM_EDGE|BM_VERT);
@@ -1041,7 +1041,7 @@ void BM_mesh_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float s
        }
        else if (seltype == SUBDIV_SELECT_LOOPCUT) {
                BMOIter iter;
-               BMHeader *ele;
+               BMElem *ele;
                // int i;
                
                /* deselect input */
@@ -1051,7 +1051,7 @@ void BM_mesh_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float s
                for ( ; ele; ele = BMO_iter_step(&iter)) {
                        BM_elem_select_set(bm, ele, TRUE);
 
-                       if (ele->htype == BM_VERT) {
+                       if (ele->head.htype == BM_VERT) {
                                BMEdge *e;
                                BMIter eiter;
 
index 7dd34c907b1b3afcaf7006e0ea432f7b82ca4b64..5bc400796135c86f49824fee4427eb730dcfa254 100644 (file)
@@ -245,7 +245,7 @@ static short EDBM_Extrude_edge(Object *obedit, BMEditMesh *em, const char hflag,
        BMEdge *edge;
        BMFace *f;
        ModifierData *md;
-       BMHeader *el;
+       BMElem *ele;
        
        BMO_op_init(bm, &extop, "extrudefaceregion");
        BMO_slot_from_hflag(bm, &extop, "edgefacein",
@@ -315,11 +315,11 @@ static short EDBM_Extrude_edge(Object *obedit, BMEditMesh *em, const char hflag,
 
        nor[0] = nor[1] = nor[2] = 0.0f;
        
-       BMO_ITER(el, &siter, bm, &extop, "geomout", BM_ALL) {
-               BM_elem_select_set(bm, el, TRUE);
+       BMO_ITER(ele, &siter, bm, &extop, "geomout", BM_ALL) {
+               BM_elem_select_set(bm, ele, TRUE);
 
-               if (el->htype == BM_FACE) {
-                       f = (BMFace *)el;
+               if (ele->head.htype == BM_FACE) {
+                       f = (BMFace *)ele;
                        add_normal_aligned(nor, f->no);
                };
        }