fixed spacing in the headers to get rid of some warnings and some other
[blender.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/BL DUAL 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. The Blender
15  * Foundation also sells licenses for use in proprietary software under
16  * the Blender License.  See http://www.blender.org/BL/ for information
17  * about this.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program; if not, write to the Free Software Foundation,
26  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
27  *
28  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
29  * All rights reserved.
30  *
31  * The Original Code is: all of this file.
32  *
33  * Contributor(s): none yet.
34  *
35  * ***** END GPL/BL DUAL LICENSE BLOCK *****
36  */
37
38 #ifndef BKE_ACTION_H
39 #define BKE_ACTION_H
40
41 #include "DNA_listBase.h"
42
43 /**
44  * The following structures are defined in DNA_action_types.h
45  */
46
47 struct bAction;
48 struct bActionChannel;
49 struct bPose;
50 struct bPoseChannel;
51 struct Object;
52
53 /* Kernel prototypes */
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57
58 /**
59  * Allocate a new pose channel on the heap and binary copy the 
60  * contents of the src pose channel.
61  */
62         struct bPoseChannel *
63 copy_pose_channel (
64         const struct bPoseChannel *src
65 );
66
67 /**
68  * Removes and deallocates all channels from a pose.
69  * Does not free the pose itself.
70  */
71         void    
72 clear_pose (
73         struct bPose *pose
74 );
75
76 /* Sets the value of a pose channel */
77         struct bPoseChannel *
78 set_pose_channel (
79         struct bPose *pose, 
80         struct bPoseChannel *chan
81 );
82
83 /**
84  * Allocate a new pose on the heap, and copy the src pose and it's channels
85  * into the new pose. *dst is set to the newly allocated structure.
86  */ 
87         void    
88 copy_pose(
89         struct bPose **dst, 
90         const struct bPose *src, 
91         int copyconstraints
92 );
93
94 /**
95  * Deallocate the action's channels including constraint channels.
96  * does not free the action structure.
97  */
98         void    
99 free_action(
100         struct bAction * id
101 );
102
103         void    
104 make_local_action(
105         struct bAction *act
106 );
107
108         void    
109 do_all_actions(
110         void
111 );
112
113 /**
114  * Return a pointer to the pose channel of the given name
115  * from this pose.
116  */
117  
118         struct  bPoseChannel *
119 get_pose_channel (
120         const struct bPose *pose,
121         const char *name
122 );
123
124 /** 
125  * Looks to see if the channel with the given name
126  * already exists in this pose - if not a new one is
127  * allocated and initialized.
128  */
129         void    
130 verify_pose_channel (
131         struct bPose* pose,
132         const char* name
133 );
134         
135 /**
136  * Allocate a new bAction on the heap and copy 
137  * the contents of src into it. If src is NULL NULL is returned.
138  */
139
140         struct  bAction* 
141 copy_action(
142         const struct bAction *src
143 );
144
145 /**
146  * Some kind of bounding box operation on the action.
147  */
148
149         float   
150 calc_action_start (
151         const struct bAction *act
152 );
153
154         float   
155 calc_action_end (
156         const struct bAction *act
157 );
158
159 /**
160  * Evaluate the pose from the given action.
161  * If the pose does not exist, a new one is created.
162  * Some deep calls into blender are made here.
163  */
164         void    
165 get_pose_from_action (
166         struct bPose **pose,
167         struct bAction *act,
168         float ctime
169 );
170
171 /**
172  * I think this duplicates the src into *pose.
173  * If the pose does not exist, a new one is created.
174  * If the pose does not contain channels from src
175  * new channels are created.
176  */ 
177         void    
178 get_pose_from_pose (
179         struct bPose **pose,
180         const struct bPose *src
181 );
182
183         void    
184 clear_pose_constraint_status (
185         struct Object *ob
186 );
187
188 /**
189  * Blends the common subset of channels from dst and src.
190  * and writes result to dst.
191  */
192         void    
193 blend_poses (
194         struct bPose *dst,
195         const struct bPose *src,
196         float srcweight,
197         short mode
198 );
199
200 /**
201  * Iterate through the action channels of the action
202  * and return the channel with the given name.
203  * Returns NULL if no channel.
204  */
205
206         struct bActionChannel *
207 get_named_actionchannel (
208         struct bAction *act,
209         const char *name
210 );
211
212 #ifdef __cplusplus
213 };
214 #endif
215
216 enum    {
217                         POSE_BLEND              = 0,
218                         POSE_ADD
219 };
220
221 enum    {
222                         POSE_KEY                =       0x10000000,
223                         POSE_LOC                =       0x00000001,
224                         POSE_ROT                =       0x00000002,
225                         POSE_SIZE               =       0x00000004,
226                         POSE_UNUSED1    =       0x00000008,
227                         POSE_UNUSED2    =       0x00000010,
228                         POSE_UNUSED3    =       0x00000020,
229                         POSE_UNUSED4    =       0x00000040,
230                         POSE_UNUSED5    =       0x00000080,
231                         POSE_OBMAT              =       0x00000100,
232                         POSE_PARMAT             =       0x00000200,
233                         PCHAN_DONE              =       0x00000400
234
235 };
236
237 #endif
238