Merge branch 'master' into blender2.8
[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 Ipo;
41 struct Key;
42 struct MCol;
43 struct MEdge;
44 struct MFace;
45 struct MLoop;
46 struct MLoopCol;
47 struct MLoopUV;
48 struct MPoly;
49 struct MTexPoly;
50 struct MVert;
51 struct Material;
52 struct Mesh;
53 struct Multires;
54
55 typedef struct Mesh {
56         ID id;
57         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */
58
59         struct BoundBox *bb;
60         
61         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
62         struct Key *key;
63         struct Material **mat;
64         struct MSelect *mselect;
65
66 /* BMESH ONLY */
67         /*new face structures*/
68         struct MPoly *mpoly;
69         struct MLoop *mloop;
70         struct MLoopUV *mloopuv;
71         struct MLoopCol *mloopcol;
72 /* END BMESH ONLY */
73
74         /* mface stores the tessellation (triangulation) of the mesh,
75          * real faces are now stored in nface.*/
76         struct MFace *mface;    /* array of mesh object mode faces for tessellation */
77         struct MTFace *mtface;  /* store tessellation face UV's and texture here */
78         struct TFace *tface     DNA_DEPRECATED; /* deprecated, use mtface */
79         struct MVert *mvert;    /* array of verts */
80         struct MEdge *medge;    /* array of edges */
81         struct MDeformVert *dvert;      /* deformgroup vertices */
82
83         /* array of colors for the tessellated faces, must be number of tessellated
84          * faces * 4 in length */
85         struct MCol *mcol;
86         struct Mesh *texcomesh;
87
88         /* When the object is available, the preferred access method is: BKE_editmesh_from_object(ob) */
89         struct BMEditMesh *edit_btmesh; /* not saved in file! */
90
91         struct CustomData vdata, edata, fdata;
92
93 /* BMESH ONLY */
94         struct CustomData pdata, ldata;
95 /* END BMESH ONLY */
96
97         int totvert, totedge, totface, totselect;
98
99 /* BMESH ONLY */
100         int totpoly, totloop;
101 /* END BMESH ONLY */
102
103         /* the last selected vertex/edge/face are used for the active face however
104          * this means the active face must always be selected, this is to keep track
105          * of the last selected face and is similar to the old active face flag where
106          * the face does not need to be selected, -1 is inactive */
107         int act_face; 
108
109         /* texture space, copied as one block in editobject.c */
110         float loc[3];
111         float size[3];
112         float rot[3];
113
114         int drawflag;
115         short texflag, flag;
116         float smoothresh;
117         int pad2;
118
119         /* customdata flag, for bevel-weight and crease, which are now optional */
120         char cd_flag, pad;
121
122         char subdiv  DNA_DEPRECATED, subdivr  DNA_DEPRECATED;
123         char subsurftype  DNA_DEPRECATED; /* only kept for backwards compat, not used anymore */
124         char editflag;
125
126         short totcol;
127
128         struct Multires *mr DNA_DEPRECATED; /* deprecated multiresolution modeling data, only keep for loading old files */
129         void *batch_cache;
130 } Mesh;
131
132 /* deprecated by MTFace, only here for file reading */
133 #ifdef DNA_DEPRECATED
134 typedef struct TFace {
135         void *tpage;    /* the faces image for the active UVLayer */
136         float uv[4][2];
137         unsigned int col[4];
138         char flag, transp;
139         short mode, tile, unwrap;
140 } TFace;
141 #endif
142
143 /* **************** MESH ********************* */
144
145 /* texflag */
146 enum {
147         ME_AUTOSPACE = 1,
148 };
149
150 /* me->editflag */
151 enum {
152         ME_EDIT_MIRROR_X       = 1 << 0,
153         ME_EDIT_MIRROR_Y       = 1 << 1,  /* unused so far */
154         ME_EDIT_MIRROR_Z       = 1 << 2,  /* unused so far */
155
156         ME_EDIT_PAINT_FACE_SEL = 1 << 3,
157         ME_EDIT_MIRROR_TOPO    = 1 << 4,
158         ME_EDIT_PAINT_VERT_SEL = 1 << 5,
159 };
160
161 /* we cant have both flags enabled at once,
162  * flags defined in DNA_scene_types.h */
163 #define ME_EDIT_PAINT_SEL_MODE(_me)  (                                        \
164         (_me->editflag & ME_EDIT_PAINT_FACE_SEL) ? SCE_SELECT_FACE :              \
165                 (_me->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX :        \
166                         0                                                                 \
167         )
168
169 /* me->flag */
170 enum {
171 /*      ME_ISDONE                  = 1 << 0, */
172 /*      ME_DEPRECATED              = 1 << 1, */
173         ME_TWOSIDED                = 1 << 2,
174         ME_UVEFFECT                = 1 << 3,
175         ME_VCOLEFFECT              = 1 << 4,
176         ME_AUTOSMOOTH              = 1 << 5,
177         ME_SMESH                   = 1 << 6,
178         ME_SUBSURF                 = 1 << 7,
179         ME_OPT_EDGES               = 1 << 8,
180         ME_DS_EXPAND               = 1 << 9,
181         ME_SCULPT_DYNAMIC_TOPOLOGY = 1 << 10,
182 };
183
184 /* me->cd_flag */
185 enum {
186         ME_CDFLAG_VERT_BWEIGHT = 1 << 0,
187         ME_CDFLAG_EDGE_BWEIGHT = 1 << 1,
188         ME_CDFLAG_EDGE_CREASE  = 1 << 2,
189 };
190
191 /* me->drawflag, short */
192 enum {
193         ME_DRAWEDGES           = 1 << 0,
194         ME_DRAWFACES           = 1 << 1,
195         ME_DRAWNORMALS         = 1 << 2,
196         ME_DRAW_VNORMALS       = 1 << 3,
197
198         ME_DRAWEIGHT           = 1 << 4,
199         /* ME_HIDDENEDGES      = 1 << 5, */  /* DEPRECATED */
200
201         ME_DRAWCREASES         = 1 << 6,
202         ME_DRAWSEAMS           = 1 << 7,
203         ME_DRAWSHARP           = 1 << 8,
204         ME_DRAWBWEIGHTS        = 1 << 9,
205
206         ME_DRAWEXTRA_EDGELEN   = 1 << 10,
207         ME_DRAWEXTRA_FACEAREA  = 1 << 11,
208         ME_DRAWEXTRA_FACEANG   = 1 << 12,
209         ME_DRAWEXTRA_EDGEANG   = 1 << 13,
210
211 /* debug only option */
212         ME_DRAWEXTRA_INDICES   = 1 << 14,
213
214         ME_DRAW_FREESTYLE_EDGE = 1 << 15,
215         ME_DRAW_FREESTYLE_FACE = 1 << 16,
216
217 /* draw stats */
218         ME_DRAW_STATVIS        = 1 << 17,
219
220 /* draw loop normals */
221         ME_DRAW_LNORMALS       = 1 << 18,
222 };
223
224 /* Subsurf Type */
225 enum {
226         ME_CC_SUBSURF      = 0,
227         ME_SIMPLE_SUBSURF  = 1,
228 };
229
230 #define MESH_MAX_VERTS 2000000000L
231
232 /* this is so we can save bmesh files that load in trunk, ignoring NGons
233  * will eventually be removed */
234
235 #define USE_BMESH_SAVE_AS_COMPAT
236 #define USE_BMESH_SAVE_WITHOUT_MFACE
237
238 /* enable this so meshes get tessfaces calculated by default */
239 /* #define USE_TESSFACE_DEFAULT */
240
241 #endif