Code Cleanup:
[blender-staging.git] / source / blender / makesdna / DNA_meshdata_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_meshdata_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef DNA_MESHDATA_TYPES_H
33 #define DNA_MESHDATA_TYPES_H
34
35 #include "DNA_customdata_types.h"
36 #include "DNA_listBase.h"
37
38 struct Bone;
39 struct Image;
40
41 /*tesselation face, see MLoop/MPoly for the real face data*/
42 typedef struct MFace {
43         unsigned int v1, v2, v3, v4;
44         short mat_nr;
45         char edcode, flag;      /* we keep edcode, for conversion to edges draw flags in old files */
46 } MFace;
47
48 typedef struct MEdge {
49         unsigned int v1, v2;
50         char crease, bweight;
51         short flag;
52 } MEdge;
53
54 typedef struct MDeformWeight {
55         int                             def_nr;
56         float                   weight;
57 } MDeformWeight;
58
59 typedef struct MDeformVert {
60         struct MDeformWeight *dw;
61         int totweight;
62         int flag;       /* flag only in use for weightpaint now */
63 } MDeformVert;
64
65 typedef struct MVert {
66         float   co[3];
67         short   no[3];
68         char flag, bweight;
69 } MVert;
70
71 /* tesselation vertex color data.
72  * at the moment alpha is abused for vertex painting
73  * and not used for transparency, note that red and blue are swapped */
74 typedef struct MCol {
75         char a, r, g, b;        
76 } MCol;
77
78 /*new face structure, replaces MFace, which is now
79   only used for storing tesselations.*/
80 typedef struct MPoly {
81         /* offset into loop array and number of loops in the face */
82         int loopstart;
83         int totloop; /* keep signed since we need to subtract when getting the previous loop */
84         short mat_nr;
85         char flag, pad;
86 } MPoly;
87
88 /*the e here is because we want to move away from
89   relying on edge hashes.*/
90 typedef struct MLoop {
91         unsigned int v; /*vertex index*/
92         unsigned int e; /*edge index*/
93 } MLoop;
94
95 typedef struct MTexPoly {
96         struct Image *tpage;
97         char flag, transp;
98         short mode,tile,unwrap;
99 } MTexPoly;
100
101 /* can copy from/to MTexPoly/MTFace */
102 #define ME_MTEXFACE_CPY(dst, src)   \
103 {                                   \
104         (dst)->tpage  = (src)->tpage;   \
105         (dst)->flag   = (src)->flag;    \
106         (dst)->transp = (src)->transp;  \
107         (dst)->mode   = (src)->mode;    \
108         (dst)->tile   = (src)->tile;    \
109         (dst)->unwrap = (src)->unwrap;  \
110 }
111
112 typedef struct MLoopUV {
113         float uv[2];
114         int flag;
115 } MLoopUV;
116
117 /*mloopuv->flag*/
118 #define MLOOPUV_EDGESEL 1
119 #define MLOOPUV_VERTSEL 2
120 #define MLOOPUV_PINNED  4
121
122 /* at the moment alpha is abused for vertex painting
123  * and not used for transparency, note that red and blue are swapped */
124 typedef struct MLoopCol {
125         char a, r, g, b;
126 } MLoopCol;
127
128 typedef struct MSticky {
129         float co[2];
130 } MSticky;
131
132 typedef struct MSelect {
133         int index;
134         int type; /* EDITVERT/EDITEDGE/EDITFACE */
135 } MSelect;
136
137 /*tesselation uv face data*/
138 typedef struct MTFace {
139         float uv[4][2];
140         struct Image *tpage;
141         char flag, transp;
142         short mode, tile, unwrap;
143 } MTFace;
144
145 /*Custom Data Properties*/
146 typedef struct MFloatProperty {
147         float   f;
148 } MFloatProperty;
149 typedef struct MIntProperty {
150         int             i;
151 } MIntProperty;
152 typedef struct MStringProperty {
153         char    s[256];
154 } MStringProperty;
155
156 typedef struct OrigSpaceFace {
157         float uv[4][2];
158 } OrigSpaceFace;
159
160 typedef struct OrigSpaceLoop {
161         float uv[2];
162 } OrigSpaceLoop;
163
164 typedef struct MDisps {
165         /* Strange bug in SDNA: if disps pointer comes first, it fails to see totdisp */
166         int totdisp;
167         char pad[4];
168         float (*disps)[3];
169 } MDisps;
170
171 /** Multires structs kept for compatibility with old files **/
172 typedef struct MultiresCol {
173         float a, r, g, b;
174 } MultiresCol;
175 typedef struct MultiresColFace {
176         /* vertex colors */
177         MultiresCol col[4];
178 } MultiresColFace;
179 typedef struct MultiresFace {
180         unsigned int v[4];
181         unsigned int mid;
182         char flag, mat_nr, pad[2];
183 } MultiresFace;
184 typedef struct MultiresEdge {
185         unsigned int v[2];
186         unsigned int mid;
187 } MultiresEdge;
188
189 struct MultiresMapNode;
190 typedef struct MultiresLevel {
191         struct MultiresLevel *next, *prev;
192
193         MultiresFace *faces;
194         MultiresColFace *colfaces;
195         MultiresEdge *edges;
196
197         unsigned int totvert, totface, totedge, pad;
198
199         /* Kept for compatibility with even older files */
200         MVert *verts;
201 } MultiresLevel;
202
203 typedef struct Multires {
204         ListBase levels;
205         MVert *verts;
206
207         unsigned char level_count, current, newlvl, edgelvl, pinlvl, renderlvl;
208         unsigned char use_col, flag;
209
210         /* Special level 1 data that cannot be modified from other levels */
211         CustomData vdata;
212         CustomData fdata;
213         short *edge_flags;
214         char *edge_creases;
215 } Multires;
216
217 /** End Multires **/
218
219 typedef struct MRecast {
220         int             i;
221 } MRecast;
222
223 /* mvert->flag (1=SELECT) */
224 #define ME_SPHERETEST           2
225 #define ME_VERT_TMP_TAG         4
226 #define ME_HIDE                         16
227 #define ME_VERT_MERGED          (1<<6)
228 #define ME_VERT_PBVH_UPDATE     (1<<7)
229
230 /* medge->flag (1=SELECT)*/
231 #define ME_EDGEDRAW                     (1<<1)
232 #define ME_SEAM                         (1<<2)
233 #define ME_FGON                         (1<<3)
234                                                 /* reserve 16 for ME_HIDE */
235 #define ME_EDGERENDER           (1<<5)
236 #define ME_LOOSEEDGE            (1<<7)
237 /* #define ME_SEAM_LAST         (1<<8) */ /* UNUSED */
238 #define ME_SHARP                        (1<<9)    /* only reason this flag remains a 'short' */
239
240 /* puno = vertexnormal (mface) */
241 #define ME_PROJXY               16
242 #define ME_PROJXZ               32
243 #define ME_PROJYZ               64
244
245 /* edcode (mface) */
246 #define ME_V1V2                 1
247 #define ME_V2V3                 2
248 #define ME_V3V1                 4
249 #define ME_V3V4                 4
250 #define ME_V4V1                 8
251
252 /* flag (mface) */
253 #define ME_SMOOTH                       1
254 #define ME_FACE_SEL                     2
255 /* flag ME_HIDE==16 is used here too */ 
256
257 #define ME_POLY_LOOP_PREV(mloop, mp, i)  (&(mloop)[(mp)->loopstart + (((i) + (mp)->totloop - 1) % (mp)->totloop)])
258 #define ME_POLY_LOOP_NEXT(mloop, mp, i)  (&(mloop)[(mp)->loopstart + (((i) + 1) % (mp)->totloop)])
259
260 /* mselect->type */
261 #define ME_VSEL 0
262 #define ME_ESEL 1
263 #define ME_FSEL 2
264
265 /* mtface->flag */
266 #define TF_SELECT       1 /* use MFace hide flag (after 2.43), should be able to reuse after 2.44 */
267 #define TF_ACTIVE       2 /* deprecated! */
268 #define TF_SEL1         4
269 #define TF_SEL2         8
270 #define TF_SEL3         16
271 #define TF_SEL4         32
272 #define TF_HIDE         64 /* unused, same as TF_SELECT */
273
274 /* mtface->mode */
275 #define TF_DYNAMIC              1
276 #define TF_ALPHASORT    2
277 #define TF_TEX                  4
278 #define TF_SHAREDVERT   8
279 #define TF_LIGHT                16
280
281 #define TF_CONVERTED 32 /* tface converted to material */
282
283 #define TF_SHAREDCOL    64
284 #define TF_TILES                128             /* deprecated */
285 #define TF_BILLBOARD    256
286 #define TF_TWOSIDE              512
287 #define TF_INVISIBLE    1024
288
289 #define TF_OBCOL                2048
290 #define TF_BILLBOARD2   4096    /* with Z axis constraint */
291 #define TF_SHADOW               8192
292 #define TF_BMFONT               16384
293
294 /* mtface->transp, values 1-4 are used as flags in the GL, WARNING, TF_SUB cant work with this */
295 #define TF_SOLID        0
296 #define TF_ADD          1
297 #define TF_ALPHA        2
298 #define TF_CLIP         4 /* clipmap alpha/binary alpha all or nothing! */
299
300 /* sub is not available in the user interface anymore */
301 #define TF_SUB          3
302
303
304 /* mtface->unwrap */
305 #define TF_DEPRECATED1  1
306 #define TF_DEPRECATED2  2
307 #define TF_DEPRECATED3  4
308 #define TF_DEPRECATED4  8
309 #define TF_PIN1             16
310 #define TF_PIN2             32
311 #define TF_PIN3                 64
312 #define TF_PIN4         128
313
314 #endif