New particle collisions code:
[blender.git] / source / blender / makesdna / DNA_mesh_types.h
index 74f5d388723f9036fcde2e874ef7a6d02df314a4..bd2a6a996b554fbb6446fe77399ce388d8934959 100644 (file)
@@ -1,15 +1,12 @@
-/**
+/*
  * $Id$ 
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  */
 #ifndef DNA_MESH_TYPES_H
 #define DNA_MESH_TYPES_H
 
+/** \file DNA_mesh_types.h
+ *  \ingroup DNA
+ */
+
 #include "DNA_listBase.h"
 #include "DNA_ID.h"
+#include "DNA_customdata_types.h"
 
+struct DerivedMesh;
 struct Ipo;
 struct Key;
 struct Material;
 struct MVert;
+struct MEdge;
+struct MFace;
 struct MCol;
 struct MSticky;
 struct Mesh;
 struct OcInfo;
-struct bDeformGroup;
-
-typedef struct MFace {
-       unsigned int v1, v2, v3, v4;
-       char puno, mat_nr;
-       char edcode, flag;
-} MFace;
-
-typedef struct TFace {
-
-       /* this one gets interpreted as a image in texture.c  */
-       void *tpage;
-
-       float uv[4][2];         /* when you change this: also do function set_correct_uv in editmesh.c, and there are more locations that use the size of this part */
-       unsigned int col[4];
-       char flag, transp;
-       short mode, tile, pad;
-} TFace;
-
-typedef struct MDeformWeight { /* __NLA */
-       int                             def_nr;         /* __NLA */
-       float                   weight;         /* __NLA */
-       struct Bone             *data;          /* __NLA */     /* Runtime: Does not need to be valid in file */
-} MDeformWeight;                               /* __NLA */
-
-typedef struct MDeformVert {   /* __NLA */
-       struct MDeformWeight *dw;       /* __NLA */
-       int totweight;                          /* __NLA */
-       int reserved1;                          /* __NLA */     
-} MDeformVert;                                 /* __NLA */
-
-
-typedef struct MVert {
-       float   co[3];
-       short   no[3];
-       char flag, mat_nr;
-} MVert;
-
-
-typedef struct MCol {
-       char a, r, g, b;
-} MCol;
-
-
-typedef struct MSticky {
-       float co[2];
-} MSticky;
-
+struct Multires;
+struct PartialVisibility;
+struct EditMesh;
+struct AnimData;
 
 typedef struct Mesh {
        ID id;
+       struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */
 
        struct BoundBox *bb;
 
        ListBase effect;
-       ListBase disp;
        
-       struct Ipo *ipo;
+       struct Ipo *ipo;                // XXX depreceated... old animation system
        struct Key *key;
        struct Material **mat;
 
-       void *mface, *dface, *tface;
-       struct MVert *mvert;
-       struct MDeformVert *dvert;      /* __NLA */
-       struct MCol *mcol;
+       struct MFace *mface;    /* array of mesh object mode faces */
+       struct MTFace *mtface;  /* store face UV's and texture here */
+       struct TFace *tface;    /* depecrated, use mtface */
+       struct MVert *mvert;    /* array of verts */
+       struct MEdge *medge;    /* array of edges */
+       struct MDeformVert *dvert;      /* deformgroup vertices */
+       struct MCol *mcol;              /* array of colors, this must be the number of faces * 4 */
        struct MSticky *msticky;
        struct Mesh *texcomesh;
-       float *orco;
+       struct MSelect *mselect;
+       
+       struct EditMesh *edit_mesh;     /* not saved in file! */
+
+       struct CustomData vdata, edata, fdata;
+
+       int totvert, totedge, totface, totselect;
+       
+       /* the last selected vertex/edge/face are used for the active face however
+        * this means the active face must always be selected, this is to keep track
+        * of the last selected face and is similar to the old active face flag where
+        * the face does not need to be selected, -1 is inactive */
+       int act_face; 
        
-       struct OcInfo *oc;              /* not written in file */
-       void *sumohandle;
-    
-       int totvert, totface;
+       short texflag, editflag;
        
-       int texflag;
+       /* texture space, copied as one block in editobject.c */
        float loc[3];
        float size[3];
        float rot[3];
        
+       float cubemapsize;
+       
+       int drawflag;
        short smoothresh, flag;
-       short subdiv, subdivr, subdivdone;
-       short totcol;
-       short subsurftype; 
-       short reserved1;        /* Padding */
 
-       float cubemapsize, rtf;
+       short subdiv, subdivr;
+       short totcol;
+       short subsurftype;              /* only kept for backwards compat, not used anymore */
 
+       struct Multires *mr;            /* Multiresolution modeling data */
+       struct PartialVisibility *pv;
 } Mesh;
 
-
+/* deprecated by MTFace, only here for file reading */
+typedef struct TFace {
+       void *tpage;    /* the faces image for the active UVLayer */
+       float uv[4][2];
+       unsigned int col[4];
+       char flag, transp;
+       short mode, tile, unwrap;
+} TFace;
 
 /* **************** MESH ********************* */
 
 /* texflag */
