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