svn merge -r 14236:14505 https://svn.blender.org/svnroot/bf-blender/trunk/blender
[blender.git] / source / blender / makesdna / DNA_mesh_types.h
1 /**
2  * $Id$ 
3  *
4  * ***** BEGIN GPL 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.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef DNA_MESH_TYPES_H
30 #define DNA_MESH_TYPES_H
31
32 #include "DNA_listBase.h"
33 #include "DNA_ID.h"
34 #include "DNA_customdata_types.h"
35
36 struct DerivedMesh;
37 struct Ipo;
38 struct Key;
39 struct Material;
40 struct MVert;
41 struct MEdge;
42 struct MFace;
43 struct MCol;
44 struct MSticky;
45 struct Mesh;
46 struct OcInfo;
47 struct Multires;
48 struct PartialVisibility;
49
50 typedef struct Mesh {
51         ID id;
52
53         struct BoundBox *bb;
54
55         ListBase effect;
56         
57         struct Ipo *ipo;
58         struct Key *key;
59         struct Material **mat;
60
61         struct MFace *mface;    /* array of mesh object mode faces */
62         struct MTFace *mtface;  /* store face UV's and texture here */
63         struct TFace *tface;    /* depecrated, use mtface */
64         struct MVert *mvert;    /* array of verts */
65         struct MEdge *medge;    /* array of edges */
66         struct MDeformVert *dvert;      /* __NLA */
67         struct MCol *mcol;              /* array of colors, this must be the number of faces * 4 */
68         struct MSticky *msticky;
69         struct Mesh *texcomesh;
70         struct MSelect *mselect;
71
72         struct CustomData vdata, edata, fdata;
73
74         int totvert, totedge, totface, totselect;
75         
76         /* the last selected vertex/edge/face are used for the active face however
77          * this means the active face must always be selected, this is to keep track
78          * of the last selected face and is similar to the old active face flag where
79          * the face does not need to be selected, -1 is inactive */
80         int act_face; 
81         
82         int texflag;
83         
84         /* texture space, copied as one block in editobject.c */
85         float loc[3];
86         float size[3];
87         float rot[3];
88         
89         float cubemapsize, pad;
90
91         short smoothresh, flag;
92
93         short subdiv, subdivr;
94         short totcol;
95         short subsurftype;              /* only kept for backwards compat, not used anymore */
96
97         struct Multires *mr;            /* Multiresolution modeling data */
98         struct PartialVisibility *pv;
99 /*ifdef WITH_VERSE*/
100         /* not written in file, pointer at geometry VerseNode */
101         void *vnode;
102 /*#endif*/
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->flag */
120 #define ME_ISDONE               1
121 #define ME_NOPUNOFLIP   2
122 #define ME_TWOSIDED             4
123 #define ME_UVEFFECT             8
124 #define ME_VCOLEFFECT   16
125 #define ME_AUTOSMOOTH   32
126 #define ME_SMESH                64
127 #define ME_SUBSURF              128
128 #define ME_OPT_EDGES    256
129
130 /* Subsurf Type */
131 #define ME_CC_SUBSURF           0
132 #define ME_SIMPLE_SUBSURF       1
133
134 #define MESH_MAX_VERTS 2000000000L
135
136 #endif