using OxyPlot; using OxyPlot.Wpf; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core; using Tango.MachineStudio.ThreadExtensions.ViewModels; namespace Tango.MachineStudio.ThreadExtensions.Models { public class PlotProperties : ExtendedObject { public Plot PlotControl { get; set; } private IList _points; private FactorColors _color; public FactorColors Color { get { return _color; } set { _color = value; } } /// /// Binding to ItemsSource of line chart. /// public IList Points { get { return _points; } set { _points = value; RaisePropertyChangedAuto(); } } private IList _target100Points; /// /// Binding to ItemsSource of line chart. /// public IList Target100Points { get { return _target100Points; } set { _target100Points = value; RaisePropertyChangedAuto(); } } private IList _target200Points; /// /// Binding to ItemsSource of line chart. /// public IList Target200Points { get { return _target200Points; } set { _target200Points = value; RaisePropertyChangedAuto(); } } private int _step; public int XStep { get { return _step; } set { _step = value; RaisePropertyChangedAuto(); } } private double _from; /// /// From use to binding to bottom axis min value /// public double From { get { return _from; } set { _from = value; RaisePropertyChangedAuto(); } } private double _to; /// /// To use to binding to bottom axis max value /// public double To { get { return _to; } set { _to = value; RaisePropertyChangedAuto(); } } public PlotProperties(FactorColors color) { this.Points = new List(); Target100Points = new List(); Target200Points = new List(); Color = color; } public void ClearResults() { Points.Clear(); Target100Points.Clear(); Target200Points.Clear(); } public void CreateGraph(List points, bool isLtype) { if (PlotControl == null) { Debug.WriteLine("ERROR!!! CreateGraph. Plot Control is NULL."); return; } ClearResults(); PlotControl.InvalidatePlot(true); double target100Y = FactorTarget.GetFactor100(Color); double target200Y = FactorTarget.GetFactor200(Color); _to = target100Y > target200Y? target100Y + 10: target200Y + 10; _from = target100Y < target200Y ? target100Y - 10 : target200Y - 10; foreach ( var x in points) { var point = new DataPoint(x.InkNlCm, isLtype ? x.L : x.B); Points.Add(point); _to = _to > point.Y ? _to : point.Y; _from = ( _from == 0 || _from > point.Y ) ? point.Y : _from; } if (points.Count > 1) { var minInkNlCm = points.Min(n => n.InkNlCm); var maxInkNlCm = points.Max(n => n.InkNlCm); if(! Target100Points.Any(x => x.X == minInkNlCm)) { Target100Points.Add(new DataPoint(minInkNlCm, target100Y)); Target200Points.Add(new DataPoint(minInkNlCm, target200Y)); } if (!Target100Points.Any(x => x.X == maxInkNlCm)) { Target100Points.Add(new DataPoint(maxInkNlCm, target100Y)); Target200Points.Add(new DataPoint(maxInkNlCm, target200Y)); } } Debug.WriteLine($"CreateGraph. Count Points {points.Count}"); if (_to == 0) _to = isLtype ? 100 : 128; if (_from == 0) _from = isLtype ? 0 : -127; RaisePropertyChanged("To"); RaisePropertyChanged("From"); XStep = (int)(Points.Count / 6); PlotControl.InvalidatePlot(true); } } }