update bmesh design doc and added some comments to the code from it.
authorCampbell Barton <ideasman42@gmail.com>
Mon, 27 Feb 2012 12:25:47 +0000 (12:25 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 27 Feb 2012 12:25:47 +0000 (12:25 +0000)
source/blender/bmesh/bmesh_class.h
source/blender/bmesh/bmesh_operator_api.h
source/blender/bmesh/bmesh_walkers.h

index 5a0158a7b9a91db4283fd551c4949def5c8ae9bb..d800fe7bf77534895a45957c50c852c50ea6fe82 100644 (file)
@@ -30,7 +30,7 @@
 /* bmesh data structures */
 
 /* dissable holes for now, these are ifdef'd because they use more memory and cant be saved in DNA currently */
-// define USE_BMESH_HOLES
+#define USE_BMESH_HOLES
 
 struct BMesh;
 struct BMVert;
@@ -95,7 +95,7 @@ typedef struct BMLoop {
        /* notice no flags layer */
 
        struct BMVert *v;
-       struct BMEdge *e;
+       struct BMEdge *e; /* edge, using verts (v, next->v) */
        struct BMFace *f;
 
        struct BMLoop *radial_next, *radial_prev;
index f6d33dd1b5059ec85f5a4c7ca58471c3b3e50236..24b63815ec83ba3fbea40b30cf1563423e29bc1c 100644 (file)
@@ -90,24 +90,26 @@ BM_INLINE void  _bmo_elem_flag_toggle(BMesh *bm, BMFlagLayer *oflags, const shor
 
 /* slot type arrays are terminated by the last member
  * having a slot type of 0.*/
-#define BMO_OP_SLOT_SENTINEL   0
-#define BMO_OP_SLOT_BOOL               1
-#define BMO_OP_SLOT_INT                        2
-#define BMO_OP_SLOT_FLT                        3
-#define BMO_OP_SLOT_PNT                        4
-#define BMO_OP_SLOT_MAT                        5
-#define BMO_OP_SLOT_VEC                        8
-
-/* after BMO_OP_SLOT_VEC, everything is
-
- * dynamically allocated arrays.  we
- * leave a space in the identifiers
- * for future growth.
- */
-//it's very important this remain a power of two
-#define BMO_OP_SLOT_ELEMENT_BUF                9
-#define BMO_OP_SLOT_MAPPING                    10
-#define BMO_OP_SLOT_TOTAL_TYPES                11
+enum {
+       BMO_OP_SLOT_SENTINEL = 0,
+       BMO_OP_SLOT_BOOL = 1,
+       BMO_OP_SLOT_INT = 2,
+       BMO_OP_SLOT_FLT = 3,
+
+       /* normally store pointers to object, scene,
+        * _never_ store arrays corresponding to mesh elements with this */
+       BMO_OP_SLOT_PNT = 4,
+       BMO_OP_SLOT_MAT = 5,
+       BMO_OP_SLOT_VEC = 8,
+
+       /* after BMO_OP_SLOT_VEC, everything is dynamically allocated arrays.
+        * We leave a space in the identifiers for future growth.
+        *
+        * it's very important this remain a power of two */
+       BMO_OP_SLOT_ELEMENT_BUF = 9, /* list of verts/edges/faces */
+       BMO_OP_SLOT_MAPPING = 10 /* simple hash map */
+};
+#define BMO_OP_SLOT_TOTAL_TYPES 11
 
 /* please ignore all these structures, don't touch them in tool code, except
  * for when your defining an operator with BMOpDefine.*/
index 9dff8cd98fb2bb2373b6aacda757e8b4e69f7a56..de8da23aec7a3016eaa62123b660aceb8b93d58e 100644 (file)
@@ -40,9 +40,9 @@ typedef enum {
 
 /*Walkers*/
 typedef struct BMWalker {
-       void (*begin) (struct BMWalker *walker, void *start);
-       void *(*step) (struct BMWalker *walker);
-       void *(*yield)(struct BMWalker *walker);
+       void  (*begin) (struct BMWalker *walker, void *start);
+       void *(*step)  (struct BMWalker *walker);
+       void *(*yield) (struct BMWalker *walker);
        int structsize;
        BMWOrder order;
        int valid_mask;
@@ -54,6 +54,7 @@ typedef struct BMWalker {
        BLI_mempool *worklist;
        ListBase states;
 
+       /* these masks are to be tested against elements BMO_elem_flag_test() */
        short mask_vert;
        short mask_edge;
        short mask_loop;