- Fixes hidden vertices for undo. They are now stored in mvert->flag and
[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 #define ushort unsigned short
57
58 typedef struct MFace {
59 /*      unsigned short v1, v2, v3, v4; */
60         ushort v1, v2, v3, v4;
61         char puno, mat_nr;
62         char edcode, flag;
63 } MFace;
64
65 #undef ushort
66
67 typedef struct MFaceInt {
68         int v1, v2, v3, v4;
69         char puno, mat_nr;
70         char edcode, flag;
71 } MFaceInt;
72
73
74 typedef struct TFace {
75
76         /* this one gets interpreted as a image in texture.c  */
77         void *tpage;
78
79         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 */
80         unsigned int col[4];
81         char flag, transp;
82         short mode, tile, pad;
83 } TFace;
84
85 typedef struct MDeformWeight {  /* __NLA */
86         int                             def_nr;         /* __NLA */
87         float                   weight;         /* __NLA */
88         struct Bone             *data;          /* __NLA */     /* Runtime: Does not need to be valid in file */
89 } MDeformWeight;                                /* __NLA */
90
91 typedef struct MDeformVert {    /* __NLA */
92         struct MDeformWeight *dw;       /* __NLA */
93         int totweight;                          /* __NLA */
94         int reserved1;                          /* __NLA */     
95 } MDeformVert;                                  /* __NLA */
96
97
98 typedef struct MVert {
99         float   co[3];
100         short   no[3];
101         char flag, mat_nr;
102 } MVert;
103
104
105 typedef struct MCol {
106         char a, r, g, b;
107 } MCol;
108
109
110 typedef struct MSticky {
111         float co[2];
112 } MSticky;
113
114
115 typedef struct Mesh {
116         ID id;
117
118         struct BoundBox *bb;
119
120         ListBase effect;
121         ListBase disp;
122         
123         struct Ipo *ipo;
124         struct Key *key;
125         struct Material **mat;
126
127         void *mface, *dface, *tface;
128         struct MVert *mvert;
129         struct MDeformVert *dvert;      /* __NLA */
130         struct MCol *mcol;
131         struct MSticky *msticky;
132         struct Mesh *texcomesh;
133         float *orco;
134         
135         struct OcInfo *oc;              /* not written in file */
136         void *sumohandle;
137     
138         int totvert, totface;
139         
140         int texflag;
141         float loc[3];
142         float size[3];
143         float rot[3];
144         
145         short smoothresh, flag;
146         short subdiv, subdivr, subdivdone;
147         short totcol;
148         short reserved1, reserved2;     /* Padding */
149
150         float cubemapsize, rtf;
151
152 } Mesh;
153
154
155
156 /* **************** MESH ********************* */
157
158 /* texflag */
159 #define AUTOSPACE               1
160
161 /* me->flag */
162 #define ME_ISDONE               1
163 #define ME_NOPUNOFLIP   2
164 #define ME_TWOSIDED             4
165 #define ME_UVEFFECT             8
166 #define ME_VCOLEFFECT   16
167 #define ME_AUTOSMOOTH   32
168 #define ME_SMESH                64
169 #define ME_SUBSURF              128
170 #define ME_OPT_EDGES    256
171
172 /* puno = vertexnormal (mface) */
173 #define ME_FLIPV1               1
174 #define ME_FLIPV2               2
175 #define ME_FLIPV3               4
176 #define ME_FLIPV4               8
177 #define ME_PROJXY               16
178 #define ME_PROJXZ               32
179 #define ME_PROJYZ               64
180
181 /* edcode (mface) */
182 #define ME_V1V2                 1
183 #define ME_V2V3                 2
184 #define ME_V3V1                 4
185 #define ME_V3V4                 4
186 #define ME_V4V1                 8
187
188 /* flag (mface) */
189 #define ME_SMOOTH               1
190
191
192 #define TF_DYNAMIC              1
193 /* #define TF_INVISIBLE 2 */
194 #define TF_TEX                  4
195 #define TF_SHAREDVERT   8
196 #define TF_LIGHT                16
197
198 #define TF_SHAREDCOL    64
199 #define TF_TILES                128
200 #define TF_BILLBOARD    256
201 #define TF_TWOSIDE              512
202 #define TF_INVISIBLE    1024
203
204 #define TF_OBCOL                2048
205 #define TF_BILLBOARD2           4096    /* with Z axis constraint */
206 #define TF_SHADOW               8192
207 #define TF_BMFONT               16384
208
209 /* tface->flag: 1=select 2=active*/
210 #define TF_SELECT       1
211 #define TF_ACTIVE       2
212 #define TF_SEL1         4
213 #define TF_SEL2         8
214 #define TF_SEL3         16
215 #define TF_SEL4         32
216 #define TF_HIDE         64
217
218 /* tface->transp */
219 #define TF_SOLID        0
220 #define TF_ADD          1
221 #define TF_ALPHA        2
222 #define TF_SUB          3
223
224 /* mvert->flag (1=select) */
225 #define ME_SPHERETEST   2
226 #define ME_SPHERETEMP   4
227 #define ME_HIDE                 16
228
229 #endif
230