Merge with blender svn -> svn merge -r 12064:12150 https://svn.blender.org/svnroot...
[blender.git] / source / blender / makesdna / DNA_mesh_types.h
1 /**
2  * $Id$ 
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32 #ifndef DNA_MESH_TYPES_H
33 #define DNA_MESH_TYPES_H
34
35 #include "DNA_listBase.h"
36 #include "DNA_ID.h"
37 #include "DNA_customdata_types.h"
38
39 struct DerivedMesh;
40 struct Ipo;
41 struct Key;
42 struct Material;
43 struct MVert;
44 struct MEdge;
45 struct MFace;
46 struct MCol;
47 struct MSticky;
48 struct Mesh;
49 struct OcInfo;
50 struct Multires;
51 struct PartialVisibility;
52
53 typedef struct Mesh {
54         ID id;
55
56         struct BoundBox *bb;
57
58         ListBase effect;
59         
60         struct Ipo *ipo;
61         struct Key *key;
62         struct Material **mat;
63
64         struct MFace *mface;    /* array of mesh object mode faces */
65         struct MTFace *mtface;  /* store face UV's and texture here */
66         struct TFace *tface;    /* depecrated, use mtface */
67         struct MVert *mvert;    /* array of verts */
68         struct MEdge *medge;    /* array of edges */
69         struct MDeformVert *dvert;      /* __NLA */
70         struct MCol *mcol;              /* array of colors, this must be the number of faces * 4 */
71         struct MSticky *msticky;
72         struct Mesh *texcomesh;
73         struct MSelect *mselect;
74
75         struct CustomData vdata, edata, fdata;
76
77         int totvert, totedge, totface, totselect;
78         
79         /* the last selected vertex/edge/face are used for the active face however
80          * this means the active face must always be selected, this is to keep track
81          * of the last selected face and is similar to the old active face flag where
82          * the face does not need to be selected, -1 is inactive */
83         int act_face; 
84         
85         int texflag;
86         
87         /* texture space, copied as one block in editobject.c */
88         float loc[3];
89         float size[3];
90         float rot[3];
91         
92         float cubemapsize, pad;
93
94         short smoothresh, flag;
95
96         short subdiv, subdivr;
97         short totcol;
98         short subsurftype;              /* only kept for backwards compat, not used anymore */
99
100         struct Multires *mr;            /* Multiresolution modeling data */
101         struct PartialVisibility *pv;
102 /*ifdef WITH_VERSE*/
103         /* not written in file, pointer at geometry VerseNode */
104         void *vnode;
105 /*#endif*/
106 } Mesh;
107
108 /* deprecated by MTFace, only here for file reading */
109 typedef struct TFace {
110         void *tpage;    /* the faces image for the active UVLayer */
111         float uv[4][2];
112         unsigned int col[4];
113         char flag, transp;
114         short mode, tile, unwrap;
115 } TFace;
116
117 /* **************** MESH ********************* */
118
119 /* texflag */
120 #define AUTOSPACE       1
121
122 /* me->flag */
123 #define ME_ISDONE               1
124 #define ME_NOPUNOFLIP   2
125 #define ME_TWOSIDED             4
126 #define ME_UVEFFECT             8
127 #define ME_VCOLEFFECT   16
128 #define ME_AUTOSMOOTH   32
129 #define ME_SMESH                64
130 #define ME_SUBSURF              128
131 #define ME_OPT_EDGES    256
132
133 /* Subsurf Type */
134 #define ME_CC_SUBSURF           0
135 #define ME_SIMPLE_SUBSURF       1
136
137 #define MESH_MAX_VERTS 2000000000L
138
139 #endif