GSOC 2013 paint
[blender.git] / source / blender / makesdna / DNA_mesh_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_mesh_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_MESH_TYPES_H__
33 #define __DNA_MESH_TYPES_H__
34
35 #include "DNA_defs.h"
36 #include "DNA_ID.h"
37 #include "DNA_customdata_types.h"
38
39 struct AnimData;
40 struct DerivedMesh;
41 struct Ipo;
42 struct Key;
43 struct MCol;
44 struct MEdge;
45 struct MFace;
46 struct MLoop;
47 struct MLoopCol;
48 struct MLoopUV;
49 struct MPoly;
50 struct MSticky;
51 struct MTexPoly;
52 struct MVert;
53 struct Material;
54 struct Mesh;
55 struct Multires;
56 struct OcInfo;
57
58 typedef struct Mesh {
59         ID id;
60         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */
61
62         struct BoundBox *bb;
63         
64         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
65         struct Key *key;
66         struct Material **mat;
67         struct MSelect *mselect;
68
69 /* BMESH ONLY */
70         /*new face structures*/
71         struct MPoly *mpoly;
72         struct MTexPoly *mtpoly;
73         struct MLoop *mloop;
74         struct MLoopUV *mloopuv;
75         struct MLoopCol *mloopcol;
76 /* END BMESH ONLY */
77
78         /* mface stores the tessellation (triangulation) of the mesh,
79          * real faces are now stored in nface.*/
80         struct MFace *mface;    /* array of mesh object mode faces for tessellation */
81         struct MTFace *mtface;  /* store tessellation face UV's and texture here */
82         struct TFace *tface     DNA_DEPRECATED; /* deprecated, 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 tessellated faces, must be number of tessellated
88          * faces * 4 in length */
89         struct MCol *mcol;
90         struct Mesh *texcomesh;
91
92         /* When the object is available, the preferred access method is: BKE_editmesh_from_object(ob) */
93         struct BMEditMesh *edit_btmesh; /* not saved in file! */
94
95         struct CustomData vdata, edata, fdata;
96
97 /* BMESH ONLY */
98         struct CustomData pdata, ldata;
99 /* END BMESH ONLY */
100
101         int totvert, totedge, totface, totselect;
102
103 /* BMESH ONLY */
104         int totpoly, totloop;
105 /* END BMESH ONLY */
106
107         /* the last selected vertex/edge/face are used for the active face however
108          * this means the active face must always be selected, this is to keep track
109          * of the last selected face and is similar to the old active face flag where
110          * the face does not need to be selected, -1 is inactive */
111         int act_face; 
112
113         /* texture space, copied as one block in editobject.c */
114         float loc[3];
115         float size[3];
116         float rot[3];
117
118         int drawflag;
119         short texflag, flag;
120         float smoothresh;
121         int pad2;
122
123         /* customdata flag, for bevel-weight and crease, which are now optional */
124         char cd_flag, pad;
125
126         char subdiv  DNA_DEPRECATED, subdivr  DNA_DEPRECATED;
127         char subsurftype  DNA_DEPRECATED; /* only kept for backwards compat, not used anymore */
128         char editflag;
129
130         short totcol;
131
132         struct Multires *mr DNA_DEPRECATED; /* deprecated multiresolution modeling data, only keep for loading old files */
133 } Mesh;
134
135 /* deprecated by MTFace, only here for file reading */
136 typedef struct TFace {
137         void *tpage;    /* the faces image for the active UVLayer */
138         float uv[4][2];
139         unsigned int col[4];
140         char flag, transp;
141         short mode, tile, unwrap;
142 } TFace;
143
144 #if (DNA_DEPRECATED_GCC_POISON == 1)
145 #pragma GCC poison TFace
146 #endif
147
148 /* **************** MESH ********************* */
149
150 /* texflag */
151 #define ME_AUTOSPACE    1
152
153 /* me->editflag */
154 #define ME_EDIT_MIRROR_X (1 << 0)
155 #define ME_EDIT_MIRROR_Y (1 << 1) // unused so far
156 #define ME_EDIT_MIRROR_Z (1 << 2) // unused so far
157
158 #define ME_EDIT_PAINT_FACE_SEL (1 << 3)
159 #define ME_EDIT_MIRROR_TOPO (1 << 4)
160 #define ME_EDIT_PAINT_VERT_SEL (1 << 5)
161
162 /* we cant have both flags enabled at once,
163  * flags defined in DNA_scene_types.h */
164 #define ME_EDIT_PAINT_SEL_MODE(_me)  (                                        \
165         (_me->editflag & ME_EDIT_PAINT_FACE_SEL) ? SCE_SELECT_FACE :              \
166                 (_me->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX :        \
167                         0                                                                 \
168         )
169
170 /* me->flag */
171 /* #define ME_ISDONE            1 */
172 /* #define ME_DEPRECATED        2 */
173 #define ME_TWOSIDED             4
174 #define ME_UVEFFECT             8
175 #define ME_VCOLEFFECT   16
176 #define ME_AUTOSMOOTH   32
177 #define ME_SMESH                64
178 #define ME_SUBSURF              128
179 #define ME_OPT_EDGES    256
180 #define ME_DS_EXPAND    512
181 #define ME_SCULPT_DYNAMIC_TOPOLOGY 1024
182
183 /* me->cd_flag */
184 #define ME_CDFLAG_VERT_BWEIGHT (1 << 0)
185 #define ME_CDFLAG_EDGE_BWEIGHT (1 << 1)
186 #define ME_CDFLAG_EDGE_CREASE  (1 << 2)
187
188 /* me->drawflag, short */
189 #define ME_DRAWEDGES    (1 << 0)
190 #define ME_DRAWFACES    (1 << 1)
191 #define ME_DRAWNORMALS  (1 << 2)
192 #define ME_DRAW_VNORMALS (1 << 3)
193
194 #define ME_DRAWEIGHT    (1 << 4)
195 #define ME_HIDDENEDGES  (1 << 5)
196
197 #define ME_DRAWCREASES  (1 << 6)
198 #define ME_DRAWSEAMS    (1 << 7)
199 #define ME_DRAWSHARP    (1 << 8)
200 #define ME_DRAWBWEIGHTS (1 << 9)
201
202 #define ME_DRAWEXTRA_EDGELEN  (1 << 10)
203 #define ME_DRAWEXTRA_FACEAREA (1 << 11)
204 #define ME_DRAWEXTRA_FACEANG  (1 << 12)
205 #define ME_DRAWEXTRA_EDGEANG  (1 << 13)
206
207 /* debug only option */
208 #define ME_DRAWEXTRA_INDICES (1 << 14)
209
210 #define ME_DRAW_FREESTYLE_EDGE (1 << 15)
211 #define ME_DRAW_FREESTYLE_FACE (1 << 16)
212
213 /* draw stats */
214 #define ME_DRAW_STATVIS (1 << 17)
215
216 /* draw loop normals */
217 #define ME_DRAW_LNORMALS (1 << 18)
218
219 /* Subsurf Type */
220 #define ME_CC_SUBSURF           0
221 #define ME_SIMPLE_SUBSURF       1
222
223 #define MESH_MAX_VERTS 2000000000L
224
225 /* this is so we can save bmesh files that load in trunk, ignoring NGons
226  * will eventually be removed */
227
228 #define USE_BMESH_SAVE_AS_COMPAT
229 #define USE_BMESH_SAVE_WITHOUT_MFACE
230
231 /* enable this so meshes get tessfaces calculated by default */
232 // #define USE_TESSFACE_DEFAULT
233
234 #endif