Merge branch 'blender2.7'
[blender.git] / source / blender / makesdna / DNA_meta_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup DNA
21  */
22
23 #ifndef __DNA_META_TYPES_H__
24 #define __DNA_META_TYPES_H__
25
26 #include "DNA_defs.h"
27 #include "DNA_listBase.h"
28 #include "DNA_ID.h"
29
30 struct AnimData;
31 struct BoundBox;
32 struct Ipo;
33 struct Material;
34
35
36 typedef struct MetaElem {
37         struct MetaElem *next, *prev;
38
39         /** Bound Box of MetaElem. */
40         struct BoundBox *bb;
41
42         short type, flag;
43         short pad[2];
44         /** Position of center of MetaElem. */
45         float x, y, z;
46         /** Rotation of MetaElem (MUST be kept normalized). */
47         float quat[4];
48         /** Dimension parameters, used for some types like cubes. */
49         float expx;
50         float expy;
51         float expz;
52         /** Radius of the meta element. */
53         float rad;
54         /** Temp field, used only while processing. */
55         float rad2;
56         /** Stiffness, how much of the element to fill. */
57         float s;
58         /** Old, only used for backwards compat. use dimensions now. */
59         float len;
60
61         /** Matrix and inverted matrix. */
62         float *mat, *imat;
63 } MetaElem;
64
65 typedef struct MetaBall {
66         ID id;
67         struct AnimData *adt;
68
69         ListBase elems;
70         ListBase disp;
71         /** Not saved in files, note we use pointer for editmode check. */
72         ListBase *editelems;
73         /** Old animation system, deprecated for 2.5. */
74         struct Ipo *ipo  DNA_DEPRECATED;
75
76         /* material of the mother ball will define the material used of all others */
77         struct Material **mat;
78
79         /** Flag is enum for updates, flag2 is bitflags for settings. */
80         char flag, flag2;
81         short totcol;
82         /** Used to store MB_AUTOSPACE. */
83         short texflag, pad;
84
85         /* texture space, copied as one block in editobject.c */
86         float loc[3];
87         float size[3];
88         float rot[3];
89
90         /** Display and render res. */
91         float wiresize, rendersize;
92
93         /* bias elements to have an offset volume.
94          * mother ball changes will effect other objects thresholds,
95          * but these may also have their own thresh as an offset */
96         float thresh;
97
98         /* used in editmode */
99         /*ListBase edit_elems;*/
100         MetaElem *lastelem;
101
102         void *batch_cache;
103 } MetaBall;
104
105 /* **************** METABALL ********************* */
106
107 /* texflag */
108 #define MB_AUTOSPACE    1
109
110 /* mb->flag */
111 #define MB_UPDATE_ALWAYS        0
112 #define MB_UPDATE_HALFRES       1
113 #define MB_UPDATE_FAST          2
114 #define MB_UPDATE_NEVER         3
115
116 /* mb->flag2 */
117 #define MB_DS_EXPAND    (1<<0)
118
119
120 /* ml->type */
121 #define MB_BALL         0
122 #define MB_TUBEX        1 /* depercated */
123 #define MB_TUBEY        2 /* depercated */
124 #define MB_TUBEZ        3 /* depercated */
125 #define MB_TUBE         4
126 #define MB_PLANE        5
127 #define MB_ELIPSOID     6
128 #define MB_CUBE         7
129
130 #define MB_TYPE_SIZE_SQUARED(type)  (type == MB_ELIPSOID)
131
132 /* ml->flag */
133 #define MB_NEGATIVE     2
134 #define MB_HIDE         8
135 #define MB_SCALE_RAD    16
136
137 #endif