Added SVertex::curvatures() in the Python API to retrieve curvature
[blender.git] / source / blender / makesdna / DNA_meshdata_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 #ifndef DNA_MESHDATA_TYPES_H
28 #define DNA_MESHDATA_TYPES_H
29
30 /** \file DNA_meshdata_types.h
31  *  \ingroup DNA
32  */
33
34 #include "DNA_customdata_types.h"
35 #include "DNA_listBase.h"
36
37 struct Bone;
38 struct Image;
39
40 typedef struct MFace {
41         unsigned int v1, v2, v3, v4;
42         short 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, bweight;
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, bweight;
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 /*bmesh custom data stuff*/
76 typedef struct MTexPoly{
77         struct Image *tpage;
78         char flag, transp;
79         short mode,tile,unwrap;
80 }MTexPoly;
81
82 typedef struct MLoopUV{
83         float uv[2];
84 }MLoopUV;
85
86 typedef struct MLoopCol{
87         char a, r, g, b;
88         int pad;  /*waste!*/
89 }MLoopCol;
90
91 typedef struct MSticky {
92         float co[2];
93 } MSticky;
94
95 typedef struct MSelect {
96         int index;
97         int type;
98 } MSelect;
99
100 typedef struct MTFace {
101         float uv[4][2];
102         struct Image *tpage;
103         char flag, transp;
104         short mode, tile, unwrap;
105 } MTFace;
106
107 /*Custom Data Properties*/
108 typedef struct MFloatProperty{
109         float   f;
110 } MFloatProperty;
111 typedef struct MIntProperty{
112         int             i;
113 } MIntProperty;
114 typedef struct MStringProperty{
115         char    s[256];
116 } MStringProperty;
117
118 typedef struct OrigSpaceFace {
119         float uv[4][2];
120 } OrigSpaceFace;
121
122 typedef struct MDisps {
123         /* Strange bug in SDNA: if disps pointer comes first, it fails to see totdisp */
124         int totdisp;
125         char pad[4];
126         float (*disps)[3];
127 } MDisps;
128
129 /** Multires structs kept for compatibility with old files **/
130 typedef struct MultiresCol {
131         float a, r, g, b;
132 } MultiresCol;
133 typedef struct MultiresColFace {
134         /* vertex colors */
135         MultiresCol col[4];
136 } MultiresColFace;
137 typedef struct MultiresFace {
138         unsigned int v[4];
139         unsigned int mid;
140         char flag, mat_nr, pad[2];
141 } MultiresFace;
142 typedef struct MultiresEdge {
143         unsigned int v[2];
144         unsigned int mid;
145 } MultiresEdge;
146
147 struct MultiresMapNode;
148 typedef struct MultiresLevel {
149         struct MultiresLevel *next, *prev;
150
151         MultiresFace *faces;
152         MultiresColFace *colfaces;
153         MultiresEdge *edges;
154
155         unsigned int totvert, totface, totedge, pad;
156
157         /* Kept for compatibility with even older files */
158         MVert *verts;
159 } MultiresLevel;
160
161 typedef struct Multires {
162         ListBase levels;
163         MVert *verts;
164
165         unsigned char level_count, current, newlvl, edgelvl, pinlvl, renderlvl;
166         unsigned char use_col, flag;
167
168         /* Special level 1 data that cannot be modified from other levels */
169         CustomData vdata;
170         CustomData fdata;
171         short *edge_flags;
172         char *edge_creases;
173 } Multires;
174
175 /** End Multires **/
176
177 typedef struct MRecast{
178         int             i;
179 } MRecast;
180
181 /* mvert->flag (1=SELECT) */
182 #define ME_SPHERETEST           2
183 #define ME_VERT_TMP_TAG         4
184 #define ME_HIDE                         16
185 #define ME_VERT_MERGED          (1<<6)
186 #define ME_VERT_PBVH_UPDATE     (1<<7)
187
188 /* medge->flag (1=SELECT)*/
189 #define ME_EDGEDRAW                     (1<<1)
190 #define ME_SEAM                         (1<<2)
191 #define ME_FGON                         (1<<3)
192                                                 /* reserve 16 for ME_HIDE */
193 #define ME_EDGERENDER           (1<<5)
194 #define ME_LOOSEEDGE            (1<<7)
195 /* #define ME_SEAM_LAST         (1<<8) */ /* UNUSED */
196 #define ME_SHARP                        (1<<9)    /* only reason this flag remains a 'short' */
197 #define ME_FREESTYLE_EDGE       (1<<10)
198
199 /* puno = vertexnormal (mface) */
200 /* render assumes flips to be ordered like this */
201 #define ME_FLIPV1               1
202 #define ME_FLIPV2               2
203 #define ME_FLIPV3               4
204 #define ME_FLIPV4               8
205 #define ME_PROJXY               16
206 #define ME_PROJXZ               32
207 #define ME_PROJYZ               64
208
209 /* edcode (mface) */
210 #define ME_V1V2                 1
211 #define ME_V2V3                 2
212 #define ME_V3V1                 4
213 #define ME_V3V4                 4
214 #define ME_V4V1                 8
215
216 /* flag (mface) */
217 #define ME_SMOOTH                       1
218 #define ME_FACE_SEL                     2
219 #define ME_FREESTYLE_FACE       4
220                                                 /* flag ME_HIDE==16 is used here too */ 
221 /* mselect->type */
222 #define ME_VSEl 0
223 #define ME_ESEl 1
224 #define ME_FSEL 2
225
226 /* mtface->flag */
227 #define TF_SELECT       1 /* use MFace hide flag (after 2.43), should be able to reuse after 2.44 */
228 #define TF_ACTIVE       2 /* deprecated! */
229 #define TF_SEL1         4
230 #define TF_SEL2         8
231 #define TF_SEL3         16
232 #define TF_SEL4         32
233 #define TF_HIDE         64 /* unused, same as TF_SELECT */
234
235 /* mtface->mode */
236 #define TF_DYNAMIC              1
237 #define TF_ALPHASORT    2
238 #define TF_TEX                  4
239 #define TF_SHAREDVERT   8
240 #define TF_LIGHT                16
241
242 #define TF_CONVERTED 32 /* tface converted to material */
243
244 #define TF_SHAREDCOL    64
245 #define TF_TILES                128             /* deprecated */
246 #define TF_BILLBOARD    256
247 #define TF_TWOSIDE              512
248 #define TF_INVISIBLE    1024
249
250 #define TF_OBCOL                2048
251 #define TF_BILLBOARD2   4096    /* with Z axis constraint */
252 #define TF_SHADOW               8192
253 #define TF_BMFONT               16384
254
255 /* mtface->transp, values 1-4 are used as flags in the GL, WARNING, TF_SUB cant work with this */
256 #define TF_SOLID        0
257 #define TF_ADD          1
258 #define TF_ALPHA        2
259 #define TF_CLIP         4 /* clipmap alpha/binary alpha all or nothing! */
260
261 /* sub is not available in the user interface anymore */
262 #define TF_SUB          3
263
264
265 /* mtface->unwrap */
266 #define TF_DEPRECATED1  1
267 #define TF_DEPRECATED2  2
268 #define TF_DEPRECATED3  4
269 #define TF_DEPRECATED4  8
270 #define TF_PIN1             16
271 #define TF_PIN2             32
272 #define TF_PIN3                 64
273 #define TF_PIN4         128
274
275 #endif