Revision: 18298
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18298
Author:   briggs
Date:     2009-01-03 21:26:29 +0100 (Sat, 03 Jan 2009)

Log Message:
-----------
-> Cleanup up of API flags

API flags now use dynamically allocated flag layers isntead
of the persistent flag reserverd for 'marking' elements
(hide, select, sharp, ect).

Modified Paths:
--------------
    branches/bmesh/bmesh/bmesh.h
    branches/bmesh/bmesh/intern/bmesh_construct.c
    branches/bmesh/bmesh/intern/bmesh_mesh.c
    branches/bmesh/bmesh/intern/bmesh_queries.c

Modified: branches/bmesh/bmesh/bmesh.h
===================================================================
--- branches/bmesh/bmesh/bmesh.h        2009-01-03 20:20:09 UTC (rev 18297)
+++ branches/bmesh/bmesh/bmesh.h        2009-01-03 20:26:29 UTC (rev 18298)
@@ -47,86 +47,68 @@
 struct BMEdge;
 struct BMFace;
 struct BMLoop;
+
 /*
-       all mesh elements should share this beginning layout
-       we can pack this a little tighter now... 
-       
-       BMHeader *next, *prev;
-       int EID;
-       int eflag1, eflag2;
-       short systemflag, type;
-       struct BMFlagLayer *flags;
+ * BMHeader
+ *
+ * All mesh elements begin with a BMHeader. This structure 
+ * hold several types of data
+ *
+ * 1: The type of the element (vert, edge, loop or face)
+ * 2: Persistant flags/markings (sharp, seam, select, hidden, ect)
+ * 3: Unique ID in the bmesh.
+ * 4: some elements for internal record keeping.
+ *
 */
 
-/* Defines for BMHeader->type*/
+/*BMHeader->type*/
 #define BM_VERT                                        1
 #define BM_EDGE                                        2
 #define BM_FACE                                        4
 #define BM_LOOP                                        8
 #define BM_ALL                                 BM_VERT | BM_EDGE | BM_FACE | 
BM_LOOP
 
-/*Masks for BMHeader->flag
-       Note: Its entirely possible that any temporal flags should be moved
-       into the dynamically allocated flag layers and only reserve 
BMHeader->flag
-       for things like select, hide, ect.
+/*BMHeader->flag*/
+#define BM_SELECT      (1<<0)
+#define BM_SEAM                (1<<1)
+#define BM_FGON                (1<<2)
+#define BM_HIDDEN      (1<<3)
+#define BM_SHARP       (1<<4)
+#define BM_SMOOTH      (1<<5)
 
-       The first 16 bits are reserved for the original element flags.
-       The next 5 (till BM_SMOOTH) are bmesh-added ones that replace
-       single variable flags.  The rest after that are temporary flags.
-*/     
-
-#define BM_SELECT      1 //redefinition of SELECT
-
-/*auxillery bmesh flags.  note, these should
-  become internal to the api eventually.
-  
-  start at the 17th flag.
- */
-#define BM_SEAM                (1<<16)
-#define BM_FGON                (1<<17)
-#define BM_HIDDEN      (1<<18)
-#define BM_SHARP       (1<<19)
-#define BM_SMOOTH      (1<<20) /* for faces */
-
-#define BM_DIRTY               (1<<21)                 /*Not used yet*/
-#define BM_NEW                 (1<<22)                 
-#define BM_OVERLAP             (1<<23)                 /*used by 
bmesh_verts_in_face*/
-#define BM_EDGEVERT    (1<<24)                         /*used by 
bmesh_make_ngon*/
-#define BM_DELETE              (1<<25)
-#define BM_AUX1                        (1<<26)                         
/*different for edges/verts/faces/ect*/
-#define BM_AUX2                        (1<<27)                         
/*different for edges/verts/faces/ect*/
-#define BM_AUX3                        (1<<28)                         
/*different for edges/verts/faces/ect*/
-#define BM_TEMP_FLAGS  BM_DIRTY|BM_NEW|BM_OVERLAP|BM_EDGEVERT|BM_DELETE
-
-/*All Mesh elements start with this structure*/
 typedef struct BMHeader
 {
        struct BMHeader *next, *prev;
-       int             EID;
-       int             flag;                                                   
        /*mesh flags, never to be (ab)used by the api itself!*/
+       int             EID;                                                    
        /*Consider removing this/making it ifdeffed for debugging*/
+       short           flag, type;                                             
                
        int                     eflag1, eflag2;                                 
        /*Flags used by eulers. Try and get rid of/minimize some of these*/
-       short           type, pad1, pad2, pad3;                         /*Type 
of element this is head to*/
-       struct BMFlagLayer *flags;                                      
/*Dynamically allocated block of flag layers for operators to use*/
+       struct BMFlagLayer *flags;                                              
/*Dynamically allocated block of flag layers for operators to use*/
 } BMHeader;
 
