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
path: root/source
diff options
context:
space:
mode:
authorJacques Lucke <mail@jlucke.com>2019-01-31 14:17:43 +0300
committerJacques Lucke <mail@jlucke.com>2019-01-31 14:19:33 +0300
commitf4c0dacde7bfc9efea9d0cf990325109fa2f4bb0 (patch)
tree84df0c6315a14219b663a9cf2bfef99e33dacf8f /source
parent83f8f44791374dd051728e44d89fbdeee15c60aa (diff)
Fix: allow curve of driver to be evaluated individually
This is necessary when adding a new keyframe to a fcurve that also has a driver. Reviewers: brecht, campbellbarton Differential Revision: https://developer.blender.org/D4278
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_fcurve.h1
-rw-r--r--source/blender/blenkernel/intern/fcurve.c8
-rw-r--r--source/blender/editors/space_graph/graph_edit.c2
3 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h
index 23d812c72ce..c9ff37622f8 100644
--- a/source/blender/blenkernel/BKE_fcurve.h
+++ b/source/blender/blenkernel/BKE_fcurve.h
@@ -297,6 +297,7 @@ void correct_bezpart(float v1[2], float v2[2], float v3[2], float v4[2]);
/* evaluate fcurve */
float evaluate_fcurve(struct FCurve *fcu, float evaltime);
+float evaluate_fcurve_only_curve(struct FCurve *fcu, float evaltime);
float evaluate_fcurve_driver(struct PathResolvedRNA *anim_rna, struct FCurve *fcu,
struct ChannelDriver *driver_orig, float evaltime);
/* evaluate fcurve and store value */
diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index 8ac3c840680..fa8fd9247bb 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -2799,6 +2799,14 @@ float evaluate_fcurve(FCurve *fcu, float evaltime)
return evaluate_fcurve_ex(fcu, evaltime, 0.0);
}
+float evaluate_fcurve_only_curve(FCurve *fcu, float evaltime)
+{
+ /* Can be used to evaluate the (keyframed) fcurve only.
+ * Also works for driver-fcurves when the driver itself is not relevant.
+ * E.g. when inserting a keyframe in a driver fcurve. */
+ return evaluate_fcurve_ex(fcu, evaltime, 0.0);
+}
+
float evaluate_fcurve_driver(PathResolvedRNA *anim_rna, FCurve *fcu, ChannelDriver *driver_orig, float evaltime)
{
BLI_assert(fcu->driver != NULL);
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 80f0d03b8ca..735b25393c3 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -616,7 +616,7 @@ static void insert_graph_keys(bAnimContext *ac, eGraphKeys_InsertKey_Types mode)
else if (adt)
cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP);
- const float curval = evaluate_fcurve(fcu, cfra);
+ const float curval = evaluate_fcurve_only_curve(fcu, cfra);
insert_vert_fcurve(fcu, cfra, curval, ts->keyframe_type, 0);
}