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