+typedef struct BMFlagLayer{
+       int f1;
+       short mask, pflag;
+}BMFlagLayer;
 
-/*Used for circular linked list functions*/
+#define BM_OVERLAP             (1<<0)                  /*used by 
bmesh_verts_in_face*/
+#define BM_EDGEVERT    (1<<1)                  /*used by bmesh_make_ngon*/
+
+
+/*
+ * BMNode
+ *
+ * Used for circular/linked list functions that form basis of
+ * adjacency system in BMesh. This should probably be hidden 
+ * somewhere since tool authors never need to know about it.
+ *
+*/
+
 typedef struct BMNode{
        struct BMNode *next, *prev;
        void *data;
 }BMNode;
 
-/*Used by operator API to give each operator private flag space
-       -Perhaps want to change this to have a union for storing 
float/long/pointer/ect
-       -pflag should be used for system/API stuff
-*/
 
-typedef struct BMFlagLayer{
-       int f1;
-       short mask, pflag;
-}BMFlagLayer;
-
-struct BMOperator;
 typedef struct BMesh
 {
        ListBase verts, edges, polys;
@@ -143,9 +125,9 @@
        int nextv, nexte, nextp, nextl;
        struct CustomData vdata, edata, pdata, ldata;
        int selectmode;
-       struct BLI_mempool *flagpool;     /*memory pool for dynamically 
allocated flag layers*/
-       int stackdepth;                   /*current depth of operator stack*/
-       int totflags, walkers;            /*total number of tool flag layers*/
+       struct BLI_mempool *flagpool;                                   
/*memory pool for dynamically allocated flag layers*/
+       int stackdepth;                                                         
        /*current depth of operator stack*/
+       int totflags, walkers;                                                  
/*total number of tool flag layers*/
 }BMesh;
 
 typedef struct BMVert

Modified: branches/bmesh/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/bmesh/bmesh/intern/bmesh_construct.c       2009-01-03 20:20:09 UTC 
(rev 18297)
+++ branches/bmesh/bmesh/intern/bmesh_construct.c       2009-01-03 20:26:29 UTC 
(rev 18298)
@@ -187,16 +187,15 @@
        BMFace *f = NULL;
        int overlap = 0, i;
 
