merge with trunk/2.5 at r24378
[blender-staging.git] / source / blender / makesdna / DNA_meshdata_types.h
1 /**
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef DNA_MESHDATA_TYPES_H
30 #define DNA_MESHDATA_TYPES_H
31
32 #include "DNA_customdata_types.h"
33 #include "DNA_listBase.h"
34
35 struct Bone;
36 struct Image;
37
38 /*tesselation face, see MLoop/MPoly for the real face data*/
39 typedef struct MFace {
40         unsigned int v1, v2, v3, v4;
41         short mat_nr;
42         char edcode, flag;      /* we keep edcode, for conversion to edges draw flags in old files */
43 } MFace;
44
45 typedef struct MEdge {
46         unsigned int v1, v2;
47         char crease, bweight;
48         short flag;
49 } MEdge;
50
51 typedef struct MDeformWeight {
52         int                             def_nr;
53         float                   weight;
54 } MDeformWeight;
55
56 typedef struct MDeformVert {
57         struct MDeformWeight *dw;
58         int totweight;
59         int flag;       /* flag only in use for weightpaint now */
60 } MDeformVert;
61
62 typedef struct MVert {
63         float   co[3];
64         short   no[3];
65         short   mat_nr;
66         char flag, bweight, pad[2];
67 } MVert;
68
69 /* tesselation vertex color data.
70  * at the moment alpha is abused for vertex painting
71  * and not used for transperency, note that red and blue are swapped */
72 typedef struct MCol {
73         char a, r, g, b;        
74 } MCol;
75
76 /*new face structure, replaces MFace, which is now
77   only used for storing tesselations.*/
78 typedef struct MPoly {
79         /*offset into loop array and number of loops in the face*/
80         int loopstart, totloop;
81         short mat_nr;
82         short flag;
83 } MPoly;
84
85 /*the e here is because we want to move away from
86   relying on edge hashes.*/
87 typedef struct MLoop {
88         int v; /*vertex index*/
89         int e; /*edge index*/
90 } MLoop;
91
92 typedef struct MTexPoly{
93         struct Image *tpage;
94         char flag, transp;
95         short mode,tile,unwrap;
96 }MTexPoly;
97
98 typedef struct MLoopUV{
99         float uv[2];
100         int flag;
101 }MLoopUV;
102
103 /*mloopuv->flag*/
104 #define MLOOPUV_EDGESEL 1
105 #define MLOOPUV_VERTSEL 2
106 #define MLOOPUV_PINNED  4
107
108 /* at the moment alpha is abused for vertex painting
109  * and not used for transperency, note that red and blue are swapped */
110 typedef struct MLoopCol{
111         char a, r, g, b;
112 } MLoopCol;
113
114 typedef struct MSticky {
115         float co[2];
116 } MSticky;
117
118 typedef struct MSelect {
119         int index;
120         int type;
121 } MSelect;
122
123 /*tesselation uv face data*/
124 typedef struct MTFace {
125         float uv[4][2];
126         struct Image *tpage;
127         char flag, transp;
128         short mode, tile, unwrap;
129 } MTFace;
130
131 /*Custom Data Properties*/
132 typedef struct MFloatProperty{
133         float   f;
134 } MFloatProperty;
135 typedef struct MIntProperty{
136         int             i;
137 } MIntProperty;
138 typedef struct MStringProperty{
139         char    s[256];
140 } MStringProperty;
141
142 typedef struct OrigSpaceFace {
143         float uv[4][2];
144 } OrigSpaceFace;
145
146 typedef struct MDisps {
147         /* Strange bug in SDNA: if disps pointer comes first, it fails to see totdisp */
148         int totdisp;
149         char pad[4];
150         float (*disps)[3];
151 } MDisps;
152
153 /** Multires structs kept for compatibility with old files **/
154 typedef struct MultiresCol {
155         float a, r, g, b;
156 } MultiresCol;
157 typedef struct MultiresColFace {
158         /* vertex colors */
159         MultiresCol col[4];
160 } MultiresColFace;
161 typedef struct MultiresFace {
162         unsigned int v[4];
163         unsigned int mid;
164         char flag, mat_nr, pad[2];
165 } MultiresFace;
166 typedef struct MultiresEdge {
167         unsigned int v[2];
168         unsigned int mid;
169 } MultiresEdge;
170
171 struct MultiresMapNode;
172 typedef struct MultiresLevel {
173         struct MultiresLevel *next, *prev;
174
175         MultiresFace *faces;
176         MultiresColFace *colfaces;
177         MultiresEdge *edges;
178
179         unsigned int totvert, totface, totedge, pad;
180
181         /* Kept for compatibility with even older files */
182         MVert *verts;
183 } MultiresLevel;
184
185 typedef struct Multires {
186         ListBase levels;
187         MVert *verts;
188
189         unsigned char level_count, current, newlvl, edgelvl, pinlvl, renderlvl;
190         unsigned char use_col, flag;
191
192         /* Special level 1 data that cannot be modified from other levels */
193         CustomData vdata;
194         CustomData fdata;
195         short *edge_flags;
196         char *edge_creases;
197 } Multires;
198
199 /** End Multires **/
200
201 typedef struct PartialVisibility {
202         unsigned int *vert_map; /* vert_map[Old Index]= New Index */
203         int *edge_map; /* edge_map[Old Index]= New Index, -1= hidden */
204         MFace *old_faces;
205         MEdge *old_edges;
206         unsigned int totface, totedge, totvert, pad;
207 } PartialVisibility;
208
209 /* mvert->flag (1=SELECT) */
210 #define ME_SPHERETEST   2
211 #define ME_SPHERETEMP   4
212 #define ME_HIDE                 16
213 #define ME_PIN                  64
214 #define ME_VERT_MERGED          (1<<6)
215
216 /* medge->flag (1=SELECT)*/
217 #define ME_EDGEDRAW                     (1<<1)
218 #define ME_SEAM                         (1<<2)
219 #define ME_FGON                         (1<<3)
220                                                 /* reserve 16 for ME_HIDE */
221 #define ME_EDGERENDER           (1<<5)
222 #define ME_LOOSEEDGE            (1<<7)
223 #define ME_SEAM_LAST            (1<<8)
224 #define ME_SHARP                        (1<<9)
225
226 /* puno = vertexnormal (mface) */
227 /* render assumes flips to be ordered like this */
228 #define ME_FLIPV1               1
229 #define ME_FLIPV2               2
230 #define ME_FLIPV3               4
231 #define ME_FLIPV4               8
232 #define ME_PROJXY               16
233 #define ME_PROJXZ               32
234 #define ME_PROJYZ               64
235
236 /* edcode (mface) */
237 #define ME_V1V2                 1
238 #define ME_V2V3                 2
239 #define ME_V3V1                 4
240 #define ME_V3V4                 4
241 #define ME_V4V1                 8
242
243 /* flag (mface) */
244 #define ME_SMOOTH                       1
245 #define ME_FACE_SEL                     2
246 /* flag ME_HIDE==16 is used here too */ 
247 #define ME_DRAW_ACT                     4
248
249 /* mselect->type */
250 #define ME_VSEl 0
251 #define ME_ESEl 1
252 #define ME_FSEL 2
253
254 /* mtface->flag */
255 #define TF_SELECT       1 /* use MFace hide flag (after 2.43), should be able to reuse after 2.44 */
256 #define TF_ACTIVE       2 /* deprecated! */
257 #define TF_SEL1         4
258 #define TF_SEL2         8
259 #define TF_SEL3         16
260 #define TF_SEL4         32
261 #define TF_HIDE         64 /* unused, same as TF_SELECT */
262
263 /* mtface->mode */
264 #define TF_DYNAMIC              1
265 #define TF_ALPHASORT    2
266 #define TF_TEX                  4
267 #define TF_SHAREDVERT   8
268 #define TF_LIGHT                16
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