Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2009-04-15 05:10:36 +0400
committerJoshua Leung <aligorith@gmail.com>2009-04-15 05:10:36 +0400
commit2dbf73f6a032ab44539cfd8c05f5743fbaf33902 (patch)
tree2a3093dfa8b561213db1c58bf2583cb05f6b2ed5 /source/blender/blenkernel
parent5b3d7bfdf6305e880f89d58cbe852a8d2ba7b241 (diff)
2.5 PoseLib - First steps to get PoseLib to work in 2.5
* Cleaned up Keyframing API to get eliminate some of the problems faced during the original implementation of PoseLib, thus reducing code redundancy. * Added new Animato evaluation functions specifically for use by PoseLib. * Replaced parts of PoseLib code which relied on old animation system to the equivalent code for Animato. Notice the much cleaner + saner + compact code! Next step is to operatorfy the PoseLib tools (while maintaining possibility for an API to some things) :)
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_animsys.h21
-rw-r--r--source/blender/blenkernel/intern/anim_sys.c28
2 files changed, 47 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h
index 44c8d827e8c..70a0cd34a6c 100644
--- a/source/blender/blenkernel/BKE_animsys.h
+++ b/source/blender/blenkernel/BKE_animsys.h
@@ -12,6 +12,10 @@ struct AnimData;
struct KeyingSet;
struct KS_Path;
+struct PointerRNA;
+struct bAction;
+struct AnimMapper;
+
/* ************************************* */
/* AnimData API */
@@ -50,6 +54,9 @@ void BKE_keyingsets_free(struct ListBase *list);
/* ************************************* */
/* Evaluation API */
+/* ------------- Main API -------------------- */
+/* In general, these ones should be called to do all animation evaluation */
+
/* Evaluation loop for evaluating animation data */
void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, float ctime, short recalc);
@@ -57,6 +64,20 @@ void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, float ct
void BKE_animsys_evaluate_all_animation(struct Main *main, float ctime);
+/* ------------ Specialised API --------------- */
+/* There are a few special tools which require these following functions. They are NOT to be used
+ * for standard animation evaluation UNDER ANY CIRCUMSTANCES!
+ *
+ * i.e. Pose Library (PoseLib) uses some of these for selectively applying poses, but
+ * Particles/Sequencer performing funky time manipulation is not ok.
+ */
+
+/* Evaluate Action (F-Curve Bag) */
+void animsys_evaluate_action(struct PointerRNA *ptr, struct bAction *act, struct AnimMapper *remap, float ctime);
+
+/* Evaluate Action Group */
+void animsys_evaluate_action_group(struct PointerRNA *ptr, struct bAction *act, struct bActionGroup *agrp, struct AnimMapper *remap, float ctime);
+
/* ************************************* */
#endif /* BKE_ANIM_SYS_H*/
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index ebced7837ae..c8b2ff71612 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -504,8 +504,29 @@ static void animsys_evaluate_drivers (PointerRNA *ptr, AnimData *adt, float ctim
/* ***************************************** */
/* Actions Evaluation */
+/* Evaluate Action Group */
+void animsys_evaluate_action_group (PointerRNA *ptr, bAction *act, bActionGroup *agrp, AnimMapper *remap, float ctime)
+{
+ FCurve *fcu;
+
+ /* check if mapper is appropriate for use here (we set to NULL if it's inappropriate) */
+ if ELEM(NULL, act, agrp) return;
+ if ((remap) && (remap->target != act)) remap= NULL;
+
+ /* calculate then execute each curve */
+ for (fcu= agrp->channels.first; (fcu) && (fcu->grp == agrp); fcu= fcu->next)
+ {
+ /* check if this curve should be skipped */
+ if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0)
+ {
+ calculate_fcurve(fcu, ctime);
+ animsys_execute_fcurve(ptr, remap, fcu);
+ }
+ }
+}
+
/* Evaluate Action (F-Curve Bag) */
-static void animsys_evaluate_action (PointerRNA *ptr, bAction *act, AnimMapper *remap, float ctime)
+void animsys_evaluate_action (PointerRNA *ptr, bAction *act, AnimMapper *remap, float ctime)
{
/* check if mapper is appropriate for use here (we set to NULL if it's inappropriate) */
if (act == NULL) return;
@@ -863,7 +884,10 @@ void BKE_animsys_evaluate_all_animation (Main *main, float ctime)
// TODO...
/* objects */
- EVAL_ANIM_IDS(main->object.first, ADT_RECALC_ANIM);
+ /* ADT_RECALC_ANIM doesn't need to be supplied here, since object AnimData gets
+ * this tagged by Depsgraph on framechange
+ */
+ EVAL_ANIM_IDS(main->object.first, /*ADT_RECALC_ANIM*/0);
/* worlds */
EVAL_ANIM_IDS(main->world.first, ADT_RECALC_ANIM);