Commit: f4c0dacde7bfc9efea9d0cf990325109fa2f4bb0
Author: Jacques Lucke
Date:   Thu Jan 31 12:17:43 2019 +0100
Branches: master
https://developer.blender.org/rBf4c0dacde7bfc9efea9d0cf990325109fa2f4bb0

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

===================================================================

M       source/blender/blenkernel/BKE_fcurve.h
M       source/blender/blenkernel/intern/fcurve.c
M       source/blender/editors/space_graph/graph_edit.c

===================================================================

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);
                        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to