[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21000] branches/soc-2009-aligorith/source /blender/blenkernel: NLA SoC: Bugfix for Deleting Keyframes
Joshua Leung
aligorith at gmail.com
Fri Jun 19 06:58:40 CEST 2009
Revision: 21000
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21000
Author: aligorith
Date: 2009-06-19 06:58:40 +0200 (Fri, 19 Jun 2009)
Log Message:
-----------
NLA SoC: Bugfix for Deleting Keyframes
When an F-Curve doesn't contain any keyframes anymore but it still exists, the F-Curve's value is not recalculated and flushed anymore if the F-Curve's value will not change. That is, if the F-Curve doesn't have any other data, i.e. drivers or generator-modifiers, which would still change its value, it wouldn't be recalculated to have a value of zero.
This solves the problem of deleting all scale keyframes, whereby objects/bones would appear to 'vanish'
Modified Paths:
--------------
branches/soc-2009-aligorith/source/blender/blenkernel/BKE_fcurve.h
branches/soc-2009-aligorith/source/blender/blenkernel/intern/fcurve.c
Modified: branches/soc-2009-aligorith/source/blender/blenkernel/BKE_fcurve.h
===================================================================
--- branches/soc-2009-aligorith/source/blender/blenkernel/BKE_fcurve.h 2009-06-19 04:45:56 UTC (rev 20999)
+++ branches/soc-2009-aligorith/source/blender/blenkernel/BKE_fcurve.h 2009-06-19 04:58:40 UTC (rev 21000)
@@ -112,7 +112,7 @@
struct FModifier *fcurve_find_active_modifier(struct FCurve *fcu);
void fcurve_set_active_modifier(struct FCurve *fcu, struct FModifier *fcm);
-short fcurve_has_suitable_modifier(FCurve *fcu, int mtype, short acttype);
+short fcurve_has_suitable_modifier(struct FCurve *fcu, int mtype, short acttype);
float evaluate_time_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float cvalue, float evaltime);
void evaluate_value_fmodifiers(ListBase *modifiers, struct FCurve *fcu, float *cvalue, float evaltime);
Modified: branches/soc-2009-aligorith/source/blender/blenkernel/intern/fcurve.c
===================================================================
--- branches/soc-2009-aligorith/source/blender/blenkernel/intern/fcurve.c 2009-06-19 04:45:56 UTC (rev 20999)
+++ branches/soc-2009-aligorith/source/blender/blenkernel/intern/fcurve.c 2009-06-19 04:58:40 UTC (rev 21000)
@@ -2415,10 +2415,16 @@
}
/* Calculate the value of the given F-Curve at the given frame, and set its curval */
-// TODO: will this be necessary?
void calculate_fcurve (FCurve *fcu, float ctime)
{
- /* calculate and set curval (evaluates driver too) */
- fcu->curval= evaluate_fcurve(fcu, ctime);
+ /* only calculate + set curval (overriding the existing value) if curve has
+ * any data which warrants this...
+ */
+ if ( (fcu->totvert) || (fcu->driver && !(fcu->driver->flag & DRIVER_FLAG_INVALID)) ||
+ fcurve_has_suitable_modifier(fcu, 0, FMI_TYPE_GENERATE_CURVE) )
+ {
+ /* calculate and set curval (evaluates driver too if necessary) */
+ fcu->curval= evaluate_fcurve(fcu, ctime);
+ }
}
More information about the Bf-blender-cvs
mailing list