synched with trunk at revision 36569
[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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 /** \file DNA_meshdata_types.h
33  *  \ingroup DNA
34  */
35
36 #include "DNA_customdata_types.h"
37 #include "DNA_listBase.h"
38
39 struct Bone;
40 struct Image;
41
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 /* at the moment alpha is abused for vertex painting
72  * and not used for transperency, note that red and blue are swapped */
73 typedef struct MCol {
74         char a, r, g, b;        
75 } MCol;
76
77 /*bmesh custom data stuff*/
78 typedef struct MTexPoly{
79         struct Image *tpage;
80         char flag, transp;
81         short mode,tile,unwrap;
82 }MTexPoly;
83
84 typedef struct MLoopUV{
85         float uv[2];
86 }MLoopUV;
87
88 typedef struct MLoopCol{
89         char a, r, g, b;
90         int pad;  /*waste!*/
91 }MLoopCol;
92
93 typedef struct MSticky {
94         float co[2];
95 } MSticky;
96
97 typedef struct MSelect {
98         int index;
99         int type;
100 } MSelect;
101
102 typedef struct MTFace {
103         float uv[4][2];
104         struct Image *tpage;
105         char flag, transp;
106         short mode, tile, unwrap;
107 } MTFace;
108
109 /*Custom Data Properties*/
110 typedef struct MFloatProperty{
111         float   f;
112 } MFloatProperty;
113 typedef struct MIntProperty{
114         int             i;
115 } MIntProperty;
116 typedef struct MStringProperty{
117         char    s[256];
118 } MStringProperty;
119
120 typedef struct OrigSpaceFace {
121         float uv[4][2];
122 } OrigSpaceFace;
123
124 typedef struct MDisps {
125         /* Strange bug in SDNA: if disps pointer comes first, it fails to see totdisp */
126         int totdisp;
127         char pad[4];
128         float (*disps)[3];
129 } MDisps;
130
131 /** Multires structs kept for compatibility with old files **/
132 typedef struct MultiresCol {
133         float a, r, g, b;
134 } MultiresCol;
135 typedef struct MultiresColFace {
136         /* vertex colors */
137         MultiresCol col[4];
138 } MultiresColFace;
139 typedef struct MultiresFace {
140         unsigned int v[4];
141         unsigned int mid;
142         char flag, mat_nr, pad[2];
143 } MultiresFace;
144 typedef struct MultiresEdge {
145         unsigned int v[2];
146         unsigned int mid;
147 } MultiresEdge;
148
149 struct MultiresMapNode;
150 typedef struct MultiresLevel {
151         struct MultiresLevel *next, *prev;
152
153         MultiresFace *faces;
154         MultiresColFace *colfaces;
155         MultiresEdge *edges;
156
157         unsigned int totvert, totface, totedge, pad;
158
159         /* Kept for compatibility with even older files */
160         MVert *verts;
161 } MultiresLevel;
162
163 typedef struct Multires {
164         ListBase levels;
165         MVert *verts;
166
167         unsigned char level_count, current, newlvl, edgelvl, pinlvl, renderlvl;
168         unsigned char use_col, flag;
169
170         /* Special level 1 data that cannot be modified from other levels */
171         CustomData vdata;
172         CustomData fdata;
173         short *edge_flags;
174         char *edge_creases;
175 } Multires;
176
177 /** End Multires **/
178
179 typedef struct PartialVisibility {
180         unsigned int *vert_map; /* vert_map[Old Index]= New Index */
181         int *edge_map; /* edge_map[Old Index]= New Index, -1= hidden */
182         MFace *old_faces;
183         MEdge *old_edges;
184         unsigned int totface, totedge, totvert, pad;
185 } PartialVisibility;
186
187 typedef struct MRecast{
188         int             i;
189 } MRecast;
190
191 /* mvert->flag (1=SELECT) */
192 #define ME_SPHERETEST           2
193 #define ME_VERT_TMP_TAG         4
194 #define ME_HIDE                         16
195 #define ME_VERT_MERGED          (1<<6)
196 #define ME_VERT_PBVH_UPDATE     (1<<7)
197
198 /* medge->flag (1=SELECT)*/
199 #define ME_EDGEDRAW                     (1<<1)
200 #define ME_SEAM                         (1<<2)
201 #define ME_FGON                         (1<<3)
202                                                 /* reserve 16 for ME_HIDE */
203 #define ME_EDGERENDER           (1<<5)
204 #define ME_LOOSEEDGE            (1<<7)
205 #define ME_SEAM_LAST            (1<<8)
206 #define ME_SHARP                        (1<<9)
207
208 /* puno = vertexnormal (mface) */
209 /* render assumes flips to be ordered like this */
210 #define ME_FLIPV1               1
211 #define ME_FLIPV2               2
212 #define ME_FLIPV3               4
213 #define ME_FLIPV4               8
214 #define ME_PROJXY               16
215 #define ME_PROJXZ               32
216 #define ME_PROJYZ               64
217
218 /* edcode (mface) */
219 #define ME_V1V2                 1
220 #define ME_V2V3                 2
221 #define ME_V3V1                 4
222 #define ME_V3V4                 4
223 #define ME_V4V1                 8
224
225 /* flag (mface) */
226 #define ME_SMOOTH                       1
227 #define ME_FACE_SEL                     2
228                                                 /* flag ME_HIDE==16 is used here too */ 
229 /* mselect->type */
230 #define ME_VSEl 0
231 #define ME_ESEl 1
232 #define ME_FSEL 2
233
234 /* mtface->flag */
235 #define TF_SELECT       1 /* use MFace hide flag (after 2.43), should be able to reuse after 2.44 */
236 #define TF_ACTIVE       2 /* deprecated! */
237 #define TF_SEL1         4
238 #define TF_SEL2         8
239 #define TF_SEL3         16
240 #define TF_SEL4         32
241 #define TF_HIDE         64 /* unused, same as TF_SELECT */
242
243 /* mtface->mode */
244 #define TF_DYNAMIC              1
245 #define TF_ALPHASORT    2
246 #define TF_TEX                  4
247 #define TF_SHAREDVERT   8
248 #define TF_LIGHT                16
249
250 #define TF_SHAREDCOL    64
251 #define TF_TILES                128             /* deprecated */
252 #define TF_BILLBOARD    256
253 #define TF_TWOSIDE              512
254 #define TF_INVISIBLE    1024
255
256 #define TF_OBCOL                2048
257 #define TF_BILLBOARD2   4096    /* with Z axis constraint */
258 #define TF_SHADOW               8192
259 #define TF_BMFONT               16384
260
261 /* mtface->transp, values 1-4 are used as flags in the GL, WARNING, TF_SUB cant work with this */
262 #define TF_SOLID        0
263 #define TF_ADD          1
264 #define TF_ALPHA        2
265 #define TF_CLIP         4 /* clipmap alpha/binary alpha all or nothing! */
266
267 /* sub is not available in the user interface anymore */
268 #define TF_SUB          3
269
270
271 /* mtface->unwrap */
272 #define TF_DEPRECATED1  1
273 #define TF_DEPRECATED2  2
274 #define TF_DEPRECATED3  4
275 #define TF_DEPRECATED4  8
276 #define TF_PIN1             16
277 #define TF_PIN2             32
278 #define TF_PIN3                 64
279 #define TF_PIN4         128
280
281 #endif