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