Initial revision
[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];         /* als je dit wijzigt: ook fie set_correct_uv editmesh.c, ook andere plekken maken gebruik van de lengte van dit blok */
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;              /* niet 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;
147         short totcol;
148         short reserved1, reserved2, reserved3;  /* 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
171 /* puno (mface) */
172 #define ME_FLIPV1               1
173 #define ME_FLIPV2               2
174 #define ME_FLIPV3               4
175 #define ME_FLIPV4               8
176 #define ME_PROJXY               16
177 #define ME_PROJXZ               32
178 #define ME_PROJYZ               64
179
180 /* edcode (mface) */
181 #define ME_V1V2                 1
182 #define ME_V2V3                 2
183 #define ME_V3V1                 4
184 #define ME_V3V4                 4
185 #define ME_V4V1                 8
186
187 /* flag (mface) */
188 #define ME_SMOOTH               1
189
190 /* tface->mode (beetje compatible met PMD formaat) */
191 /* sharedvert bepaalt hoe de PSX versie wordt, sharedcol is vertexkleur en puno */
192
193 #define TF_DYNAMIC              1
194 /* #define TF_INVISIBLE 2 */
195 #define TF_TEX                  4
196 #define TF_SHAREDVERT   8
197 #define TF_LIGHT                16
198
199 #define TF_SHAREDCOL    64
200 #define TF_TILES                128
201 #define TF_BILLBOARD    256
202 #define TF_TWOSIDE              512
203 #define TF_INVISIBLE    1024
204
205 #define TF_OBCOL                2048
206 #define TF_BILLBOARD2           4096    /* with Z axis constraint */
207 #define TF_SHADOW               8192
208 #define TF_BMFONT               16384
209
210 /* tface->flag: 1=select 2=active*/
211 #define TF_SELECT       1
212 #define TF_ACTIVE       2
213 #define TF_SEL1         4
214 #define TF_SEL2         8
215 #define TF_SEL3         16
216 #define TF_SEL4         32
217 #define TF_HIDE         64
218
219 /* tface->transp */
220 #define TF_SOLID        0
221 #define TF_ADD          1
222 #define TF_ALPHA        2
223 #define TF_SUB          3
224
225 /* mvert->flag (1=select) */
226 #define ME_SPHERETEST   2
227 #define ME_SPHERETEMP   4
228
229 #endif