Fix for own mistake: arc diff swallowed a commit somehow, breaking
[blender.git] / source / blender / makesdna / DNA_meta_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
28 /** \file DNA_meta_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_META_TYPES_H__
33 #define __DNA_META_TYPES_H__
34
35 #include "DNA_listBase.h"
36 #include "DNA_ID.h"
37
38 struct BoundBox;
39 struct AnimData;
40 struct Ipo;
41 struct Material;
42
43
44 typedef struct MetaElem {
45         struct MetaElem *next, *prev;
46
47         struct BoundBox *bb;        /* Bound Box of MetaElem */
48
49         short type, flag, selcol1, selcol2;
50         float x, y, z;          /* Position of center of MetaElem */
51         float quat[4];          /* Rotation of MetaElem (MUST be kept normalized) */
52         float expx; /* dimension parameters, used for some types like cubes */
53         float expy;
54         float expz;
55         float rad;              /* radius of the meta element */
56         float rad2;             /* temp field, used only while processing */
57         float s;                /* stiffness, how much of the element to fill */
58         float len;              /* old, only used for backwards compat. use dimensions now */
59         
60         float *mat, *imat;      /* matrix and inverted matrix */
61         
62 } MetaElem;
63
64 typedef struct MetaBall {
65         ID id;
66         struct AnimData *adt;
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  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
72
73         /* material of the mother ball will define the material used of all others */
74         struct Material **mat; 
75
76         char flag, flag2;                       /* flag is enum for updates, flag2 is bitflags for settings */
77         short totcol;
78         short texflag, pad; /* used to store MB_AUTOSPACE */
79         
80         /* texture space, copied as one block in editobject.c */
81         float loc[3];
82         float size[3];
83         float rot[3];
84         
85         float wiresize, rendersize; /* display and render res */
86         
87         /* bias elements to have an offset volume.
88          * mother ball changes will effect other objects thresholds,
89          * but these may also have their own thresh as an offset */
90         float thresh;
91
92         /* used in editmode */
93         /*ListBase edit_elems;*/
94         MetaElem *lastelem;
95 } MetaBall;
96
97 /* **************** METABALL ********************* */
98
99 /* texflag */
100 #define MB_AUTOSPACE    1
101
102 /* mb->flag */
103 #define MB_UPDATE_ALWAYS        0
104 #define MB_UPDATE_HALFRES       1
105 #define MB_UPDATE_FAST          2
106 #define MB_UPDATE_NEVER         3
107
108 /* mb->flag2 */
109 #define MB_DS_EXPAND    (1<<0)
110
111
112 /* ml->type */
113 #define MB_BALL         0
114 #define MB_TUBEX        1 /* depercated */
115 #define MB_TUBEY        2 /* depercated */
116 #define MB_TUBEZ        3 /* depercated */
117 #define MB_TUBE         4
118 #define MB_PLANE        5
119 #define MB_ELIPSOID     6
120 #define MB_CUBE         7
121
122 #define MB_TYPE_SIZE_SQUARED(type)  (type == MB_ELIPSOID)
123
124 /* ml->flag */
125 #define MB_NEGATIVE     2
126 #define MB_HIDE         8
127 #define MB_SCALE_RAD    16
128
129 #endif