-
        if(nodouble){
                if(len > VERT_BUF_SIZE)
                        verts = MEM_callocN(sizeof(BMVert *) * len, "bmesh make 
ngon vertex array");
                for(i = 0; i < len; i++){
-                       if(!bmesh_test_sysflag((BMHeader*)(edges[i]->v1), 
BM_EDGEVERT)){
-                               bmesh_set_sysflag((BMHeader*)(edges[i]->v1), 
BM_EDGEVERT);
+                       if(!BMO_TestFlag(bm, edges[i]->v1, BM_EDGEVERT)){
+                               BMO_SetFlag(bm, edges[i]->v1, BM_EDGEVERT);
                                verts[i] = edges[i]->v1;
-                       } else 
if(!bmesh_test_sysflag((BMHeader*)(edges[i]->v2), BM_EDGEVERT)) {
-                               bmesh_set_sysflag((BMHeader*)(edges[i]->v2), 
BM_EDGEVERT);
+                       } else if(!BMO_TestFlag(bm, edges[i]->v2, BM_EDGEVERT)) 
{
+                               BMO_SetFlag(bm, edges[i]->v2, BM_EDGEVERT);
                                verts[i] =      edges[i]->v2;
                        }
                }
@@ -205,8 +204,8 @@
                
                /*clear flags*/
                for(i = 0; i < len; i++){
-                       bmesh_clear_sysflag((BMHeader*)(edges[i]->v1), 
BM_EDGEVERT);
-                       bmesh_clear_sysflag((BMHeader*)(edges[i]->v2), 
BM_EDGEVERT);
+                       BMO_ClearFlag(bm, edges[i]->v1, BM_EDGEVERT);
+                       BMO_ClearFlag(bm, edges[i]->v2, BM_EDGEVERT);
                }
                
                if(len > VERT_BUF_SIZE)

Modified: branches/bmesh/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/bmesh/intern/bmesh_mesh.c    2009-01-03 20:20:09 UTC (rev 
18297)
+++ branches/bmesh/bmesh/intern/bmesh_mesh.c    2009-01-03 20:26:29 UTC (rev 
18298)
@@ -88,33 +88,6 @@
        return 0;
 }
 
-/*
- * CLEAR TEMP FLAGS
- *
- * Clears all temporary flags at end of the modelling loop.
- * May need to move this to operator finishing function?
- *
-*/
-static void clear_temp_flags(BMesh *bm)
-{
-       BMIter verts;
-       BMIter edges;
-       BMIter loops;
-       BMIter faces;
-
-       BMVert *v;
-       BMEdge *e;
-       BMLoop *l;
-       BMFace *f;
-
-       for(v = BMIter_New(&verts, bm, BM_VERTS, bm ); v; v = 
BMIter_Step(&verts)) bmesh_clear_sysflag(&(v->head), BM_TEMP_FLAGS);
-       for(e = BMIter_New(&edges, bm, BM_EDGES, bm ); e; e = 
BMIter_Step(&edges)) bmesh_clear_sysflag(&(e->head), BM_TEMP_FLAGS);
-       for(f = BMIter_New(&faces, bm, BM_FACES, bm ); f; f = 
BMIter_Step(&faces)){
-               bmesh_clear_sysflag(&(f->head), BM_TEMP_FLAGS);
-               for(l = BMIter_New(&loops, bm, BM_LOOPS_OF_FACE, f ); l; l = 
BMIter_Step(&loops)) bmesh_clear_sysflag(&(l->head), BM_TEMP_FLAGS);
-       }
-}
-
 /*     
  *     BMESH MAKE MESH
  *
@@ -293,6 +266,5 @@
 
        /*compute normals, clear temp flags and flush selections*/
        BM_Compute_Normals(bm);
-       clear_temp_flags(bm);
        bmesh_selectmode_flush(bm);
 }

Modified: branches/bmesh/bmesh/intern/bmesh_queries.c
===================================================================
--- branches/bmesh/bmesh/intern/bmesh_queries.c 2009-01-03 20:20:09 UTC (rev 
18297)
+++ branches/bmesh/bmesh/intern/bmesh_queries.c 2009-01-03 20:26:29 UTC (rev 
18298)
@@ -76,21 +76,20 @@
  * that appear in a given face
  *
 */
-
-int BM_Verts_In_Face(BMFace *f, BMVert **varr, int len)
+int BM_Verts_In_Face(BMesh *bm, BMFace *f, BMVert **varr, int len)
 {
        BMLoop *curloop = NULL;
        int i, count = 0;
        
-       for(i=0; i < len; i++) bmesh_set_sysflag(&(varr[i]->head), BM_OVERLAP);
+       for(i=0; i < len; i++) BMO_SetFlag(bm, varr[i], BM_OVERLAP);
 
        curloop = f->loopbase;
        do{
-               if(bmesh_test_sysflag(&(curloop->v->head), BM_OVERLAP)) count++;
+               if(BMO_TestFlag(bm, curloop->v, BM_OVERLAP)) count++;
                curloop = ((BMLoop*)(curloop->head.next));
        } while(curloop = ((BMLoop*)(curloop->head.next)));
 
-       for(i=0; i < len; i++) bmesh_clear_sysflag(&(varr[i]->head), 
BM_OVERLAP);
+       for(i=0; i < len; i++) BMO_ClearFlag(bm, varr[i], BM_OVERLAP);
 
        return count;
 }
@@ -490,7 +489,7 @@
        for(i=0; i < len; i++){
                f = BMIter_New(&vertfaces, bm, BM_FACES_OF_VERT, varr[i] );
                while(f){
-                       amount = BM_Verts_In_Face(f, varr, len);
+                       amount = BM_Verts_In_Face(bm, f, varr, len);
                        if(amount >= len){
                                if((len == f->len) && existface)
                                        *existface = f;


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to