5be6dd727c04ec1abbe24f523d9a74f6688e2176
[blender.git] / source / blender / makesdna / DNA_ipo_types.h
1 /**
2  * blenlib/DNA_ipo_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): Joshua Leung
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31 #ifndef DNA_IPO_TYPES_H
32 #define DNA_IPO_TYPES_H
33
34 #include "DNA_listBase.h"
35 #include "DNA_curve_types.h"
36 #include "DNA_vec_types.h"
37
38 #include "DNA_ID.h"
39
40 /* -------------------------- Type Defines --------------------------- */
41
42 /* sometimes used - mainly for GE/Ketsji */
43 typedef short IPO_Channel;  
44
45
46 /* --- IPO Curve Driver --- */
47
48 /* IPO Curve Driver */
49 typedef struct IpoDriver {
50         struct Object *ob;                      /* target/driver ob */
51         short blocktype, adrcode;       /* sub-channel to use */
52         
53         short type, flag;                       /* driver settings */
54         char name[128];                         /* bone, or python expression here */
55 } IpoDriver;
56
57 /* --- IPO Curve --- */
58
59 /* IPO Curve */
60 typedef struct IpoCurve {
61         struct IpoCurve *next,  *prev;
62         
63         struct BPoint *bp;                                      /* array of BPoints (sizeof(BPoint)*totvert) - i.e. baked/imported data */
64         struct BezTriple *bezt;                         /* array of BezTriples (sizeof(BezTriple)*totvert)  - i.e. user-editable keyframes  */
65
66         rctf maxrct, totrct;                            /* bounding boxes */
67
68         short blocktype, adrcode, vartype;      /* blocktype= ipo-blocktype; adrcode= type of ipo-curve; vartype= 'format' of data */
69         short totvert;                                          /* total number of BezTriples (i.e. keyframes) on curve */
70         short ipo, extrap;                                      /* interpolation and extrapolation modes  */
71         short flag, rt;                                         /* flag= settings; rt= ??? */
72         float ymin, ymax;                                       /* minimum/maximum y-extents for curve */
73         unsigned int bitmask;                           /* ??? */
74         
75         float slide_min, slide_max;                     /* minimum/maximum values for sliders (in action editor) */
76         float curval;                                           /* value of ipo-curve for current frame */
77         
78         IpoDriver *driver;                                      /* pointer to ipo-driver for this curve */
79 } IpoCurve;
80
81 /* --- ID-Datablock --- */
82
83 /* IPO Data-Block */
84 typedef struct Ipo {
85         ID id;
86         
87         ListBase curve;                         /* A list of IpoCurve structs in a linked list. */
88         rctf cur;                                       /* Rect defining extents of keyframes? */
89         
90         short blocktype, showkey;       /* blocktype: self-explanatory; showkey: either 0 or 1 (show vertical yellow lines for editing) */
91         short muteipo, pad;                     /* muteipo: either 0 or 1 (whether ipo block is muted) */       
92 } Ipo;
93
94 /* ----------- adrcodes (for matching ipo-curves to data) ------------- */
95
96 /* defines: are these duped or new? */
97 #define IPOBUTY 17
98
99 #define TOB_IPO 1
100 #define TOB_IPODROT     2
101
102 /* disptype */
103 #define IPO_DISPDEGR    1
104 #define IPO_DISPBITS    2
105 #define IPO_DISPTIME    3
106
107 /* ********** Object (ID_OB) ********** */
108
109 #define OB_TOTIPO       30
110 #define OB_TOTNAM       30
111
112 #define OB_LOC_X        1
113 #define OB_LOC_Y        2
114 #define OB_LOC_Z        3
115 #define OB_DLOC_X       4
116 #define OB_DLOC_Y       5
117 #define OB_DLOC_Z       6
118
119 #define OB_ROT_X        7
120 #define OB_ROT_Y        8
121 #define OB_ROT_Z        9
122 #define OB_DROT_X       10
123 #define OB_DROT_Y       11
124 #define OB_DROT_Z       12
125
126 #define OB_SIZE_X       13
127 #define OB_SIZE_Y       14
128 #define OB_SIZE_Z       15
129 #define OB_DSIZE_X      16
130 #define OB_DSIZE_Y      17
131 #define OB_DSIZE_Z      18
132
133 #define OB_LAY          19
134
135 #define OB_TIME         20
136
137 #define OB_COL_R        21
138 #define OB_COL_G        22
139 #define OB_COL_B        23
140 #define OB_COL_A        24
141
142 #define OB_PD_FSTR      25
143 #define OB_PD_FFALL     26
144 #define OB_PD_SDAMP     27
145 #define OB_PD_RDAMP     28
146 #define OB_PD_PERM      29
147 #define OB_PD_FMAXD     30
148
149 /* exception: driver channel, for bone driver only */
150 #define OB_ROT_DIFF     100
151
152
153 /* ********** Material (ID_MA) ********** */
154
155 #define MA_TOTIPO       40
156 #define MA_TOTNAM       26
157
158 #define MA_COL_R        1
159 #define MA_COL_G        2
160 #define MA_COL_B        3
161 #define MA_SPEC_R       4
162 #define MA_SPEC_G       5
163 #define MA_SPEC_B       6
164 #define MA_MIR_R        7
165 #define MA_MIR_G        8
166 #define MA_MIR_B        9
167 #define MA_REF          10
168 #define MA_ALPHA        11
169 #define MA_EMIT         12
170 #define MA_AMB          13
171 #define MA_SPEC         14
172 #define MA_HARD         15
173 #define MA_SPTR         16
174 #define MA_IOR          17
175 #define MA_MODE         18
176 #define MA_HASIZE       19
177 #define MA_TRANSLU      20
178 #define MA_RAYM         21
179 #define MA_FRESMIR      22
180 #define MA_FRESMIRI     23
181 #define MA_FRESTRA      24
182 #define MA_FRESTRAI     25
183 #define MA_ADD          26
184
185 #define MA_MAP1         (1<<5)
186 #define MA_MAP2         (1<<6)
187 #define MA_MAP3         (1<<7)
188 #define MA_MAP4         (1<<8)
189 #define MA_MAP5         (1<<9)
190 #define MA_MAP6         (1<<10)
191 #define MA_MAP7         (1<<11)
192 #define MA_MAP8         (1<<12)
193 #define MA_MAP9         (1<<13)
194 #define MA_MAP10        (1<<14)
195 #define MA_MAP11        (1<<15)
196 #define MA_MAP12        (1<<16)
197 #define MA_MAP13        (1<<17)
198 #define MA_MAP14        (1<<18)
199 #define MA_MAP15        (1<<19)
200 #define MA_MAP16        (1<<20)
201 #define MA_MAP17        (1<<21)
202 #define MA_MAP18        (1<<22)
203
204 #define TEX_TOTNAM      14
205
206 #define MAP_OFS_X       1
207 #define MAP_OFS_Y       2
208 #define MAP_OFS_Z       3
209 #define MAP_SIZE_X      4
210 #define MAP_SIZE_Y      5
211 #define MAP_SIZE_Z      6
212 #define MAP_R           7
213 #define MAP_G           8
214 #define MAP_B           9
215
216 #define MAP_DVAR        10
217 #define MAP_COLF        11
218 #define MAP_NORF        12
219 #define MAP_VARF        13
220 #define MAP_DISP        14
221
222 /* ********** Texture (ID_TE) ********** */
223
224 #define TE_TOTIPO       26
225 #define TE_TOTNAM       26
226
227 #define TE_NSIZE        1
228 #define TE_NDEPTH       2
229 #define TE_NTYPE        3
230 #define TE_TURB         4
231
232 #define TE_VNW1         5
233 #define TE_VNW2         6
234 #define TE_VNW3         7
235 #define TE_VNW4         8
236 #define TE_VNMEXP       9
237 #define TE_VN_DISTM     10
238 #define TE_VN_COLT      11
239
240 #define TE_ISCA         12
241 #define TE_DISTA        13
242
243 #define TE_MG_TYP       14
244 #define TE_MGH          15
245 #define TE_MG_LAC       16
246 #define TE_MG_OCT       17
247 #define TE_MG_OFF       18
248 #define TE_MG_GAIN      19
249
250 #define TE_N_BAS1       20
251 #define TE_N_BAS2       21
252
253 #define TE_COL_R    22
254 #define TE_COL_G    23
255 #define TE_COL_B    24
256 #define TE_BRIGHT       25
257 #define TE_CONTRA       26
258
259 /* ******** Sequence (ID_SEQ) ********** */
260
261 #define SEQ_TOTIPO      1
262 #define SEQ_TOTNAM      1
263
264 #define SEQ_FAC1        1
265
266 /* ********* Curve (ID_CU) *********** */
267
268 #define CU_TOTIPO       1
269 #define CU_TOTNAM       1
270
271 #define CU_SPEED        1
272
273 /* ********* ShapeKey (ID_KE) *********** */
274
275 #define KEY_TOTIPO      64
276 #define KEY_TOTNAM      64
277
278 #define KEY_SPEED       0
279 #define KEY_NR          1
280
281 /* ********* World (ID_WO) *********** */
282
283 #define WO_TOTIPO       29
284 #define WO_TOTNAM       16
285
286 #define WO_HOR_R        1
287 #define WO_HOR_G        2
288 #define WO_HOR_B        3
289 #define WO_ZEN_R        4
290 #define WO_ZEN_G        5
291 #define WO_ZEN_B        6
292
293 #define WO_EXPOS        7
294
295 #define WO_MISI         8
296 #define WO_MISTDI       9
297 #define WO_MISTSTA      10
298 #define WO_MISTHI       11
299
300 #define WO_STAR_R       12
301 #define WO_STAR_G       13
302 #define WO_STAR_B       14
303 #define WO_STARDIST     15
304 #define WO_STARSIZE     16
305
306 /* ********** Lamp (ID_LA) ********** */
307
308 #define LA_TOTIPO       21
309 #define LA_TOTNAM       10
310
311 #define LA_ENERGY       1
312 #define LA_COL_R        2
313 #define LA_COL_G        3
314 #define LA_COL_B        4
315 #define LA_DIST         5
316 #define LA_SPOTSI       6
317 #define LA_SPOTBL       7
318 #define LA_QUAD1        8
319 #define LA_QUAD2        9
320 #define LA_HALOINT      10
321
322 /* ********* Camera (ID_CA) ************ */
323
324 #define CAM_TOTIPO      7
325 #define CAM_TOTNAM      7
326
327 #define CAM_LENS        1
328 #define CAM_STA         2
329 #define CAM_END         3
330
331 /* yafray aperture & focal distance curves */
332 #define CAM_YF_APERT    4
333 #define CAM_YF_FDIST    5
334
335 #define CAM_SHIFT_X             6
336 #define CAM_SHIFT_Y             7
337
338 /* ********* Sound (ID_SO) *********** */
339
340 #define SND_TOTIPO      4
341 #define SND_TOTNAM      4
342
343 #define SND_VOLUME      1
344 #define SND_PITCH       2
345 #define SND_PANNING     3
346 #define SND_ATTEN       4
347
348 /* ******* PoseChannel (ID_PO) ********* */
349
350 #define AC_TOTIPO       10
351 #define AC_TOTNAM       10
352
353 #define AC_LOC_X        1
354 #define AC_LOC_Y        2
355 #define AC_LOC_Z        3
356
357 #define AC_SIZE_X       13
358 #define AC_SIZE_Y       14
359 #define AC_SIZE_Z       15
360
361 #define AC_QUAT_W       25
362 #define AC_QUAT_X       26
363 #define AC_QUAT_Y       27
364 #define AC_QUAT_Z       28
365
366 /* ******** Constraint (ID_CO) ********** */
367
368 #define CO_TOTIPO       2
369 #define CO_TOTNAM       2
370
371 #define CO_ENFORCE      1
372 #define CO_HEADTAIL     2
373
374 /* ****** FluidSim (ID_FLUIDSIM) ****** */
375
376 #define FLUIDSIM_TOTIPO 13
377 #define FLUIDSIM_TOTNAM 13
378
379 #define FLUIDSIM_VISC   1
380 #define FLUIDSIM_TIME   2
381
382 #define FLUIDSIM_GRAV_X 3
383 #define FLUIDSIM_GRAV_Y 4
384 #define FLUIDSIM_GRAV_Z 5
385
386 #define FLUIDSIM_VEL_X  6
387 #define FLUIDSIM_VEL_Y  7
388 #define FLUIDSIM_VEL_Z  8
389
390 #define FLUIDSIM_ACTIVE 9
391
392 #define FLUIDSIM_ATTR_FORCE_STR         10
393 #define FLUIDSIM_ATTR_FORCE_RADIUS      11
394 #define FLUIDSIM_VEL_FORCE_STR          12
395 #define FLUIDSIM_VEL_FORCE_RADIUS       13
396
397 /* ******************** */
398 /* particle ipos */
399
400 /* ******* Particle (ID_PA) ******** */
401 #define PART_TOTIPO             25
402 #define PART_TOTNAM             25
403
404 #define PART_EMIT_FREQ  1
405 #define PART_EMIT_LIFE  2
406 #define PART_EMIT_VEL   3
407 #define PART_EMIT_AVE   4
408 #define PART_EMIT_SIZE  5
409
410 #define PART_AVE                6
411 #define PART_SIZE               7
412 #define PART_DRAG               8
413 #define PART_BROWN              9
414 #define PART_DAMP               10
415 #define PART_LENGTH             11
416 #define PART_CLUMP              12
417
418 #define PART_GRAV_X             13
419 #define PART_GRAV_Y             14
420 #define PART_GRAV_Z             15
421
422 #define PART_KINK_AMP   16
423 #define PART_KINK_FREQ  17
424 #define PART_KINK_SHAPE 18
425
426 #define PART_BB_TILT    19
427
428 #define PART_PD_FSTR    20
429 #define PART_PD_FFALL   21
430 #define PART_PD_FMAXD   22
431
432 #define PART_PD2_FSTR   23
433 #define PART_PD2_FFALL  24
434 #define PART_PD2_FMAXD  25
435
436
437 /* -------------------- Defines: Flags and Types ------------------ */
438
439 /* ----- IPO Curve Defines ------- */
440
441 /* icu->vartype */
442 #define IPO_CHAR                0
443 #define IPO_SHORT               1
444 #define IPO_INT                 2
445 #define IPO_LONG                3
446 #define IPO_FLOAT               4
447 #define IPO_DOUBLE              5
448 #define IPO_FLOAT_DEGR  6
449
450         /* very special case, in keys */
451 #define IPO_BEZTRIPLE   100
452 #define IPO_BPOINT              101
453
454 /* icu->vartype */
455 #define IPO_BITS                16
456 #define IPO_CHAR_BIT    16
457 #define IPO_SHORT_BIT   17
458 #define IPO_INT_BIT             18
459
460 /* icu->ipo:  the type of curve */
461 #define IPO_CONST               0
462 #define IPO_LIN                 1
463 #define IPO_BEZ                 2
464         /* not used yet */
465 #define IPO_MIXED               3 
466
467 /* icu->extrap */
468 #define IPO_HORIZ               0
469 #define IPO_DIR                 1
470 #define IPO_CYCL                2
471 #define IPO_CYCLX               3
472
473 /* icu->flag */
474 #define IPO_VISIBLE             1
475 #define IPO_SELECT              2
476 #define IPO_EDIT                4
477 #define IPO_LOCK                8
478 #define IPO_AUTO_HORIZ  16
479 #define IPO_ACTIVE              32
480 #define IPO_PROTECT             64
481 #define IPO_MUTE                128
482
483 /* ---------- IPO Drivers ----------- */
484
485 /* offset in driver->name for finding second posechannel for rot-diff  */
486 #define DRIVER_NAME_OFFS        32 
487
488 /* driver->type */
489 #define IPO_DRIVER_TYPE_NORMAL          0
490 #define IPO_DRIVER_TYPE_PYTHON          1
491
492 /* driver->flag */
493         /* invalid flag: currently only used for buggy pydriver expressions */
494 #define IPO_DRIVER_FLAG_INVALID         (1<<0)
495
496 #endif
497
498
499