From ca7b6e2cd03c51b59b72dccda6fb5acb38bc8e07 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Mar 2010 13:20:18 +0000 Subject: [PATCH] fix for more crashes with baked fcurves --- source/blender/editors/animation/keyframes_general.c | 3 +++ source/blender/editors/transform/transform_conversions.c | 2 +- source/blender/editors/transform/transform_generics.c | 7 +++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c index 1d9c251d205..ae2c617bc80 100644 --- a/source/blender/editors/animation/keyframes_general.c +++ b/source/blender/editors/animation/keyframes_general.c @@ -372,6 +372,9 @@ void sample_fcurve (FCurve *fcu) tempFrameValCache *value_cache, *fp; int sfra, range; int i, n, nIndex; + + if(fcu->bezt==NULL) /* ignore baked */ + return NULL; /* find selected keyframes... once pair has been found, add keyframes */ for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 9d236bd47db..e5e6809bf13 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2912,7 +2912,7 @@ static void posttrans_fcurve_clean (FCurve *fcu) /* allocate memory for the cache */ // TODO: investigate using BezTriple columns instead? - if (fcu->totvert == 0) + if (fcu->totvert == 0 || fcu->bezt==NULL) return; selcache= MEM_callocN(sizeof(float)*fcu->totvert, "FCurveSelFrameNums"); len= 0; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 27eb48614d2..4ca821e2b01 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -323,10 +323,13 @@ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) static int fcu_test_selected(FCurve *fcu) { - BezTriple *bezt; + BezTriple *bezt= fcu->bezt; int i; - for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { + if(bezt==NULL) /* ignore baked */ + return 0; + + for (i=0; i < fcu->totvert; i++, bezt++) { if (BEZSELECTED(bezt)) return 1; }