Files
OxyPlot/Source/Examples/WPF/WpfExamples/Examples/AnimationsDemo/ViewModels/LinearBarViewModel.cs
2023-09-02 09:24:59 +02:00

94 lines
3.0 KiB
C#

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="MainViewModel.cs" company="OxyPlot">
// Copyright (c) 2014 OxyPlot contributors
// </copyright>
// --------------------------------------------------------------------------------------------------------------------
namespace AnimationsDemo
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using OxyPlot;
using OxyPlot.Annotations;
using OxyPlot.Axes;
using OxyPlot.Series;
public class LinearBarViewModel : AnimationViewModelBase
{
public LinearBarViewModel()
{
var pnls = new List<Pnl>();
var random = new Random(31);
var dateTime = DateTime.Today.Add(TimeSpan.FromHours(9));
for (var pointIndex = 0; pointIndex < 50; pointIndex++)
{
pnls.Add(new Pnl
{
Time = dateTime,
Value = -200 + random.Next(1000),
});
dateTime = dateTime.AddMinutes(1);
}
var minimum = pnls.Min(x => x.Value);
var maximum = pnls.Max(x => x.Value);
var plotModel = this.PlotModel;
plotModel.Title = "Linear Bar Series Animation Demo";
var series = new LinearBarSeries
{
Title = "P & L",
ItemsSource = pnls,
DataFieldX = "Time",
DataFieldY = "Value",
FillColor = OxyColor.Parse("#454CAF50"),
StrokeColor = OxyColor.Parse("#4CAF50"),
StrokeThickness = 1,
BarWidth = 5
};
plotModel.Series.Add(series);
var annotation = new LineAnnotation
{
Type = LineAnnotationType.Horizontal,
Y = 0
};
plotModel.Annotations.Add(annotation);
var dateTimeAxis = new DateTimeAxis
{
Position = AxisPosition.Bottom,
IntervalType = DateTimeIntervalType.Hours,
IntervalLength = 50
};
plotModel.Axes.Add(dateTimeAxis);
var margin = (maximum - minimum) * 0.05;
var valueAxis = new LinearAxis
{
Position = AxisPosition.Left,
Minimum = minimum - margin,
Maximum = maximum + margin,
};
plotModel.Axes.Add(valueAxis);
}
public override bool SupportsEasingFunction { get { return true; } }
public override async Task AnimateAsync(AnimationSettings animationSettings)
{
var plotModel = this.PlotModel;
var series = plotModel.Series.First() as LinearBarSeries;
if (series != null)
{
await plotModel.AnimateSeriesAsync(series, animationSettings);
}
}
}
}