-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathMainPage.xaml.cs
More file actions
85 lines (73 loc) · 3.61 KB
/
Copy pathMainPage.xaml.cs
File metadata and controls
85 lines (73 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using Microsoft.Graphics.Canvas.Geometry;
using System;
using System.Collections.Generic;
using System.Numerics;
using Windows.UI;
using Windows.UI.Xaml.Controls;
using Microsoft.Graphics.Canvas.UI.Xaml;
namespace Win2DChartSample
{
public sealed partial class MainPage : Page
{
private const float DataStrokeThickness = 1;
private const float MovingAverageStrokeThickness1 = 2;
private const float MovingAverageStrokeThickness2 = 2;
private int ColumnAvgDataRange => (int)ColumnDataRangeSlider.Value;
private float ColumnWidth => (float)(ColumnWidthSlider.Value * ColumnAvgDataRange * 0.01);
private int DataPointsPerFrame => (int)ValuesPerFrameSlider.Value;
private int MovingAverageRange1 => (int)MovingAverageRange1Slider.Value;
private int MovingAverageRange2 => (int)MovingAverageRange2Slider.Value;
private readonly List<double> _data = new List<double>();
private readonly Random _rand = new Random();
private double _lastValue = 0.5;
private readonly ChartRenderer _chartRenderer;
public MainPage()
{
this.InitializeComponent();
_chartRenderer = new ChartRenderer();
}
private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
{
for (int i = 0; i < DataPointsPerFrame; i++)
{
var delta = _rand.NextDouble() * .1 - .05;
_lastValue = Math.Max(0d, Math.Min(1d, _lastValue + delta));
_data.Add(_lastValue);
}
if (_data.Count > (int)canvas.ActualWidth)
{
_data.RemoveRange(0, _data.Count - (int)canvas.ActualWidth);
}
args.DrawingSession.Clear(Colors.White);
if (RenderAsPieChartCheckBox.IsChecked != true)
{
if (ShowColumnsCheckBox.IsChecked == true)
_chartRenderer.RenderAveragesAsColumns(canvas, args, ColumnAvgDataRange, ColumnWidth, _data);
if (ShowDataCheckBox.IsChecked == true)
_chartRenderer.RenderData(canvas, args, Colors.Black, DataStrokeThickness, _data, renderArea: ShowDataAsAreaCheckBox.IsChecked == true);
if (ShowMovingAverage1CheckBox.IsChecked == true)
_chartRenderer.RenderMovingAverage(canvas, args, Colors.DeepSkyBlue, MovingAverageStrokeThickness1, MovingAverageRange1, _data);
if (ShowMovingAverage2CheckBox.IsChecked == true)
_chartRenderer.RenderMovingAverage(canvas, args, Colors.Red, MovingAverageStrokeThickness2, this.MovingAverageRange2, _data);
if (ShowAxesCheckBox.IsChecked == true)
_chartRenderer.RenderAxes(canvas, args);
}
else
{
var pieValues = new List<double>(_data.Count / ColumnAvgDataRange);
for (int start = 0; start < _data.Count; start += ColumnAvgDataRange)
{
double rangeTotal = 0;
var range = Math.Min(ColumnAvgDataRange, _data.Count - start);
for (int i = start; i < start + range; i++)
{
rangeTotal += _data[i];
}
pieValues.Add(rangeTotal);
}
_chartRenderer.RenderAveragesAsPieChart(canvas, args, pieValues, new List<Color>(new [] {Colors.DarkSalmon, Colors.Azure, Colors.LemonChiffon, Colors.Honeydew, Colors.Pink}));
}
canvas.Invalidate();
}
}
}