Animato/2.5 - Graph Editor (i.e. the new 'IPO Editor')
[blender.git] / source / blender / blenkernel / BKE_fcurve.h
1 /* Testing code for new animation system in 2.5 
2  * Copyright 2009, Joshua Leung
3  */
4
5 #ifndef BKE_FCURVE_H
6 #define BKE_FCURVE_H
7
8 //struct ListBase;
9 struct FCurve;
10 struct FModifier;
11 struct ChannelDriver;
12 struct BezTriple;
13
14 /* ************** Keyframe Tools ***************** */
15
16 // XXX this stuff is defined in BKE_ipo.h too, so maybe skip for now?
17 typedef struct CfraElem {
18         struct CfraElem *next, *prev;
19         float cfra;
20         int sel;
21 } CfraElem;
22
23 void bezt_add_to_cfra_elem(ListBase *lb, struct BezTriple *bezt);
24
25 /* ************** F-Curve Drivers ***************** */
26
27 void fcurve_free_driver(struct FCurve *fcu);
28
29 /* ************** F-Curve Modifiers *************** */
30
31 /* F-Curve Modifier Type-Info (fmi):
32  *  This struct provides function pointers for runtime, so that functions can be
33  *  written more generally (with fewer/no special exceptions for various modifiers).
34  *
35  *  Callers of these functions must check that they actually point to something useful,
36  *  as some constraints don't define some of these.
37  *
38  *  Warning: it is not too advisable to reorder order of members of this struct,
39  *                      as you'll have to edit quite a few ($FMODIFIER_NUM_TYPES) of these
40  *                      structs.
41  */
42 typedef struct FModifierTypeInfo {
43         /* admin/ident */
44         short type;                             /* FMODIFIER_TYPE_### */
45         short size;                             /* size in bytes of the struct */
46         char name[32];                  /* name of modifier in interface */
47         char structName[32];    /* name of struct for SDNA */
48         
49         /* data management function pointers - special handling */
50                 /* free any data that is allocated separately (optional) */
51         void (*free_data)(struct FModifier *fcm);
52                 /* copy any special data that is allocated separately (optional) */
53         void (*copy_data)(struct FModifier *fcm, struct FModifier *src);
54                 /* set settings for data that will be used for FCuModifier.data (memory already allocated using MEM_callocN) */
55         void (*new_data)(void *mdata);
56         
57         /* evaluation */
58                 /* evaluate the modifier for the given time and 'accumulated' value */
59         void (*evaluate_modifier)(struct FCurve *fcu, struct FModifier *fcm, float *cvalue, float evaltime);
60 } FModifierTypeInfo;
61
62 /* Function Prototypes for FModifierTypeInfo's */
63 FModifierTypeInfo *fmodifier_get_typeinfo(struct FModifier *fcm);
64 FModifierTypeInfo *get_fmodifier_typeinfo(int type);
65
66 /* ---------------------- */
67
68 // TODO... general API here..
69 struct FModifier *fcurve_add_modifier(struct FCurve *fcu, int type);
70 void fcurve_copy_modifiers(ListBase *dst, ListBase *src);
71 void fcurve_remove_modifier(struct FCurve *fcu, struct FModifier *fcm);
72 void fcurve_free_modifiers(struct FCurve *fcu);
73 void fcurve_bake_modifiers(struct FCurve *fcu, int start, int end);
74
75 /* ************** F-Curves API ******************** */
76
77 /* -------- Data Managemnt  --------  */
78
79 void free_fcurve(struct FCurve *fcu);
80 struct FCurve *copy_fcurve(struct FCurve *fcu);
81
82 void free_fcurves(ListBase *list);
83 void copy_fcurves(ListBase *dst, ListBase *src);
84
85 /* find matching F-Curve in the given list of F-Curves */
86 struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index);
87
88 /* get the time extents for F-Curve */
89 void calc_fcurve_range(struct FCurve *fcu, float *min, float *max);
90
91 /* -------- Curve Sanity --------  */
92
93 void calchandles_fcurve(struct FCurve *fcu);
94 void testhandles_fcurve(struct FCurve *fcu);
95 void sort_time_fcurve(struct FCurve *fcu);
96 short test_time_fcurve(struct FCurve *fcu);
97
98 void correct_bezpart(float *v1, float *v2, float *v3, float *v4);
99
100 /* -------- Evaluation --------  */
101
102 /* evaluate fcurve */
103 float evaluate_fcurve(struct FCurve *fcu, float evaltime);
104 /* evaluate fcurve and store value */
105 void calculate_fcurve(struct FCurve *fcu, float ctime);
106
107
108 #endif /* BKE_FCURVE_H*/