Armature drawing: custom shape scale options
[blender-staging.git] / source / blender / blenkernel / BKE_action.h
index 67efb7752ea835e8a03f6ed450225d313123c39c..3fceef5d95dd5f86264c7fbb7ac237c0f8b72439 100644 (file)
@@ -24,8 +24,8 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef BKE_ACTION_H
-#define BKE_ACTION_H
+#ifndef __BKE_ACTION_H__
+#define __BKE_ACTION_H__
 /** \file BKE_action.h
  *  \ingroup bke
  *  \brief Blender kernel action and pose functionality.
@@ -44,9 +44,8 @@ struct FCurve;
 struct bPose;
 struct bItasc;
 struct bPoseChannel;
+struct Main;
 struct Object;
-struct Scene;
-struct ID;
 
 /* Kernel prototypes */
 #ifdef __cplusplus
@@ -56,39 +55,39 @@ extern "C" {
 /* Action Lib Stuff ----------------- */
 
 /* Allocate a new bAction with the given name */
-struct bAction *add_empty_action(const char name[]);
+struct bAction *add_empty_action(struct Main *bmain, const char name[]);
 
 /* Allocate a copy of the given Action and all its data */     
-struct bAction *copy_action(struct bAction *src);
+struct bAction *BKE_action_copy(struct bAction *src);
 
 /* Deallocate all of the Action's data, but not the Action itself */
-void free_action(struct bAction *act);
+void BKE_action_free(struct bAction *act);
 
 // XXX is this needed?
-void make_local_action(struct bAction *act);
+void BKE_action_make_local(struct bAction *act);
 
 
 /* Action API ----------------- */
 
 /* types of transforms applied to the given item 
- *     - these are the return falgs for action_get_item_transforms()
+ *  - these are the return falgs for action_get_item_transforms()
  */
 typedef enum eAction_TransformFlags {
-               /* location */
-       ACT_TRANS_LOC   = (1<<0),
-               /* rotation */
-       ACT_TRANS_ROT   = (1<<1),
-               /* scaling */
-       ACT_TRANS_SCALE = (1<<2),
-       
-               /* strictly not a transform, but custom properties are also
-                * quite often used in modern rigs
-                */
-       ACT_TRANS_PROP  = (1<<3),
-               
-               /* all flags */
-       ACT_TRANS_ONLY  = (ACT_TRANS_LOC|ACT_TRANS_ROT|ACT_TRANS_SCALE),
-       ACT_TRANS_ALL   = (ACT_TRANS_ONLY|ACT_TRANS_PROP)
+       /* location */
+       ACT_TRANS_LOC   = (1 << 0),
+       /* rotation */
+       ACT_TRANS_ROT   = (1 << 1),
+       /* scaling */
+       ACT_TRANS_SCALE = (1 << 2),
+
+       /* strictly not a transform, but custom properties are also
+        * quite often used in modern rigs
+        */
+       ACT_TRANS_PROP  = (1 << 3),
+
+       /* all flags */
+       ACT_TRANS_ONLY  = (ACT_TRANS_LOC | ACT_TRANS_ROT | ACT_TRANS_SCALE),
+       ACT_TRANS_ALL   = (ACT_TRANS_ONLY | ACT_TRANS_PROP)
 } eAction_TransformFlags;
 
 /* Return flags indicating which transforms the given object/posechannel has 
@@ -102,7 +101,7 @@ short action_get_item_transforms(struct bAction *act, struct Object *ob, struct
 void calc_action_range(const struct bAction *act, float *start, float *end, short incl_modifiers);
 
 /* Does action have any motion data at all? */
-short action_has_motion(const struct bAction *act);
+bool action_has_motion(const struct bAction *act);
 
 /* Action Groups API ----------------- */
 
@@ -112,6 +111,9 @@ struct bActionGroup *get_active_actiongroup(struct bAction *act);
 /* Make the given Action Group the active one */
 void set_active_action_group(struct bAction *act, struct bActionGroup *agrp, short select);
 
+/* Sync colors used for action/bone group with theme settings */
+void action_group_colors_sync(struct bActionGroup *grp, const struct bActionGroup *ref_grp);
+
 /* Add a new action group with the given name to the action */
 struct bActionGroup *action_groups_add_new(struct bAction *act, const char name[]);
 
@@ -122,94 +124,73 @@ void action_groups_add_channel(struct bAction *act, struct bActionGroup *agrp, s
 void action_groups_remove_channel(struct bAction *act, struct FCurve *fcu);
 
 /* Find a group with the given name */
-struct bActionGroup *action_groups_find_named(struct bAction *act, const char name[]);
+struct bActionGroup *BKE_action_group_find_name(struct bAction *act, const char name[]);
 
 /* Clear all 'temp' flags on all groups */
 void action_groups_clear_tempflags(struct bAction *act);
 
 /* Pose API ----------------- */       
-       
-/**
- * Deallocates a pose channel.
- * Does not free the pose channel itself.
- */
-void free_pose_channel(struct bPoseChannel *pchan);
-
-/**
- * Removes and deallocates all channels from a pose.
- * Does not free the pose itself.
- */
-void free_pose_channels(struct bPose *pose);
 
-/**
- * Removes the hash for quick lookup of channels, must
- * be done when adding/removing channels.
- */
-void make_pose_channels_hash(struct bPose *pose);
-void free_pose_channels_hash(struct bPose *pose);
+void                 BKE_pose_channel_free(struct bPoseChannel *pchan);
+void                 BKE_pose_channel_free_ex(struct bPoseChannel *pchan, bool do_id_user);
 
-/** 
- * Removes and deallocates all data from a pose, and also frees the pose.
- */
-void free_pose(struct bPose *pose);
+void                 BKE_pose_channels_free(struct bPose *pose);
+void                 BKE_pose_channels_free_ex(struct bPose *pose, bool do_id_user);
 
-/**
- * Allocate a new pose on the heap, and copy the src pose and it's channels
- * into the new pose. *dst is set to the newly allocated structure, and assumed to be NULL.
- */ 
-void copy_pose(struct bPose **dst, struct bPose *src, int copyconstraints);
+void                 BKE_pose_channels_hash_make(struct bPose *pose);
+void                 BKE_pose_channels_hash_free(struct bPose *pose);
 
-/**
- * Copy the internal members of each pose channel including constraints
- * and ID-Props, used when duplicating bones in editmode.
- */
-void duplicate_pose_channel_data(struct bPoseChannel *pchan, const struct bPoseChannel *pchan_from);
+void BKE_pose_channels_remove(
+        struct Object *ob,
+        bool (*filter_fn)(const char *bone_name, void *user_data), void *user_data);
 
-/**
- * Return a pointer to the pose channel of the given name
- * from this pose.
- */
-struct bPoseChannel *get_pose_channel(const struct bPose *pose, const char *name);
+void                 BKE_pose_free(struct bPose *pose);
+void                 BKE_pose_free_ex(struct bPose *pose, bool do_id_user);
+void                 BKE_pose_copy_data(struct bPose **dst, struct bPose *src, const bool copy_constraints);
+void                 BKE_pose_channel_copy_data(struct bPoseChannel *pchan, const struct bPoseChannel *pchan_from);
+struct bPoseChannel *BKE_pose_channel_find_name(const struct bPose *pose, const char *name);
+struct bPoseChannel *BKE_pose_channel_active(struct Object *ob);
+struct bPoseChannel *BKE_pose_channel_verify(struct bPose *pose, const char *name);
+struct bPoseChannel *BKE_pose_channel_get_mirrored(const struct bPose *pose, const char *name);
 
-/**
- * Return a pointer to the active pose channel from this Object.
- * (Note: Object, not bPose is used here, as we need layer info from Armature)
- */
-struct bPoseChannel *get_active_posechannel(struct Object *ob);
-
-/** 
- * Looks to see if the channel with the given name
- * already exists in this pose - if not a new one is
- * allocated and initialized.
- */
-struct bPoseChannel *verify_pose_channel(struct bPose* pose, const char* name);
+#ifndef NDEBUG
+bool BKE_pose_channels_is_valid(const struct bPose *pose);
+#endif
 
 /* Copy the data from the action-pose (src) into the pose */
 void extract_pose_from_pose(struct bPose *pose, const struct bPose *src);
 
 /* sets constraint flags */
-void update_pose_constraint_flags(struct bPose *pose);
+void BKE_pose_update_constraint_flags(struct bPose *pose);
+
+/* tag constraint flags for update */
+void BKE_pose_tag_update_constraint_flags(struct bPose *pose);
 
 /* return the name of structure pointed by pose->ikparam */
-const char *get_ikparam_name(struct bPose *pose);
+const char *BKE_pose_ikparam_get_name(struct bPose *pose);
 
 /* allocate and initialize pose->ikparam according to pose->iksolver */
-void init_pose_ikparam(struct bPose *pose);
+void BKE_pose_ikparam_init(struct bPose *pose);
 
 /* initialize a bItasc structure with default value */
-void init_pose_itasc(struct bItasc *itasc);
+void BKE_pose_itasc_init(struct bItasc *itasc);
+
+/* Checks if a bone is part of an IK chain or not */
+bool BKE_pose_channel_in_IK_chain(struct Object *ob, struct bPoseChannel *pchan);
 
 /* clears BONE_UNKEYED flags for frame changing */
-// XXX to be depreceated for a more general solution in animsys...
+// XXX to be deprecated for a more general solution in animsys...
 void framechange_poses_clear_unkeyed(void);
 
 /* Bone Groups API --------------------- */    
 
 /* Adds a new bone-group */
-void pose_add_group(struct Object *ob);
+struct bActionGroup *BKE_pose_add_group(struct bPose *pose, const char *name);
 
-/* Remove the active bone-group */
-void pose_remove_group(struct Object *ob);
+/* Remove a bone-group */
+void BKE_pose_remove_group(struct bPose *pose, struct bActionGroup *grp, const int index);
+/* Remove the matching bone-group from its index */
+void BKE_pose_remove_group_index(struct bPose *pose, const int index);
 
 /* Assorted Evaluation ----------------- */    
 
@@ -217,9 +198,12 @@ void pose_remove_group(struct Object *ob);
 void what_does_obaction(struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe);
 
 /* for proxy */
-void copy_pose_result(struct bPose *to, struct bPose *from);
+bool BKE_pose_copy_result(struct bPose *to, struct bPose *from);
 /* clear all transforms */
-void rest_pose(struct bPose *pose);
+void BKE_pose_rest(struct bPose *pose);
+
+/* Tag pose for recalc. Also tag all related data to be recalc. */
+void BKE_pose_tag_recalc(struct Main *bmain, struct bPose *pose);
 
 #ifdef __cplusplus
 };