using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace SampleApp.WinDesktop { /// /// Interaction logic for AltitudeGraph.xaml /// public partial class AltitudeGraph : UserControl { Queue datapoints = new Queue(); double min = double.MaxValue; double max = double.MinValue; public AltitudeGraph() { InitializeComponent(); MaxDatapoints = 150; } public void AddDataPoint(double value) { if (double.IsNaN(value)) return; datapoints.Enqueue(value); min = Math.Min(value, double.IsNaN(min) ? value : min); max = Math.Max(value, double.IsNaN(max) ? value : max); if (datapoints.Count > MaxDatapoints) { double val = datapoints.Dequeue(); //If this is the limiting value, recalculate min/max if (val == min) min = datapoints.Min(); if (val == max) max = datapoints.Max(); } UpdatePath(); mintb.Text = min.ToString("0"); maxtb.Text = max.ToString("0"); } private void UpdatePath() { if(!datapoints.Any()) { path.Data = null; return; } var data = datapoints.ToArray(); List segments = new List(); for(int i=1;i