-#define ME_AUTOSPACE   1
+#define AUTOSPACE      1
+
+/* me->editflag */
+#define ME_EDIT_MIRROR_X (1 << 0)
+#define ME_EDIT_MIRROR_Y (1 << 1) // unused so far
+#define ME_EDIT_MIRROR_Z (1 << 2) // unused so far
+
+#define ME_EDIT_PAINT_MASK (1 << 3)
+#define ME_EDIT_MIRROR_TOPO (1 << 4) // unused so far
+
 
 /* me->flag */
-#define ME_ISDONE              1
-#define ME_NOPUNOFLIP  2
+/* #define ME_ISDONE           1 */
+#define ME_DEPRECATED  2
 #define ME_TWOSIDED            4
 #define ME_UVEFFECT            8
 #define ME_VCOLEFFECT  16
@@ -149,68 +141,51 @@ typedef struct Mesh {
 #define ME_SMESH               64
 #define ME_SUBSURF             128
 #define ME_OPT_EDGES   256
+#define ME_DS_EXPAND   512
+
+/* me->drawflag, int */ 
+#define ME_DRAWEDGES   (1 << 0)
+#define ME_DRAWFACES   (1 << 1)
+#define ME_DRAWNORMALS (1 << 2)
+#define ME_DRAW_VNORMALS (1 << 3)
+
+#define ME_ALLEDGES            (1 << 4)
+#define ME_HIDDENEDGES  (1 << 5)
+
+#define ME_DRAWCREASES (1 << 6)
+#define ME_DRAWSEAMS    (1 << 7)
+#define ME_DRAWSHARP    (1 << 8)
+#define ME_DRAWBWEIGHTS        (1 << 9)
+
+#define ME_DRAWEXTRA_EDGELEN  (1 << 10)
+#define ME_DRAWEXTRA_FACEAREA (1 << 11)
+#define ME_DRAWEXTRA_FACEANG  (1 << 12)
+
+/* old global flags:
+#define G_DRAWEDGES            (1 << 18)
+#define G_DRAWFACES            (1 <<  7)
+#define G_DRAWNORMALS  (1 <<  6)
+#define G_DRAW_VNORMALS        (1 << 14)
+
+#define G_ALLEDGES             (1 << 11)
+#define G_HIDDENEDGES   (1 << 21)
+
+#define G_DRAWCREASES  (1 << 19)
+#define G_DRAWSEAMS     (1 << 20)
+#define G_DRAWSHARP     (1 << 28)
+#define G_DRAWBWEIGHTS (1 << 31)
+
+#define G_DRAW_EDGELEN  (1 << 22) 
+#define G_DRAW_FACEAREA (1 << 23)
+#define G_DRAW_EDGEANG  (1 << 24)
+*/
+
+
 
 /* Subsurf Type */
 #define ME_CC_SUBSURF          0
 #define ME_SIMPLE_SUBSURF      1
 
-/* puno = vertexnormal (mface) */
-#define ME_FLIPV1              1
-#define ME_FLIPV2              2
-#define ME_FLIPV3              4
-#define ME_FLIPV4              8
-#define ME_PROJXY              16
-#define ME_PROJXZ              32
-#define ME_PROJYZ              64
-
-/* edcode (mface) */
-#define ME_V1V2                        1
-#define ME_V2V3                        2
-#define ME_V3V1                        4
-#define ME_V3V4                        4
-#define ME_V4V1                        8
-
-/* flag (mface) */
-#define ME_SMOOTH              1
-
-
-#define TF_DYNAMIC             1
-/* #define TF_INVISIBLE        2 */
-#define TF_TEX                 4
-#define TF_SHAREDVERT  8
-#define TF_LIGHT               16
-
-#define TF_SHAREDCOL   64
-#define TF_TILES               128
-#define TF_BILLBOARD   256
-#define TF_TWOSIDE             512
-#define TF_INVISIBLE   1024
-
-#define TF_OBCOL               2048
-#define TF_BILLBOARD2          4096    /* with Z axis constraint */
-#define TF_SHADOW              8192
-#define TF_BMFONT              16384
-
-/* tface->flag: 1=select 2=active*/
-#define TF_SELECT      1
-#define TF_ACTIVE      2
-#define TF_SEL1                4
-#define TF_SEL2                8
-#define TF_SEL3                16
-#define TF_SEL4                32
-#define TF_HIDE                64
-
-/* tface->transp */
-#define TF_SOLID       0
-#define TF_ADD         1
-#define TF_ALPHA       2
-#define TF_SUB         3
-
-/* mvert->flag (1=select) */
-#define ME_SPHERETEST  2
-#define ME_SPHERETEMP  4
-#define ME_HIDE                        16
-
 #define MESH_MAX_VERTS 2000000000L
 
 #endif