New particle collisions code:
[blender.git] / source / blender / makesdna / DNA_meta_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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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_META_TYPES_H
30 #define DNA_META_TYPES_H
31
32 /** \file DNA_meta_types.h
33  *  \ingroup DNA
34  */
35
36 #include "DNA_listBase.h"
37 #include "DNA_ID.h"
38
39 struct BoundBox;
40 struct AnimData;
41 struct Ipo;
42 struct Material;
43
44
45 typedef struct MetaElem {
46         struct MetaElem *next, *prev;
47
48         struct BoundBox *bb;        /* Bound Box of MetaElem */
49         int i1,j1,k1, i2,j2,k2;     /* corners of Bounding Box in lattice */
50
51         short type, flag, selcol1, selcol2;
52         float x, y, z;          /* Position of center of MetaElem */
53         float quat[4];          /* Rotation of MetaElem (MUST be kept normalized) */
54         float expx; /* dimension parameters, used for some types like cubes */
55         float expy;
56         float expz;
57         float rad;              /* radius of the meta element */
58         float rad2;             /* temp field, used only while processing */
59         float s;                /* stiffness, how much of the element to fill */
60         float len;              /* old, only used for backwards compat. use dimensions now */
61         
62         float *mat, *imat;      /* matrix and inverted matrix */
63         
64 } MetaElem;
65
66 typedef struct MetaBall {
67         ID id;
68         struct AnimData *adt;
69         
70         struct BoundBox *bb;
71
72         ListBase elems;
73         ListBase disp;
74         ListBase *editelems;            /* not saved in files, note we use pointer for editmode check */
75         struct Ipo *ipo;                        // XXX... depreceated (old animation system)
76
77         /* material of the mother ball will define the material used of all others */
78         struct Material **mat; 
79
80         char flag, flag2;                       /* flag is enum for updates, flag2 is bitflags for settings */
81         short totcol;
82         short texflag, pad; /* used to store MB_AUTOSPACE */
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 wiresize, rendersize; /* display and render res */
90         
91         /* bias elements to have an offset volume.
92         mother ball changes will effect other objects thresholds,
93         but these may also have their own thresh as an offset */
94         float thresh;
95
96         /* used in editmode */
97         /*ListBase edit_elems;*/
98         MetaElem *lastelem;     
99 } MetaBall;
100
101 /* **************** METABALL ********************* */
102
103 /* texflag */
104 #define MB_AUTOSPACE    1
105
106 /* mb->flag */
107 #define MB_UPDATE_ALWAYS        0
108 #define MB_UPDATE_HALFRES       1
109 #define MB_UPDATE_FAST          2
110 #define MB_UPDATE_NEVER         3
111
112 /* mb->flag2 */
113 #define MB_DS_EXPAND    (1<<0)
114
115
116 /* ml->type */
117 #define MB_BALL         0
118 #define MB_TUBEX        1 /* depercated */
119 #define MB_TUBEY        2 /* depercated */
120 #define MB_TUBEZ        3 /* depercated */
121 #define MB_TUBE         4
122 #define MB_PLANE        5
123 #define MB_ELIPSOID     6
124 #define MB_CUBE         7
125
126 /* ml->flag */
127 #define MB_NEGATIVE     2
128 #define MB_HIDE         8
129 #define MB_SCALE_RAD    16
130
131 #endif