123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System;
- using System.Globalization;
- using System.Windows;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using HandyControl.Tools;
- public abstract class GeometryKeyFrame : Freezable, IKeyFrame
- {
- internal double[] Numbers;
- protected GeometryKeyFrame()
- {
- }
- protected GeometryKeyFrame(Geometry value)
- {
- AnimationHelper.DecomposeGeometryStr(value.ToString(CultureInfo.InvariantCulture), out var arr);
- Numbers = arr;
- Value = value;
- }
- protected GeometryKeyFrame(Geometry value, KeyTime keyTime) : this(value) => KeyTime = keyTime;
- public static readonly DependencyProperty KeyTimeProperty = DependencyProperty.Register(
- nameof(KeyTime), typeof(KeyTime), typeof(GeometryKeyFrame), new PropertyMetadata(KeyTime.Uniform));
- public KeyTime KeyTime
- {
- get => (KeyTime) GetValue(KeyTimeProperty);
- set => SetValue(KeyTimeProperty, value);
- }
- object IKeyFrame.Value
- {
- get => Value;
- set => Value = (Geometry) value;
- }
- public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
- nameof(Value), typeof(Geometry), typeof(GeometryKeyFrame), new PropertyMetadata(default(Geometry), OnValueChanged));
- private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- var obj = (GeometryKeyFrame) d;
- var v = (Geometry) e.NewValue;
- AnimationHelper.DecomposeGeometryStr(v.ToString(CultureInfo.InvariantCulture), out var arr);
- obj.Numbers = arr;
- }
- public Geometry Value
- {
- get => (Geometry) GetValue(ValueProperty);
- set => SetValue(ValueProperty, value);
- }
- public double[] InterpolateValue(double[] baseValue, double keyFrameProgress)
- {
- if (keyFrameProgress < 0.0 || keyFrameProgress > 1.0)
- {
- throw new ArgumentOutOfRangeException(nameof(keyFrameProgress));
- }
- return InterpolateValueCore(baseValue, keyFrameProgress);
- }
- protected abstract double[] InterpolateValueCore(double[] baseValue, double keyFrameProgress);
- }
|