Two bugfixes:
[blender.git] / source / blender / makesdna / DNA_meshdata_types.h
1 /**
2  * $Id$ 
3  *
4  * ***** BEGIN GPL/BL DUAL 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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32 #ifndef DNA_MESHDATA_TYPES_H
33 #define DNA_MESHDATA_TYPES_H
34
35 #include "DNA_customdata_types.h"
36
37 struct Bone;
38 struct Image;
39
40 typedef struct MFace {
41         unsigned int v1, v2, v3, v4;
42         char pad, mat_nr;
43         char edcode, flag;      /* we keep edcode, for conversion to edges draw flags in old files */
44 } MFace;
45
46 typedef struct MEdge {
47         unsigned int v1, v2;
48         char crease, pad;
49         short flag;
50 } MEdge;
51
52 typedef struct MDeformWeight {
53         int                             def_nr;
54         float                   weight;
55 } MDeformWeight;
56
57 typedef struct MDeformVert {
58         struct MDeformWeight *dw;
59         int totweight;
60         int flag;       /* flag only in use for weightpaint now */
61 } MDeformVert;
62
63 typedef struct MVert {
64         float   co[3];
65         short   no[3];
66         char flag, mat_nr;
67 } MVert;
68
69 /* at the moment alpha is abused for vertex painting
70  * and not used for transperency, note that red and blue are swapped */
71 typedef struct MCol {
72         char a, r, g, b;        
73 } MCol;
74
75 typedef struct MSticky {
76         float co[2];
77 } MSticky;
78
79 typedef struct MSelect {
80         int index;
81         int type;
82 } MSelect;
83
84 typedef struct MTFace {
85         float uv[4][2];
86         struct Image *tpage;
87         char flag, transp;
88         short mode, tile, unwrap;
89 } MTFace;
90
91 /*Custom Data Properties*/
92 typedef struct MFloatProperty{
93         float   f;
94 } MFloatProperty;
95 typedef struct MIntProperty{
96         int             i;
97 } MIntProperty;
98 typedef struct MStringProperty{
99         char    s[256];
100 } MStringProperty;
101
102 typedef struct OrigSpaceFace {
103         float uv[4][2];
104 } OrigSpaceFace;
105
106 /* Multiresolution modeling */
107 typedef struct MultiresCol {
108         float a, r, g, b;
109 } MultiresCol;
110 typedef struct MultiresColFace {
111         /* vertex colors */
112         MultiresCol col[4];
113 } MultiresColFace;
114 typedef struct MultiresFace {
115         unsigned int v[4];
116         unsigned int mid;
117         char flag, mat_nr, pad[2];
118 } MultiresFace;
119 typedef struct MultiresEdge {
120         unsigned int v[2];
121         unsigned int mid;
122 } MultiresEdge;
123
124 struct MultiresMapNode;
125 typedef struct MultiresLevel {
126         struct MultiresLevel *next, *prev;
127
128         MultiresFace *faces;
129         MultiresColFace *colfaces;
130         MultiresEdge *edges;
131
132         /* Temporary connectivity data */
133         char *edge_boundary_states;
134         struct ListBase *vert_edge_map;
135         struct ListBase *vert_face_map;
136         struct MultiresMapNode *map_mem;
137
138         unsigned int totvert, totface, totedge, pad;
139
140         /* Kept for compatibility with older files */
141         MVert *verts;
142 } MultiresLevel;
143
144 typedef struct Multires {
145         ListBase levels;
146         MVert *verts;
147
148         unsigned char level_count, current, newlvl, edgelvl, pinlvl, renderlvl;
149         unsigned char use_col, pad;
150
151         /* Special level 1 data that cannot be modified from other levels */
152         CustomData vdata;
153         CustomData fdata;
154         short *edge_flags;
155         char *edge_creases;
156 } Multires;
157
158 typedef struct PartialVisibility {
159         unsigned int *vert_map; /* vert_map[Old Index]= New Index */
160         int *edge_map; /* edge_map[Old Index]= New Index, -1= hidden */
161         MFace *old_faces;
162         MEdge *old_edges;
163         unsigned int totface, totedge, totvert, pad;
164 } PartialVisibility;
165
166 /* mvert->flag (1=SELECT) */
167 #define ME_SPHERETEST   2
168 #define ME_SPHERETEMP   4
169 #define ME_HIDE                 16
170 #define ME_VERT_MERGED          (1<<6)
171
172 /* medge->flag (1=SELECT)*/
173 #define ME_EDGEDRAW                     (1<<1)
174 #define ME_SEAM                         (1<<2)
175 #define ME_FGON                         (1<<3)
176                                                 /* reserve 16 for ME_HIDE */
177 #define ME_EDGERENDER           (1<<5)
178 #define ME_LOOSEEDGE            (1<<7)
179 #define ME_SEAM_LAST            (1<<8)
180 #define ME_SHARP                        (1<<9)
181
182 /* puno = vertexnormal (mface) */
183 /* render assumes flips to be ordered like this */
184 #define ME_FLIPV1               1
185 #define ME_FLIPV2               2
186 #define ME_FLIPV3               4
187 #define ME_FLIPV4               8
188 #define ME_PROJXY               16
189 #define ME_PROJXZ               32
190 #define ME_PROJYZ               64
191
192 /* edcode (mface) */
193 #define ME_V1V2                 1
194 #define ME_V2V3                 2
195 #define ME_V3V1                 4
196 #define ME_V3V4                 4
197 #define ME_V4V1                 8
198
199 /* flag (mface) */
200 #define ME_SMOOTH                       1
201 #define ME_FACE_SEL                     2
202                                                 /* flag ME_HIDE==16 is used here too */ 
203 /* mselect->type */
204 #define ME_VSEl 0
205 #define ME_ESEl 1
206 #define ME_FSEL 2
207
208 /* mtface->flag */
209 #define TF_SELECT       1 /* use MFace hide flag (after 2.43), should be able to reuse after 2.44 */
210 #define TF_ACTIVE       2 /* deprecated! */
211 #define TF_SEL1         4
212 #define TF_SEL2         8
213 #define TF_SEL3         16
214 #define TF_SEL4         32
215 #define TF_HIDE         64 /* unused, same as TF_SELECT */
216
217 /* mtface->mode */
218 #define TF_DYNAMIC              1
219 #define TF_DEPRECATED   2
220 #define TF_TEX                  4
221 #define TF_SHAREDVERT   8
222 #define TF_LIGHT                16
223
224 #define TF_SHAREDCOL    64
225 #define TF_TILES                128
226 #define TF_BILLBOARD    256
227 #define TF_TWOSIDE              512
228 #define TF_INVISIBLE    1024
229
230 #define TF_OBCOL                2048
231 #define TF_BILLBOARD2   4096    /* with Z axis constraint */
232 #define TF_SHADOW               8192
233 #define TF_BMFONT               16384
234
235 /* mtface->transp */
236 #define TF_SOLID        0
237 #define TF_ADD          1
238 #define TF_ALPHA        2
239
240 /* sub is not available in the user interface anymore */
241 #define TF_SUB          3
242
243 /* mtface->unwrap */
244 #define TF_DEPRECATED1  1
245 #define TF_DEPRECATED2  2
246 #define TF_DEPRECATED3  4
247 #define TF_DEPRECATED4  8
248 #define TF_PIN1             16
249 #define TF_PIN2             32
250 #define TF_PIN3                 64
251 #define TF_PIN4         128
252
253 #endif