[Bf-blender-cvs] [bba11201169] master: Fix: Don't average keyframe values if FCurve can only have int/discrete values

Joshua Leung noreply at git.blender.org
Wed Feb 21 14:00:00 CET 2018


Commit: bba112011692d38829f7291d05b173418d8ba91a
Author: Joshua Leung
Date:   Wed Feb 21 22:37:48 2018 +1300
Branches: master
https://developer.blender.org/rBbba112011692d38829f7291d05b173418d8ba91a

Fix: Don't average keyframe values if FCurve can only have int/discrete values

This is to prevent problems with integer/enum properties getting invalid
values set.

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

M	source/blender/editors/transform/transform_conversions.c

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

diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 9d44bf50b02..41511015d61 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -3529,6 +3529,7 @@ static void posttrans_fcurve_clean(FCurve *fcu, const bool use_handle)
 {
 	/* NOTE: We assume that all keys are sorted */
 	ListBase retained_keys = {NULL, NULL};
+	const bool can_average_points = ((fcu->flag & (FCURVE_INT_VALUES | FCURVE_DISCRETE_VALUES)) == 0);
 	
 	/* sanity checks */
 	if ((fcu->totvert == 0) || (fcu->bezt == NULL))
@@ -3597,8 +3598,10 @@ static void posttrans_fcurve_clean(FCurve *fcu, const bool use_handle)
 				 */
 				if (BEZT_ISSEL_ANY(bezt) && (rk->del_count == rk->tot_count - 1)) {
 					/* Update keyframe */
-					/* TODO: update handles too? */
-					bezt->vec[1][1] = rk->val;
+					if (can_average_points) {
+						/* TODO: update handles too? */
+						bezt->vec[1][1] = rk->val;
+					}
 				}
 				else {
 					/* Delete keyframe */



More information about the Bf-blender-cvs mailing list