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