ece6c84b0e805c7d2ebaf5c6c2d4c959ba487d39
[blender.git] / source / blender / makesdna / DNA_mesh_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_MESH_TYPES_H
28 #define DNA_MESH_TYPES_H
29
30 /** \file DNA_mesh_types.h
31  *  \ingroup DNA
32  */
33
34 #include "DNA_listBase.h"
35 #include "DNA_ID.h"
36 #include "DNA_customdata_types.h"
37
38 struct DerivedMesh;
39 struct Ipo;
40 struct Key;
41 struct Material;
42 struct MVert;
43 struct MEdge;
44 struct MFace;
45 struct MCol;
46 struct MSticky;
47 struct Mesh;
48 struct OcInfo;
49 struct Multires;
50 struct PartialVisibility;
51 struct EditMesh;
52 struct AnimData;
53
54 typedef struct Mesh {
55         ID id;
56         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */
57
58         struct BoundBox *bb;
59         
60         struct Ipo *ipo;                // XXX depreceated... old animation system
61         struct Key *key;
62         struct Material **mat;
63
64         struct MFace *mface;    /* array of mesh object mode faces */
65         struct MTFace *mtface;  /* store face UV's and texture here */
66         struct TFace *tface;    /* depecrated, use mtface */
67         struct MVert *mvert;    /* array of verts */
68         struct MEdge *medge;    /* array of edges */
69         struct MDeformVert *dvert;      /* deformgroup vertices */
70         struct MCol *mcol;              /* array of colors, this must be the number of faces * 4 */
71         struct MSticky *msticky;
72         struct Mesh *texcomesh;
73         struct MSelect *mselect;
74         
75         struct EditMesh *edit_mesh;     /* not saved in file! */
76
77         struct CustomData vdata, edata, fdata;
78
79         int totvert, totedge, totface, totselect;
80         
81         /* the last selected vertex/edge/face are used for the active face however
82          * this means the active face must always be selected, this is to keep track
83          * of the last selected face and is similar to the old active face flag where
84          * the face does not need to be selected, -1 is inactive */
85         int act_face; 
86
87         /* texture space, copied as one block in editobject.c */
88         float loc[3];
89         float size[3];
90         float rot[3];
91
92         short texflag, drawflag;
93         short smoothresh, flag;
94
95         short subdiv, subdivr;
96         char subsurftype;               /* only kept for backwards compat, not used anymore */
97         char editflag;
98
99         short totcol;
100
101         struct Multires *mr;            /* deprecated multiresolution modeling data, only keep for loading old files */
102         struct PartialVisibility *pv;
103 } Mesh;
104
105 /* deprecated by MTFace, only here for file reading */
106 typedef struct TFace {
107         void *tpage;    /* the faces image for the active UVLayer */
108         float uv[4][2];
109         unsigned int col[4];
110         char flag, transp;
111         short mode, tile, unwrap;
112 } TFace;
113
114 /* **************** MESH ********************* */
115
116 /* texflag */
117 #define AUTOSPACE       1
118
119 /* me->editflag */
120 #define ME_EDIT_MIRROR_X (1 << 0)
121 #define ME_EDIT_MIRROR_Y (1 << 1) // unused so far
122 #define ME_EDIT_MIRROR_Z (1 << 2) // unused so far
123
124 #define ME_EDIT_PAINT_MASK (1 << 3)
125 #define ME_EDIT_MIRROR_TOPO (1 << 4)
126 #define ME_EDIT_VERT_SEL (1 << 5)
127
128 /* me->flag */
129 /* #define ME_ISDONE            1 */
130 #define ME_DEPRECATED   2
131 #define ME_TWOSIDED             4
132 #define ME_UVEFFECT             8
133 #define ME_VCOLEFFECT   16
134 #define ME_AUTOSMOOTH   32
135 #define ME_SMESH                64
136 #define ME_SUBSURF              128
137 #define ME_OPT_EDGES    256
138 #define ME_DS_EXPAND    512
139
140 /* me->drawflag, short */
141 #define ME_DRAWEDGES    (1 << 0)
142 #define ME_DRAWFACES    (1 << 1)
143 #define ME_DRAWNORMALS  (1 << 2)
144 #define ME_DRAW_VNORMALS (1 << 3)
145
146 #define ME_ALLEDGES             (1 << 4)
147 #define ME_HIDDENEDGES  (1 << 5)
148
149 #define ME_DRAWCREASES  (1 << 6)
150 #define ME_DRAWSEAMS    (1 << 7)
151 #define ME_DRAWSHARP    (1 << 8)
152 #define ME_DRAWBWEIGHTS (1 << 9)
153
154 #define ME_DRAWEXTRA_EDGELEN  (1 << 10)
155 #define ME_DRAWEXTRA_FACEAREA (1 << 11)
156 #define ME_DRAWEXTRA_FACEANG  (1 << 12)
157
158 /* old global flags:
159 #define G_DRAWEDGES             (1 << 18)
160 #define G_DRAWFACES             (1 <<  7)
161 #define G_DRAWNORMALS   (1 <<  6)
162 #define G_DRAW_VNORMALS (1 << 14)
163
164 #define G_ALLEDGES              (1 << 11)
165 #define G_HIDDENEDGES   (1 << 21)
166
167 #define G_DRAWCREASES   (1 << 19)
168 #define G_DRAWSEAMS     (1 << 20)
169 #define G_DRAWSHARP     (1 << 28)
170 #define G_DRAWBWEIGHTS  (1 << 31)
171
172 #define G_DRAW_EDGELEN  (1 << 22) 
173 #define G_DRAW_FACEAREA (1 << 23)
174 #define G_DRAW_EDGEANG  (1 << 24)
175 */
176
177
178
179 /* Subsurf Type */
180 #define ME_CC_SUBSURF           0
181 #define ME_SIMPLE_SUBSURF       1
182
183 #define MESH_MAX_VERTS 2000000000L
184
185 #endif