Animato: Groundwork for getting Action Constraint functional again
[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  *                              Full recode, Joshua Leung, 2009
30  *
31  * ***** END GPL LICENSE BLOCK *****
32  */
33
34 #ifndef BKE_ACTION_H
35 #define BKE_ACTION_H
36
37 #include "DNA_listBase.h"
38
39 /**
40  * The following structures are defined in DNA_action_types.h, and DNA_anim_types.h
41  */
42
43 struct bAction;
44 struct bPose;
45 struct bPoseChannel;
46 struct Object;
47 struct Scene;
48 struct ID;
49
50 /* Kernel prototypes */
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54
55 struct bAction *add_empty_action(const char name[]);
56         
57         /**
58  * Allocate a new bAction on the heap and copy 
59  * the contents of src into it. If src is NULL NULL is returned.
60  */
61
62 struct bAction *copy_action(struct bAction *src);
63
64 /**
65  * Deallocate the action's channels including constraint channels.
66  * does not free the action structure.
67  */
68 void free_action(struct bAction *act);
69
70 // XXX is this needed?
71 void make_local_action(struct bAction *act);
72         
73 /**
74  * Some kind of bounding box operation on the action.
75  */
76 void calc_action_range(const struct bAction *act, float *start, float *end, int incl_hidden);
77         
78 /**
79  * Removes and deallocates all channels from a pose.
80  * Does not free the pose itself.
81  */
82 void free_pose_channels(struct bPose *pose);
83
84 /** 
85  * Removes and deallocates all data from a pose, and also frees the pose.
86  */
87 void free_pose(struct bPose *pose);
88
89 /**
90  * Allocate a new pose on the heap, and copy the src pose and it's channels
91  * into the new pose. *dst is set to the newly allocated structure, and assumed to be NULL.
92  */ 
93 void copy_pose(struct bPose **dst, struct bPose *src,
94                            int copyconstraints);
95
96
97
98 /**
99  * Return a pointer to the pose channel of the given name
100  * from this pose.
101  */
102 struct  bPoseChannel *get_pose_channel(const struct bPose *pose,
103                                                                            const char *name);
104                                                                            
105 /**
106  * Return a pointer to the active pose channel from this Object.
107  * (Note: Object, not bPose is used here, as we need layer info from Armature)
108  */
109 struct bPoseChannel *get_active_posechannel(struct Object *ob);
110
111 /** 
112  * Looks to see if the channel with the given name
113  * already exists in this pose - if not a new one is
114  * allocated and initialized.
115  */
116 struct bPoseChannel *verify_pose_channel(struct bPose* pose, 
117                                                                                  const char* name);
118
119 /* sets constraint flags */
120 void update_pose_constraint_flags(struct bPose *pose);
121
122 /* clears BONE_UNKEYED flags for frame changing */
123 // XXX to be depreceated for a more general solution in animsys...
124 void framechange_poses_clear_unkeyed(void);
125
126 /* Used for the Action Constraint */
127 void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, float cframe);
128
129 /* exported for game engine */
130 void blend_poses(struct bPose *dst, struct bPose *src, float srcweight, short mode);
131 void extract_pose_from_pose(struct bPose *pose, const struct bPose *src);
132
133 /* for proxy */
134 void copy_pose_result(struct bPose *to, struct bPose *from);
135 /* clear all transforms */
136 void rest_pose(struct bPose *pose);
137
138 /* map global time (frame nr) to strip converted time, doesn't clip */
139 float get_action_frame(struct Object *ob, float cframe);
140 /* map strip time to global time (frame nr)  */
141 float get_action_frame_inv(struct Object *ob, float cframe);
142
143
144 /* functions used by the game engine */
145 void game_copy_pose(struct bPose **dst, struct bPose *src);
146 void game_free_pose(struct bPose *pose);
147
148 #ifdef __cplusplus
149 };
150 #endif
151
152 #endif
153