svn merge ^/trunk/blender -r42778:42839
[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 #ifndef DNA_MESH_TYPES_H
28 #define DNA_MESH_TYPES_H
29
30 /** \file DNA_mesh_types.h
31  *  \ingroup DNA
32  */
33
34 #include "DNA_defs.h"
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 MPoly;
51 struct MTexPoly;
52 struct MLoop;
53 struct MLoopUV;
54 struct MLoopCol;
55 struct Multires;
56 struct EditMesh;
57 struct AnimData;
58
59 typedef struct Mesh {
60         ID id;
61         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */
62
63         struct BoundBox *bb;
64         
65         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
66         struct Key *key;
67         struct Material **mat;
68         
69         /*new face structures*/
70         struct MPoly *mpoly;
71         struct MTexPoly *mtpoly;
72         struct MLoop *mloop;
73         struct MLoopUV *mloopuv;
74         struct MLoopCol *mloopcol;
75
76         /*mface stores the tesselation (triangulation) of the mesh,
77           real faces are now stored in nface.*/
78         struct MFace *mface;    /* array of mesh object mode faces for tesselation */
79         struct MTFace *mtface;  /* store tesselation face UV's and texture here */
80         struct TFace *tface;    /* depecrated, use mtface */
81         struct MVert *mvert;    /* array of verts */
82         struct MEdge *medge;    /* array of edges */
83         struct MDeformVert *dvert;      /* deformgroup vertices */
84         
85         /* array of colors for the tesselated faces, must be number of tesselated
86            faces * 4 in length */
87         struct MCol *mcol;              
88         struct MSticky *msticky;
89         struct Mesh *texcomesh;
90         struct MSelect *mselect;
91         
92         struct BMEditMesh *edit_btmesh; /* not saved in file! */
93
94         struct CustomData vdata, edata, fdata, pdata, ldata;
95
96         int totvert, totedge, totface, totpoly, totloop, totselect;
97         
98         /* the last selected vertex/edge/face are used for the active face however
99          * this means the active face must always be selected, this is to keep track
100          * of the last selected face and is similar to the old active face flag where
101          * the face does not need to be selected, -1 is inactive */
102         int act_face; 
103
104         /* texture space, copied as one block in editobject.c */
105         float loc[3];
106         float size[3];
107         float rot[3];
108
109         short texflag, drawflag;
110         short smoothresh, flag;
111
112         short subdiv  DNA_DEPRECATED, subdivr  DNA_DEPRECATED;
113         char subsurftype  DNA_DEPRECATED; /* only kept for backwards compat, not used anymore */
114         char editflag;
115
116         short totcol;
117
118         struct Multires *mr DNA_DEPRECATED; /* deprecated multiresolution modeling data, only keep for loading old files */
119 } Mesh;
120
121 /* deprecated by MTFace, only here for file reading */
122 typedef struct TFace {
123         void *tpage;    /* the faces image for the active UVLayer */
124         float uv[4][2];
125         unsigned int col[4];
126         char flag, transp;
127         short mode, tile, unwrap;
128 } TFace;
129
130 /* **************** MESH ********************* */
131
132 /* texflag */
133 #define AUTOSPACE       1
134
135 /* me->editflag */
136 #define ME_EDIT_MIRROR_X (1 << 0)
137 #define ME_EDIT_MIRROR_Y (1 << 1) // unused so far
138 #define ME_EDIT_MIRROR_Z (1 << 2) // unused so far
139
140 #define ME_EDIT_PAINT_MASK (1 << 3)
141 #define ME_EDIT_MIRROR_TOPO (1 << 4)
142 #define ME_EDIT_VERT_SEL (1 << 5)
143
144 /* we cant have both flags enabled at once,
145  * flags defined in DNA_scene_types.h */
146 #define ME_EDIT_PAINT_SEL_MODE(_me)  (                                        \
147         (_me->editflag & ME_EDIT_PAINT_MASK) ? SCE_SELECT_FACE :                  \
148                 (_me->editflag & ME_EDIT_VERT_SEL) ? SCE_SELECT_VERTEX :              \
149                         0                                                                 \
150         )
151
152 /* me->flag */
153 /* #define ME_ISDONE            1 */
154 #define ME_DEPRECATED   2
155 #define ME_TWOSIDED             4
156 #define ME_UVEFFECT             8
157 #define ME_VCOLEFFECT   16
158 #define ME_AUTOSMOOTH   32
159 #define ME_SMESH                64
160 #define ME_SUBSURF              128
161 #define ME_OPT_EDGES    256
162 #define ME_DS_EXPAND    512
163
164 /* me->drawflag, short */
165 #define ME_DRAWEDGES    (1 << 0)
166 #define ME_DRAWFACES    (1 << 1)
167 #define ME_DRAWNORMALS  (1 << 2)
168 #define ME_DRAW_VNORMALS (1 << 3)
169
170 #define ME_ALLEDGES             (1 << 4)
171 #define ME_HIDDENEDGES  (1 << 5)
172
173 #define ME_DRAWCREASES  (1 << 6)
174 #define ME_DRAWSEAMS    (1 << 7)
175 #define ME_DRAWSHARP    (1 << 8)
176 #define ME_DRAWBWEIGHTS (1 << 9)
177
178 #define ME_DRAWEXTRA_EDGELEN  (1 << 10)
179 #define ME_DRAWEXTRA_FACEAREA (1 << 11)
180 #define ME_DRAWEXTRA_FACEANG  (1 << 12)
181
182 /* debug only option */
183 #define ME_DRAWEXTRA_INDICES (1 << 13)
184
185 /* old global flags:
186 #define G_DRAWEDGES             (1 << 18)
187 #define G_DRAWFACES             (1 <<  7)
188 #define G_DRAWNORMALS   (1 <<  6)
189 #define G_DRAW_VNORMALS (1 << 14)
190
191 #define G_ALLEDGES              (1 << 11)
192 #define G_HIDDENEDGES   (1 << 21)
193
194 #define G_DRAWCREASES   (1 << 19)
195 #define G_DRAWSEAMS     (1 << 20)
196 #define G_DRAWSHARP     (1 << 28)
197 #define G_DRAWBWEIGHTS  (1 << 31)
198
199 #define G_DRAW_EDGELEN  (1 << 22) 
200 #define G_DRAW_FACEAREA (1 << 23)
201 #define G_DRAW_EDGEANG  (1 << 24)
202 */
203
204
205
206 /* Subsurf Type */
207 #define ME_CC_SUBSURF           0
208 #define ME_SIMPLE_SUBSURF       1
209
210 #define MESH_MAX_VERTS 2000000000L
211
212 #endif