=bmesh= merge from trunk at r36153
[blender.git] / source / blender / makesdna / DNA_mesh_types.h
1 /*
2  * $Id$ 
3  *
4  * ***** BEGIN GPL 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.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef DNA_MESH_TYPES_H
30 #define DNA_MESH_TYPES_H
31
32 /** \file DNA_mesh_types.h
33  *  \ingroup DNA
34  */
35
36 #include "DNA_listBase.h"
37 #include "DNA_ID.h"
38 #include "DNA_customdata_types.h"
39
40 struct DerivedMesh;
41 struct Ipo;
42 struct Key;
43 struct Material;
44 struct MVert;
45 struct MEdge;
46 struct MFace;
47 struct MCol;
48 struct MSticky;
49 struct Mesh;
50 struct OcInfo;
51 struct MPoly;
52 struct MTexPoly;
53 struct MLoop;
54 struct MLoopUV;
55 struct MLoopCol;
56 struct Multires;
57 struct PartialVisibility;
58 struct EditMesh;
59 struct AnimData;
60
61 typedef struct Mesh {
62         ID id;
63         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */
64
65         struct BoundBox *bb;
66         
67         struct Ipo *ipo;                // XXX depreceated... old animation system
68         struct Key *key;
69         struct Material **mat;
70         
71         /*new face structures*/
72         struct MPoly *mpoly;
73         struct MTexPoly *mtpoly;
74         struct MLoop *mloop;
75         struct MLoopUV *mloopuv;
76         struct MLoopCol *mloopcol;
77
78         /*mface stores the tesselation (triangulation) of the mesh,
79           real faces are now stored in nface.*/
80         struct MFace *mface;    /* array of mesh object mode faces for tesselation */
81         struct MTFace *mtface;  /* store tesselation face UV's and texture here */
82         struct TFace *tface;    /* depecrated, use mtface */
83         struct MVert *mvert;    /* array of verts */
84         struct MEdge *medge;    /* array of edges */
85         struct MDeformVert *dvert;      /* deformgroup vertices */
86         
87         /* array of colors for the tesselated faces, must be number of tesselated
88            faces * 4 in length */
89         struct MCol *mcol;              
90         struct MSticky *msticky;
91         struct Mesh *texcomesh;
92         struct MSelect *mselect;
93         
94         struct BMEditMesh *edit_btmesh; /* not saved in file! */
95
96         struct CustomData vdata, edata, fdata, pdata, ldata;
97
98         int totvert, totedge, totface, totpoly, totloop, totselect;
99         
100         /* the last selected vertex/edge/face are used for the active face however
101          * this means the active face must always be selected, this is to keep track
102          * of the last selected face and is similar to the old active face flag where
103          * the face does not need to be selected, -1 is inactive */
104         int act_face; 
105
106         /* texture space, copied as one block in editobject.c */
107         float loc[3];
108         float size[3];
109         float rot[3];
110
111         short texflag, drawflag;
112         short smoothresh, flag;
113
114         short subdiv, subdivr;
115         char subsurftype;               /* only kept for backwards compat, not used anymore */
116         char editflag;
117
118         short totcol;
119
120         struct Multires *mr;            /* Multiresolution modeling data */
121         struct PartialVisibility *pv;
122 } Mesh;
123
124 /* deprecated by MTFace, only here for file reading */
125 typedef struct TFace {
126         void *tpage;    /* the faces image for the active UVLayer */
127         float uv[4][2];
128         unsigned int col[4];
129         char flag, transp;
130         short mode, tile, unwrap;
131 } TFace;
132
133 /* **************** MESH ********************* */
134
135 /* texflag */
136 #define AUTOSPACE       1
137
138 /* me->editflag */
139 #define ME_EDIT_MIRROR_X (1 << 0)
140 #define ME_EDIT_MIRROR_Y (1 << 1) // unused so far
141 #define ME_EDIT_MIRROR_Z (1 << 2) // unused so far
142
143 #define ME_EDIT_PAINT_MASK (1 << 3)
144 #define ME_EDIT_MIRROR_TOPO (1 << 4)
145
146
147 /* me->flag */
148 /* #define ME_ISDONE            1 */
149 #define ME_DEPRECATED   2
150 #define ME_TWOSIDED             4
151 #define ME_UVEFFECT             8
152 #define ME_VCOLEFFECT   16
153 #define ME_AUTOSMOOTH   32
154 #define ME_SMESH                64
155 #define ME_SUBSURF              128
156 #define ME_OPT_EDGES    256
157 #define ME_DS_EXPAND    512
158
159 /* me->drawflag, short */
160 #define ME_DRAWEDGES    (1 << 0)
161 #define ME_DRAWFACES    (1 << 1)
162 #define ME_DRAWNORMALS  (1 << 2)
163 #define ME_DRAW_VNORMALS (1 << 3)
164
165 #define ME_ALLEDGES             (1 << 4)
166 #define ME_HIDDENEDGES  (1 << 5)
167
168 #define ME_DRAWCREASES  (1 << 6)
169 #define ME_DRAWSEAMS    (1 << 7)
170 #define ME_DRAWSHARP    (1 << 8)
171 #define ME_DRAWBWEIGHTS (1 << 9)
172
173 #define ME_DRAWEXTRA_EDGELEN  (1 << 10)
174 #define ME_DRAWEXTRA_FACEAREA (1 << 11)
175 #define ME_DRAWEXTRA_FACEANG  (1 << 12)
176
177 #define ME_DRAW_PINS (1 << 13)
178
179 /* old global flags:
180 #define G_DRAWEDGES             (1 << 18)
181 #define G_DRAWFACES             (1 <<  7)
182 #define G_DRAWNORMALS   (1 <<  6)
183 #define G_DRAW_VNORMALS (1 << 14)
184
185 #define G_ALLEDGES              (1 << 11)
186 #define G_HIDDENEDGES   (1 << 21)
187
188 #define G_DRAWCREASES   (1 << 19)
189 #define G_DRAWSEAMS     (1 << 20)
190 #define G_DRAWSHARP     (1 << 28)
191 #define G_DRAWBWEIGHTS  (1 << 31)
192
193 #define G_DRAW_EDGELEN  (1 << 22) 
194 #define G_DRAW_FACEAREA (1 << 23)
195 #define G_DRAW_EDGEANG  (1 << 24)
196 */
197
198
199
200 /* Subsurf Type */
201 #define ME_CC_SUBSURF           0
202 #define ME_SIMPLE_SUBSURF       1
203
204 #define MESH_MAX_VERTS 2000000000L
205
206 #endif