2.5 - Action Editor / Animation Stuff:
[blender-staging.git] / source / blender / blenkernel / BKE_action.h
1 /*  BKE_action.h   May 2001
2  *  
3  *  Blender kernel action functionality
4  *
5  *      Reevan McKay
6  *
7  * $Id$
8  *
9  * ***** BEGIN GPL LICENSE BLOCK *****
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * Contributor(s): Full recode, Ton Roosendaal, Crete 2005
29  *
30  * ***** END GPL LICENSE BLOCK *****
31  */
32
33 #ifndef BKE_ACTION_H
34 #define BKE_ACTION_H
35
36 #include "DNA_listBase.h"
37
38 /**
39  * The following structures are defined in DNA_action_types.h
40  */
41
42 struct bAction;
43 struct bActionChannel;
44 struct bPose;
45 struct bPoseChannel;
46 struct Object;
47 struct ID;
48
49 /* Kernel prototypes */
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53
54 struct bAction *add_empty_action(const char name[]);
55         
56 /**
57  * Removes and deallocates all channels from a pose.
58  * Does not free the pose itself.
59  */
60 void free_pose_channels(struct bPose *pose);
61
62 /** 
63  * Removes and deallocates all data from a pose, and also frees the pose.
64  */
65 void free_pose(struct bPose *pose);
66
67 /**
68  * Allocate a new pose on the heap, and copy the src pose and it's channels
69  * into the new pose. *dst is set to the newly allocated structure, and assumed to be NULL.
70  */ 
71 void copy_pose(struct bPose **dst, struct bPose *src,
72                            int copyconstraints);
73
74 /**
75  * Deallocate the action's channels including constraint channels.
76  * does not free the action structure.
77  */
78 void free_action(struct bAction * id);
79
80 void make_local_action(struct bAction *act);
81
82 /* only for armatures, doing pose actions only too */
83 void do_all_pose_actions(struct Object *);
84 /* only for objects, doing only 1 channel */
85 void do_all_object_actions(struct Object *);
86 /* only for Mesh, Curve, Surface, Lattice, doing only Shape channel */
87 void do_all_shape_actions(struct Object *);
88
89
90 /**
91  * Return a pointer to the pose channel of the given name
92  * from this pose.
93  */
94 struct  bPoseChannel *get_pose_channel(const struct bPose *pose,
95                                                                            const char *name);
96                                                                            
97 /**
98  * Return a pointer to the active pose channel from this Object.
99  * (Note: Object, not bPose is used here, as we need layer info from Armature)
100  */
101 struct bPoseChannel *get_active_posechannel(struct Object *ob);
102
103 /** 
104  * Looks to see if the channel with the given name
105  * already exists in this pose - if not a new one is
106  * allocated and initialized.
107  */
108 struct bPoseChannel *verify_pose_channel(struct bPose* pose, 
109                                                                                  const char* name);
110
111 /* sets constraint flags */
112 void update_pose_constraint_flags(struct bPose *pose);
113
114 /* clears BONE_UNKEYED flags for frame changing */
115 void framechange_poses_clear_unkeyed(void);
116
117 /**
118  * Allocate a new bAction on the heap and copy 
119  * the contents of src into it. If src is NULL NULL is returned.
120  */
121
122 struct bAction *copy_action(struct bAction *src);
123
124 /**
125  * Some kind of bounding box operation on the action.
126  */
127 void calc_action_range(const struct bAction *act, float *start, float *end, int incl_hidden);
128
129 /**
130  * Set the pose channels from the given action.
131  */
132 void extract_pose_from_action(struct bPose *pose, struct bAction *act, float ctime);
133
134 /**
135  * Get the effects of the given action using a workob 
136  */
137 void what_does_obaction(struct Object *ob, struct Object *workob, struct bAction *act, float cframe);
138
139 /**
140  * Iterate through the action channels of the action
141  * and return the channel with the given name.
142  * Returns NULL if no channel.
143  */
144 struct bActionChannel *get_action_channel(struct bAction *act,  const char *name);
145 /**
146  * Iterate through the action channels of the action
147  * and return the channel with the given name.
148  * Returns and adds new channel if no channel.
149  */
150 struct bActionChannel *verify_action_channel(struct bAction *act, const char *name);
151
152   /* baking */
153 struct bAction *bake_obIPO_to_action(struct Object *ob);
154
155 /* exported for game engine */
156 void blend_poses(struct bPose *dst, struct bPose *src, float srcweight, short mode);
157 void extract_pose_from_pose(struct bPose *pose, const struct bPose *src);
158
159 /* for proxy */
160 void copy_pose_result(struct bPose *to, struct bPose *from);
161 /* clear all transforms */
162 void rest_pose(struct bPose *pose);
163
164 /* map global time (frame nr) to strip converted time, doesn't clip */
165 float get_action_frame(struct Object *ob, float cframe);
166 /* map strip time to global time (frame nr)  */
167 float get_action_frame_inv(struct Object *ob, float cframe);
168 /* builds a list of NlaIpoChannel with ipo values to write in datablock */
169 void extract_ipochannels_from_action(ListBase *lb, struct ID *id, struct bAction *act, const char *name, float ctime);
170 /* write values returned by extract_ipochannels_from_action, returns the number of value written */
171 int execute_ipochannels(ListBase *lb);
172
173 /* functions used by the game engine */
174 void game_copy_pose(struct bPose **dst, struct bPose *src);
175 void game_free_pose(struct bPose *pose);
176
177 #ifdef __cplusplus
178 };
179 #endif
180
181 #endif
182