Industry Compat keymap: Use Move, Rotate, Scale tools for UV transform, instead of...
[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
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_META_TYPES_H__
25 #define __DNA_META_TYPES_H__
26
27 #include "DNA_defs.h"
28 #include "DNA_listBase.h"
29 #include "DNA_ID.h"
30
31 struct AnimData;
32 struct BoundBox;
33 struct Ipo;
34 struct Material;
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   char _pad[4];
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;
84   char _pad[2];
85
86   /* texture space, copied as one block in editobject.c */
87   float loc[3];
88   float size[3];
89   float rot[3];
90
91   /** Display and render res. */
92   float wiresize, rendersize;
93
94   /* bias elements to have an offset volume.
95    * mother ball changes will effect other objects thresholds,
96    * but these may also have their own thresh as an offset */
97   float thresh;
98
99   /* used in editmode */
100   /*ListBase edit_elems;*/
101   MetaElem *lastelem;
102
103   void *batch_cache;
104 } MetaBall;
105
106 /* **************** METABALL ********************* */
107
108 /* texflag */
109 #define MB_AUTOSPACE 1
110
111 /* mb->flag */
112 #define MB_UPDATE_ALWAYS 0
113 #define MB_UPDATE_HALFRES 1
114 #define MB_UPDATE_FAST 2
115 #define MB_UPDATE_NEVER 3
116
117 /* mb->flag2 */
118 #define MB_DS_EXPAND (1 << 0)
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