897368fd5dfc40ae11aea747f9d82cf639333965
[blender.git] / source / blender / makesdna / DNA_meta_types.h
1 /**
2  * blenlib/DNA_meta_types.h (mar-2001 nzc)
3  *
4  * $Id$ 
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31 #ifndef DNA_META_TYPES_H
32 #define DNA_META_TYPES_H
33
34 #include "DNA_listBase.h"
35 #include "DNA_ID.h"
36
37 struct BoundBox;
38 struct Ipo;
39 struct Material;
40
41
42 typedef struct MetaElem {
43         struct MetaElem *next, *prev;
44
45         struct BoundBox *bb;        /* Bound Box of MetaElem */
46         int i1,j1,k1, i2,j2,k2;     /* corners of Bounding Box in lattice */
47
48         short type, flag, selcol1, selcol2;
49         float x, y, z;          /* Position of center of MetaElem */
50         float quat[4];          /* Rotation of MetaElem */
51         float expx; /* dimension parameters, used for some types like cubes */
52         float expy;
53         float expz;
54         float rad;              /* radius of the meta element */
55         float rad2;             /* temp field, used only while processing */
56         float s;                /* stiffness, how much of the element to fill */
57         float len;              /* old, only used for backwards compat. use dimensions now */
58         
59         float *mat, *imat;      /* matrix and inverted matrix */
60         
61 } MetaElem;
62
63 typedef struct MetaBall {
64         ID id;
65         
66         struct BoundBox *bb;
67
68         ListBase elems;
69         ListBase disp;
70         ListBase *editelems;            /* not saved in files, note we use pointer for editmode check */
71         struct Ipo *ipo;
72
73         /* material of the mother ball will define the material used of all others */
74         struct Material **mat; 
75
76         short flag, totcol;
77         int texflag; /* used to store MB_AUTOSPACE */
78         
79         /* texture space, copied as one block in editobject.c */
80         float loc[3];
81         float size[3];
82         float rot[3];
83         
84         float wiresize, rendersize; /* display and render res */
85         
86         /* bias elements to have an offset volume.
87         mother ball changes will effect other objects thresholds,
88         but these may also have their own thresh as an offset */
89         float thresh;
90
91         /* used in editmode */
92         /*ListBase edit_elems;*/
93         MetaElem *lastelem;     
94 } MetaBall;
95
96 /* **************** METABALL ********************* */
97
98 /* texflag */
99 #define MB_AUTOSPACE    1
100
101 /* mb->flag */
102 #define MB_UPDATE_ALWAYS        0
103 #define MB_UPDATE_HALFRES       1
104 #define MB_UPDATE_FAST          2
105 #define MB_UPDATE_NEVER         3
106
107 /* ml->type */
108 #define MB_BALL         0
109 #define MB_TUBEX        1 /* depercated */
110 #define MB_TUBEY        2 /* depercated */
111 #define MB_TUBEZ        3 /* depercated */
112 #define MB_TUBE         4
113 #define MB_PLANE        5
114 #define MB_ELIPSOID     6
115 #define MB_CUBE         7
116
117 /* ml->flag */
118 #define MB_NEGATIVE     2
119 #define MB_HIDE         8
120 #define MB_SCALE_RAD    16
121
122 #endif