Final merge of HEAD (bf-blender) into the orange branch.
[blender.git] / source / blender / blenlib / BLI_editVert.h
index 0ff57f8cde7414f58609f488a2b598074385a05a..315498bab4c7ea1062b41a8e22f2c4709e8ba731 100644 (file)
 #ifndef BLI_EDITVERT_H
 #define BLI_EDITVERT_H
 
+struct DerivedMesh;
+
+/* note; changing this also might affect the undo copy in editmesh.c */
 typedef struct EditVert
 {
-       struct EditVert *next, *prev, *vn;
+       struct EditVert *next, *prev;
+       union {
+               /* some lean storage for temporary usage 
+                * in editmesh routines
+                */
+               struct EditVert *v;
+               struct EditEdge *e;
+               struct EditFace *f;
+               float           *fp;
+               void            *p;
+               long             l;
+       } tmp;
        float no[3];
        float co[3];
        short xs, ys;
@@ -59,28 +73,51 @@ typedef struct HashEdge {
        struct HashEdge *next;
 } HashEdge;
 
+/* note; changing this also might affect the undo copy in editmesh.c */
 typedef struct EditEdge
 {
        struct EditEdge *next, *prev;
-       struct EditVert *v1, *v2, *vn;
+       struct EditVert *v1, *v2;
+       union {
+               /* some lean storage for temporary usage 
+                * in editmesh routines
+                */
+               struct EditVert *v;
+               struct EditEdge *e;
+               struct EditFace *f;
+               void            *p;
+               long             l;
+       } tmp;
        short f1, f2;   /* short, f1 is (ab)used in subdiv */
        unsigned char f, h, dir, seam;
        float crease;
-       int fast;               /* only 0 or 1, for editmesh_fastmalloc */
+       short fast;             /* only 0 or 1, for editmesh_fastmalloc */
+       short fgoni;            /* index for fgon, for search */
        HashEdge hash;
 } EditEdge;
 
+/* note; changing this also might affect the undo copy in editmesh.c */
 typedef struct EditFace
 {
        struct EditFace *next, *prev;
        struct EditVert *v1, *v2, *v3, *v4;
        struct EditEdge *e1, *e2, *e3, *e4;
+       union {
+               /* some lean storage for temporary usage 
+                * in editmesh routines
+                */
+               struct EditVert *v;
+               struct EditEdge *e;
+               struct EditFace *f;
+               void            *p;
+               long             l;
+       } tmp;
        float n[3], cent[3];
-       short xs, ys;           /* selection */
        struct TFace tf;        /* a copy of original tface. */
        unsigned char mat_nr, flag;
-       unsigned char f, f1, h, puno;
-       short fast;                     /* only 0 or 1, for editmesh_fastmalloc */
+       unsigned char f, f1, h;
+       unsigned char fast;                     /* only 0 or 1, for editmesh_fastmalloc */
+       unsigned char fgonf;            /* flag for fgon options */
 } EditFace;
 
 typedef struct EditMesh
@@ -93,6 +130,10 @@ typedef struct EditMesh
        EditEdge *alledges, *curedge;
        EditFace *allfaces, *curface;
        
+               /* DerivedMesh caches... note that derived cage can be equivalent
+                * to derived final, care should be taken on release.
+                */
+       struct DerivedMesh *derivedCage, *derivedFinal;
 } EditMesh;
 
 #endif