3b69656464e0bea99d118ee59427b5147a581032
[blender.git] / source / blender / makesdna / DNA_mesh_types.h
1 /**
2  * blenlib/DNA_mesh_types.h (mar-2001 nzc)
3  *
4  * Mesh stuff.
5  *
6  * $Id$ 
7  *
8  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version. The Blender
14  * Foundation also sells licenses for use in proprietary software under
15  * the Blender License.  See http://www.blender.org/BL/ for information
16  * about this.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26  *
27  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
28  * All rights reserved.
29  *
30  * The Original Code is: all of this file.
31  *
32  * Contributor(s): none yet.
33  *
34  * ***** END GPL/BL DUAL LICENSE BLOCK *****
35  */
36 #ifndef DNA_MESH_TYPES_H
37 #define DNA_MESH_TYPES_H
38
39 #include "DNA_listBase.h"
40 #include "DNA_ID.h"
41
42 struct Ipo;
43 struct Key;
44 struct Material;
45 struct MVert;
46 struct MCol;
47 struct MSticky;
48 struct Mesh;
49 struct OcInfo;
50 struct bDeformGroup;
51
52 /* This little gem is needed to satisfy the curious realms of sdna. On
53  * the other hand, it also interferes with sys/types.h, so we get rid
54  * of it asap. */
55
56 typedef struct MFace {
57         unsigned int v1, v2, v3, v4;
58         char puno, mat_nr;
59         char edcode, flag;
60 } MFace;
61
62 #undef ushort
63
64 typedef struct MFaceInt {
65         int v1, v2, v3, v4;
66         char puno, mat_nr;
67         char edcode, flag;
68 } MFaceInt;
69
70
71 typedef struct TFace {
72
73         /* this one gets interpreted as a image in texture.c  */
74         void *tpage;
75
76         float uv[4][2];         /* when you change this: also do function set_correct_uv in editmesh.c, and there are more locations that use the size of this part */
77         unsigned int col[4];
78         char flag, transp;
79         short mode, tile, pad;
80 } TFace;
81
82 typedef struct MDeformWeight {  /* __NLA */
83         int                             def_nr;         /* __NLA */
84         float                   weight;         /* __NLA */
85         struct Bone             *data;          /* __NLA */     /* Runtime: Does not need to be valid in file */
86 } MDeformWeight;                                /* __NLA */
87
88 typedef struct MDeformVert {    /* __NLA */
89         struct MDeformWeight *dw;       /* __NLA */
90         int totweight;                          /* __NLA */
91         int reserved1;                          /* __NLA */     
92 } MDeformVert;                                  /* __NLA */
93
94
95 typedef struct MVert {
96         float   co[3];
97         short   no[3];
98         char flag, mat_nr;
99 } MVert;
100
101
102 typedef struct MCol {
103         char a, r, g, b;
104 } MCol;
105
106
107 typedef struct MSticky {
108         float co[2];
109 } MSticky;
110
111
112 typedef struct Mesh {
113         ID id;
114
115         struct BoundBox *bb;
116
117         ListBase effect;
118         ListBase disp;
119         
120         struct Ipo *ipo;
121         struct Key *key;
122         struct Material **mat;
123
124         void *mface, *dface, *tface;
125         struct MVert *mvert;
126         struct MDeformVert *dvert;      /* __NLA */
127         struct MCol *mcol;
128         struct MSticky *msticky;
129         struct Mesh *texcomesh;
130         float *orco;
131         
132         struct OcInfo *oc;              /* not written in file */
133         void *sumohandle;
134     
135         int totvert, totface;
136         
137         int texflag;
138         float loc[3];
139         float size[3];
140         float rot[3];
141         
142         short smoothresh, flag;
143         short subdiv, subdivr, subdivdone;
144         short totcol;
145         short reserved1, reserved2;     /* Padding */
146
147         float cubemapsize, rtf;
148
149 } Mesh;
150
151
152
153 /* **************** MESH ********************* */
154
155 /* texflag */
156 #define AUTOSPACE               1
157
158 /* me->flag */
159 #define ME_ISDONE               1
160 #define ME_NOPUNOFLIP   2
161 #define ME_TWOSIDED             4
162 #define ME_UVEFFECT             8
163 #define ME_VCOLEFFECT   16
164 #define ME_AUTOSMOOTH   32
165 #define ME_SMESH                64
166 #define ME_SUBSURF              128
167 #define ME_OPT_EDGES    256
168
169 /* puno = vertexnormal (mface) */
170 #define ME_FLIPV1               1
171 #define ME_FLIPV2               2
172 #define ME_FLIPV3               4
173 #define ME_FLIPV4               8
174 #define ME_PROJXY               16
175 #define ME_PROJXZ               32
176 #define ME_PROJYZ               64
177
178 /* edcode (mface) */
179 #define ME_V1V2                 1
180 #define ME_V2V3                 2
181 #define ME_V3V1                 4
182 #define ME_V3V4                 4
183 #define ME_V4V1                 8
184
185 /* flag (mface) */
186 #define ME_SMOOTH               1
187
188
189 #define TF_DYNAMIC              1
190 /* #define TF_INVISIBLE 2 */
191 #define TF_TEX                  4
192 #define TF_SHAREDVERT   8
193 #define TF_LIGHT                16
194
195 #define TF_SHAREDCOL    64
196 #define TF_TILES                128
197 #define TF_BILLBOARD    256
198 #define TF_TWOSIDE              512
199 #define TF_INVISIBLE    1024
200
201 #define TF_OBCOL                2048
202 #define TF_BILLBOARD2           4096    /* with Z axis constraint */
203 #define TF_SHADOW               8192
204 #define TF_BMFONT               16384
205
206 /* tface->flag: 1=select 2=active*/
207 #define TF_SELECT       1
208 #define TF_ACTIVE       2
209 #define TF_SEL1         4
210 #define TF_SEL2         8
211 #define TF_SEL3         16
212 #define TF_SEL4         32
213 #define TF_HIDE         64
214
215 /* tface->transp */
216 #define TF_SOLID        0
217 #define TF_ADD          1
218 #define TF_ALPHA        2
219 #define TF_SUB          3
220
221 /* mvert->flag (1=select) */
222 #define ME_SPHERETEST   2
223 #define ME_SPHERETEMP   4
224 #define ME_HIDE                 16
225
226 #endif
227