Did all of the .h's in source
[blender-staging.git] / source / blender / makesdna / DNA_object_types.h
1 /**
2  * blenlib/DNA_object_types.h (mar-2001 nzc)
3  *      
4  * Object is a sort of wrapper for general info.
5  *
6  * $Id$ 
7  *
8  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version. The Blender
14  * Foundation also sells licenses for use in proprietary software under
15  * the Blender License.  See http://www.blender.org/BL/ for information
16  * about this.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26  *
27  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
28  * All rights reserved.
29  *
30  * The Original Code is: all of this file.
31  *
32  * Contributor(s): none yet.
33  *
34  * ***** END GPL/BL DUAL LICENSE BLOCK *****
35  */
36 #ifndef DNA_OBJECT_TYPES_H
37 #define DNA_OBJECT_TYPES_H
38
39 #ifdef HAVE_CONFIG_H
40 #include <config.h>
41 #endif
42
43 #include "DNA_listBase.h"
44 #include "DNA_ID.h"
45 #include "DNA_scriptlink_types.h"
46
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50
51 struct bPose;   
52 struct Object;
53 struct Ipo;
54 struct BoundBox;
55 struct Path;
56 struct Material;
57 struct bConstraintChannel;
58
59 typedef struct bDeformGroup {
60         struct bDeformGroup *next, *prev;
61         char name[32];
62         void *data;     /* Temporary data, most likely a pointer to the bone - no need to delete */
63 } bDeformGroup;
64
65 #
66 #
67 typedef struct BoundBox {
68         float vec[8][3];
69 } BoundBox;
70
71
72 typedef struct Object {
73         ID id;
74
75         short type, partype;
76         int par1, par2, par3;   /* kunnen vertexnrs zijn */
77         char parsubstr[32];     /* String describing subobject info */
78         void *pardata;
79         struct Object *parent, *track;
80         struct Ipo *ipo;
81         struct Path *path;
82         struct BoundBox *bb;
83         struct bAction *action; 
84         struct bPose *pose;     
85         void *data;
86         
87         struct bConstraintChannel *activecon;           
88         ListBase constraintChannels;
89
90         ListBase effect;
91         ListBase network;
92         ListBase disp;
93         ListBase defbase;
94         struct Material **mat;
95         
96         /* rot en drot moeten achterelkaar! (transform('r' en 's')) */
97         float loc[3], dloc[3], orig[3];
98         float size[3], dsize[3];
99         float rot[3], drot[3];
100         float quat[4], dquat[4];
101         float obmat[4][4];
102         float parentinv[4][4];
103         float imat[4][4];       /* voor bij render, tijdens simulate, tijdelijk: ipokeys van transform  */
104         
105         unsigned int lay;                               /* kopie van Base */
106         short flag;                     /* kopie van Base */
107         short colbits;          /* nul==van obdata */
108         char transflag, ipoflag;
109         char trackflag, upflag;
110         short ipowin, scaflag;  /* ipowin: blocktype laatste ipowindow */
111         short scavisflag, boundtype;
112         
113         short dupon, dupoff, dupsta, dupend;
114
115         float sf, ctime;
116         
117         /* tijdens realtime */
118
119         /* note that inertia is only called inertia for historical reasons
120          * and is not changed to avoid DNA surgery. It actually reflects the 
121          * Size value in the GameButtons (= radius) */
122
123         float mass, damping, inertia;
124         /* The form factor k is introduced to give the user more control
125          * and to fix incompatibility problems.
126      * For rotational symmetric objects, the inertia value can be
127          * expressed as: Theta = k * m * r^2
128          * where m = Mass, r = Radius
129          * For a Sphere, the form factor is by default = 0.4
130          */
131
132         float formfactor, dummy_1;      
133         float rdamping, sizefac;
134         
135         char dt, dtx;
136         char totcol;    /* kopie van mesh of curve of meta */
137         char actcol;
138         
139         ScriptLink scriptlink;
140         ListBase prop;
141         ListBase sensors;
142         ListBase controllers;
143         ListBase actuators;
144
145     void *sumohandle;
146     
147         float bbsize[3];
148         short dfras;
149         unsigned short actdef;  /* current deformation group */
150         float col[4];
151         /**
152          * Settings for game objects
153          * bit 0: Object has dynamic behaviour
154          * bit 2: Object is evaluated by the gameengine
155          * bit 6: Use Fh settings in Materials
156          * bit 7: Use face normal to rotate Object
157          * bit 8: Friction is anisotropic
158          * bit 9: Object is a ghost
159          * bit 10: Do rigid body dynamics.
160          */
161         int gameflag;
162         /**
163          * More settings
164          * bit 15: Always ignore activity culling 
165          */
166         int gameflag2;
167         int pad;
168         float anisotropicFriction[3];
169
170         ListBase constraints;
171         ListBase nlastrips;
172 } Object;
173
174 /* this work object is defined in object.c */
175 extern Object workob;
176
177
178 /* **************** OBJECT ********************* */
179
180 /* used many places... should be specialized */
181 #define SELECT                  1
182 #define ACTIVE                  2
183
184 /* type */
185 #define OB_EMPTY                0
186 #define OB_MESH                 1
187 #define OB_CURVE                2
188 #define OB_SURF                 3
189 #define OB_FONT                 4
190 #define OB_MBALL                5
191
192 #define OB_LAMP                 10
193 #define OB_CAMERA               11
194
195 #define OB_IKA                  20
196 #define OB_WAVE                 21
197 #define OB_LATTICE              22
198
199 /* 23 and 24 are for life and sector (old file compat.) */
200 #define OB_ARMATURE             25
201
202 /* partype: eerste 5 bits: type */
203 #define PARTYPE                 15
204 #define PAROBJECT               0
205 #define PARCURVE                1
206 #define PARKEY                  2
207 #define PARLIMB                 3
208 #define PARSKEL                 4
209 #define PARVERT1                5
210 #define PARVERT3                6
211 #define PARBONE                 7
212 #define PARSLOW                 16
213
214 /* char! transflag */
215 #define OB_OFFS_LOCAL   1
216 #define OB_QUAT                 2
217 #define OB_DUPLI                (8+16)
218 #define OB_DUPLIFRAMES  8
219 #define OB_DUPLIVERTS   16
220 #define OB_DUPLIROT             32
221 #define OB_DUPLINOSPEED 64
222
223 #define OB_POWERTRACK   128
224
225 /* char! ipoflag */
226 #define OB_DRAWKEY                      1
227 #define OB_DRAWKEYSEL           2
228 #define OB_OFFS_OB                      4
229 #define OB_OFFS_MAT                     8
230 #define OB_OFFS_VKEY            16
231 #define OB_OFFS_PATH            32
232 #define OB_OFFS_PARENT          64
233 #define OB_OFFS_PARTICLE        128
234
235
236 /* trackflag / upflag */
237 #define OB_POSX                 0
238 #define OB_POSY                 1
239 #define OB_POSZ                 2
240 #define OB_NEGX                 3
241 #define OB_NEGY                 4
242 #define OB_NEGZ                 5
243
244 /* gameflag in game.h */
245
246 /* dt: nummers */
247 #define OB_BOUNDBOX             1
248 #define OB_WIRE                 2
249 #define OB_SOLID                3
250 #define OB_SHADED               4
251 #define OB_TEXTURE              5
252
253 /* dtx: flags */
254 #define OB_AXIS                 2
255 #define OB_TEXSPACE             4
256 #define OB_DRAWNAME             8
257 #define OB_DRAWIMAGE    16
258
259 /* boundtype */
260 #define OB_BOUND_BOX            0
261 #define OB_BOUND_SPHERE         1
262 #define OB_BOUND_CYLINDER       2
263 #define OB_BOUND_CONE           3
264 #define OB_BOUND_POLYH          4
265
266 /* also needed for base!!!!! or rather, thy interfere....*/
267 /* base->flag en ob->flag */
268 #define BA_WASSEL                       2
269 #define BA_PARSEL                       4
270 #define BA_WHERE_UPDATE         8
271 #define BA_DISP_UPDATE          16
272 #define BA_DO_IPO                       32
273 #define BA_FROMSET                      128
274 #define OB_DO_IMAT                      256
275 #define OB_FROMDUPLI            512
276 #define OB_DONE                         1024
277 #define OB_RADIO                        2048
278 #define OB_FROMGROUP            4096
279
280 /* ob->gameflag */
281 #define OB_DYNAMIC              1
282 #define OB_CHILD                2
283 #define OB_ACTOR                4
284 #define OB_INERTIA_LOCK_X       8
285 #define OB_INERTIA_LOCK_Y       16
286 #define OB_INERTIA_LOCK_Z       32
287 #define OB_DO_FH                        64
288 #define OB_ROT_FH                       128
289 #define OB_ANISOTROPIC_FRICTION 256
290 #define OB_GHOST                        512
291 #define OB_RIGID_BODY           1024
292
293 #define OB_COLLISION_RESPONSE   4096
294 #define OB_SECTOR               8192
295 #define OB_PROP                 16384
296 #define OB_MAINACTOR    32768
297
298 /* ob->gameflag2 */
299 #define OB_NEVER_DO_ACTIVITY_CULLING    1
300
301 #define OB_LIFE                 (OB_PROP|OB_DYNAMIC|OB_ACTOR|OB_MAINACTOR|OB_CHILD)
302
303 /* ob->scavisflag */
304 #define OB_VIS_SENS             1
305 #define OB_VIS_CONT             2
306 #define OB_VIS_ACT              4
307
308 /* ob->scaflag */
309 #define OB_SHOWSENS             64
310 #define OB_SHOWACT              128
311 #define OB_ADDSENS              256
312 #define OB_ADDCONT              512
313 #define OB_ADDACT               1024
314 #define OB_SHOWCONT             2048
315
316 #ifdef __cplusplus
317 }
318 #endif
319
320 #endif
321