12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System;
- using System.Windows;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using HandyControl.Expression.Drawing;
- using HandyControl.Tools;
- namespace HandyControl.Media.Animation;
- public class SplineGeometryKeyFrame : GeometryKeyFrame
- {
- public SplineGeometryKeyFrame()
- {
- }
- public SplineGeometryKeyFrame(Geometry value) : base(value)
- {
- }
- public SplineGeometryKeyFrame(Geometry value, KeyTime keyTime) : base(value, keyTime)
- {
- }
- public SplineGeometryKeyFrame(Geometry value, KeyTime keyTime, KeySpline keySpline) : base(value, keyTime)
- {
- KeySpline = keySpline ?? throw new ArgumentNullException(nameof(keySpline));
- }
- protected override Freezable CreateInstanceCore() => new SplineGeometryKeyFrame();
- protected override double[] InterpolateValueCore(double[] baseValue, double keyFrameProgress)
- {
- if (MathHelper.IsVerySmall(keyFrameProgress))
- {
- return baseValue;
- }
- if (MathHelper.AreClose(keyFrameProgress, 1))
- {
- return Numbers;
- }
- var splineProgress = KeySpline.GetSplineProgress(keyFrameProgress);
- return AnimationHelper.InterpolateGeometryValue(baseValue, Numbers, splineProgress);
- }
- public static readonly DependencyProperty KeySplineProperty = DependencyProperty.Register(
- nameof(KeySpline), typeof(KeySpline), typeof(SplineGeometryKeyFrame), new PropertyMetadata(new KeySpline()));
- public KeySpline KeySpline
- {
- get => (KeySpline) GetValue(KeySplineProperty);
- set => SetValue(KeySplineProperty, value);
- }
- }
|