Undo revision 23130 which was a merge with 2.5, a messy one because I did something...
[blender.git] / source / blender / blenkernel / BKE_action.h
1 /*  BKE_action.h   May 2001
2  *  
3  *  Blender kernel action and pose 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 /* The following structures are defined in DNA_action_types.h, and DNA_anim_types.h */
40 struct bAction;
41 struct bActionGroup;
42 struct FCurve;
43 struct bPose;
44 struct bPoseChannel;
45 struct Object;
46 struct Scene;
47 struct ID;
48
49 /* Kernel prototypes */
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53
54 /* Action API ----------------- */
55
56 /* Allocate a new bAction with the given name */
57 struct bAction *add_empty_action(const char name[]);
58
59 /* Allocate a copy of the given Action and all its data */      
60 struct bAction *copy_action(struct bAction *src);
61
62 /* Deallocate all of the Action's data, but not the Action itself */
63 void free_action(struct bAction *act);
64
65 // XXX is this needed?
66 void make_local_action(struct bAction *act);
67
68 /* Some kind of bounding box operation on the action */
69 void calc_action_range(const struct bAction *act, float *start, float *end, int incl_hidden);
70
71 /* Does action have any motion data at all? */
72 short action_has_motion(const struct bAction *act);
73
74 /* Action Groups API ----------------- */
75
76 /* Make the given Action Group the active one */
77 void set_active_action_group(struct bAction *act, struct bActionGroup *agrp, short select);
78
79 /* Add given channel into (active) group  */
80 void action_groups_add_channel(struct bAction *act, struct bActionGroup *agrp, struct FCurve *fcurve);
81
82 /* Remove the given channel from all groups */
83 void action_groups_remove_channel(struct bAction *act, struct FCurve *fcu);
84
85 /* Find a group with the given name */
86 struct bActionGroup *action_groups_find_named(struct bAction *act, const char name[]);
87
88
89 /* Pose API ----------------- */        
90         
91 /**
92  * Removes and deallocates all channels from a pose.
93  * Does not free the pose itself.
94  */
95 void free_pose_channels(struct bPose *pose);
96
97 /** 
98  * Removes and deallocates all data from a pose, and also frees the pose.
99  */
100 void free_pose(struct bPose *pose);
101
102 /**
103  * Allocate a new pose on the heap, and copy the src pose and it's channels
104  * into the new pose. *dst is set to the newly allocated structure, and assumed to be NULL.
105  */ 
106 void copy_pose(struct bPose **dst, struct bPose *src, int copyconstraints);
107
108
109
110 /**
111  * Return a pointer to the pose channel of the given name
112  * from this pose.
113  */
114 struct bPoseChannel *get_pose_channel(const struct bPose *pose, const char *name);
115
116 /**
117  * Return a pointer to the active pose channel from this Object.
118  * (Note: Object, not bPose is used here, as we need layer info from Armature)
119  */
120 struct bPoseChannel *get_active_posechannel(struct Object *ob);
121
122 /** 
123  * Looks to see if the channel with the given name
124  * already exists in this pose - if not a new one is
125  * allocated and initialized.
126  */
127 struct bPoseChannel *verify_pose_channel(struct bPose* pose, const char* name);
128
129
130
131 /* sets constraint flags */
132 void update_pose_constraint_flags(struct bPose *pose);
133
134 /* clears BONE_UNKEYED flags for frame changing */
135 // XXX to be depreceated for a more general solution in animsys...
136 void framechange_poses_clear_unkeyed(void);
137
138 /* Bone Groups API --------------------- */     
139
140 /* Adds a new bone-group */
141 void pose_add_group(struct Object *ob);
142
143 /* Remove the active bone-group */
144 void pose_remove_group(struct Object *ob);
145
146 /* Assorted Evaluation ----------------- */     
147
148 /* Used for the Action Constraint */
149 void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe);
150
151 /* for proxy */
152 void copy_pose_result(struct bPose *to, struct bPose *from);
153 /* clear all transforms */
154 void rest_pose(struct bPose *pose);
155
156 /* Game Engine ------------------------- */
157
158 /* exported for game engine */
159 void game_blend_poses(struct bPose *dst, struct bPose *src, float srcweight/*, short mode*/); /* was blend_poses */
160 void extract_pose_from_pose(struct bPose *pose, const struct bPose *src);
161
162 /* functions used by the game engine */
163 void game_copy_pose(struct bPose **dst, struct bPose *src);
164 void game_free_pose(struct bPose *pose);
165
166 #ifdef __cplusplus
167 };
168 #endif
169
170 #endif
171