Final merge of HEAD (bf-blender) into the orange branch.
[blender.git] / source / blender / blenlib / BLI_editVert.h
index 60c72282582ab895ab7b20e006d69d982ee4128d..315498bab4c7ea1062b41a8e22f2c4709e8ba731 100644 (file)
 #ifndef BLI_EDITVERT_H
 #define BLI_EDITVERT_H
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+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;
-       unsigned char f, h, f1, hash;
-       int     totweight;                              /* __NLA */
+       unsigned char f, h, f1, f2;
+       short fast;     /* only 0 or 1, for editmesh_fastmalloc */
+       short   totweight;                              /* __NLA */
+       int hash;
        struct MDeformWeight *dw;       /* __NLA */
+       int keyindex; /* original index #, for restoring  key information */
 } EditVert;
 
+struct EditEdge;
+
+typedef struct HashEdge {
+       struct EditEdge *eed;
+       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;
-       short f,h;
-       short f1, dir;
+       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;
+       short fast;             /* only 0 or 1, for editmesh_fastmalloc */
+       short fgoni;            /* index for fgon, for search */
+       HashEdge hash;
 } EditEdge;
 
-typedef struct EditVlak
+/* note; changing this also might affect the undo copy in editmesh.c */
+typedef struct EditFace
 {
-       struct EditVlak *next, *prev;
+       struct EditFace *next, *prev;
        struct EditVert *v1, *v2, *v3, *v4;
        struct EditEdge *e1, *e2, *e3, *e4;
-       float n[3];
-       float uv[4][2];
-       unsigned int col[4];
-       struct TFace *tface;    /* a pointer to original tface. */
+       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];
+       struct TFace tf;        /* a copy of original tface. */
        unsigned char mat_nr, flag;
-       unsigned char f, f1;
-} EditVlak;
+       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
+{
+       ListBase verts, edges, faces;
+       HashEdge *hashedgetab;
+       
+       /* this is for the editmesh_fastmalloc */
+       EditVert *allverts, *curvert;
+       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