- added Mesh->derived and Mesh->decimated DerivedMesh pointers
[blender.git] / source / blender / makesdna / DNA_mesh_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_MESH_TYPES_H
33 #define DNA_MESH_TYPES_H
34
35 #include "DNA_listBase.h"
36 #include "DNA_ID.h"
37
38 struct DerivedMesh;
39 struct DispListMesh;
40 struct Ipo;
41 struct Key;
42 struct Material;
43 struct MVert;
44 struct MEdge;
45 struct MCol;
46 struct MSticky;
47 struct Mesh;
48 struct OcInfo;
49
50 typedef struct TFace {
51
52         /* this one gets interpreted as a image in texture.c  */
53         void *tpage;
54
55         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 */
56         unsigned int col[4];
57         char flag, transp;
58         short mode, tile, unwrap;
59 } TFace;
60
61 typedef struct Mesh {
62         ID id;
63
64         struct BoundBox *bb;
65
66         ListBase effect;
67         ListBase disp;
68         
69         struct Ipo *ipo;
70         struct Key *key;
71         struct Material **mat;
72
73         void *mface, *dface, *tface;
74         struct MVert *mvert;
75         struct MEdge *medge;
76         struct MDeformVert *dvert;      /* __NLA */
77         struct MCol *mcol;
78         struct MSticky *msticky;
79         struct Mesh *texcomesh;
80         float *orco;
81
82                 /* not written in file, caches derived mesh */
83         struct DerivedMesh *derived;
84                 /* hacky place to store temporary decimated mesh */
85         struct DispListMesh *decimated;
86
87         struct OcInfo *oc;              /* not written in file */
88         void *sumohandle;
89
90         int totvert, totedge, totface;
91         int texflag;
92         
93         float loc[3];
94         float size[3];
95         float rot[3];
96         
97         float cubemapsize, pad;
98
99         short smoothresh, flag;
100
101         short subdiv, subdivr;
102         short totcol;
103         short subsurftype; 
104
105 } Mesh;
106
107
108
109 /* **************** MESH ********************* */
110
111 /* texflag */
112 #define AUTOSPACE       1
113
114 /* me->flag */
115 #define ME_ISDONE               1
116 #define ME_NOPUNOFLIP   2
117 #define ME_TWOSIDED             4
118 #define ME_UVEFFECT             8
119 #define ME_VCOLEFFECT   16
120 #define ME_AUTOSMOOTH   32
121 #define ME_SMESH                64
122 #define ME_SUBSURF              128
123 #define ME_OPT_EDGES    256
124
125 /* Subsurf Type */
126 #define ME_CC_SUBSURF           0
127 #define ME_SIMPLE_SUBSURF       1
128
129 #ifdef USE_CCGSUBSURFLIB
130 #define ME_CCG_SUBSURF          2
131 #endif
132
133 #define TF_DYNAMIC              1
134 /* #define TF_INVISIBLE 2 */
135 #define TF_TEX                  4
136 #define TF_SHAREDVERT   8
137 #define TF_LIGHT                16
138
139 #define TF_SHAREDCOL    64
140 #define TF_TILES                128
141 #define TF_BILLBOARD    256
142 #define TF_TWOSIDE              512
143 #define TF_INVISIBLE    1024
144
145 #define TF_OBCOL                2048
146 #define TF_BILLBOARD2           4096    /* with Z axis constraint */
147 #define TF_SHADOW               8192
148 #define TF_BMFONT               16384
149
150 /* tface->flag: 1=select 2=active*/
151 #define TF_SELECT       1
152 #define TF_ACTIVE       2
153 #define TF_SEL1         4
154 #define TF_SEL2         8
155 #define TF_SEL3         16
156 #define TF_SEL4         32
157 #define TF_HIDE         64
158
159 /* tface->transp */
160 #define TF_SOLID        0
161 #define TF_ADD          1
162 #define TF_ALPHA        2
163 #define TF_SUB          3
164
165 /* tface->unwrap */
166 #define TF_SEAM1        1
167 #define TF_SEAM2        2
168 #define TF_SEAM3        4
169 #define TF_SEAM4        8
170 #define TF_PIN1     16
171 #define TF_PIN2     32
172 #define TF_PIN3     64
173 #define TF_PIN4     128
174
175 #define MESH_MAX_VERTS 2000000000L
176
177 #endif