aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.IDE/IDESettings.cs
blob: 347b064680024e0624e7aac1ff6a0a721f339599 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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<DataPoint> _points;

        private FactorColors _color;

        public FactorColors Color
        {
            get { return _color; }
            set { _color = value; }
        }

        /// <summary>
        /// Binding to ItemsSource  of line chart.
        /// </summary>
        public IList<DataPoint> Points
        {
            get { return _points; }
            set
            {
                _points = value;
                RaisePropertyChangedAuto();
            }
        }
        private IList<DataPoint> _target100Points;
        /// <summary>
        /// Binding to ItemsSource  of line chart.
        /// </summary>
        public IList<DataPoint> Target100Points
        {
            get { return _target100Points; }
            set
            {
                _target100Points = value;
                RaisePropertyChangedAuto();
            }
        }
        private IList<DataPoint> _target200Points;
        /// <summary>
        /// Binding to ItemsSource  of line chart.
        /// </summary>
        public IList<DataPoint> Target200Points
        {
            get { return _target200Points; }
            set
            {
                _target200Points = value;
                RaisePropertyChangedAuto();
            }
        }
        private int _step;
        public int XStep
        {
            get { return _step; }
            set { _step = value; RaisePropertyChangedAuto(); }
        }

        private double _from;
        /// <summary>
        /// From use to binding to bottom axis min value
        /// </summary>
        public double From
        {
            get { return _from; }
            set
            {
                _from = value; RaisePropertyChangedAuto();
            }
        }

        private double _to;
        /// <summary>
        /// To use to binding to bottom axis max value
        /// </summary>
        public double To
        {
            get { return _to; }
            set
            {
                _to = value; RaisePropertyChangedAuto();
            }
        }

        public PlotProperties(FactorColors color)
        {
            this.Points = new List<DataPoint>();
            Target100Points = new List<DataPoint>();
            Target200Points = new List<DataPoint>();
            Color = color;

        }

        public void ClearResults()
        {
            Points.Clear();
            Target100Points.Clear();
            Target200Points.Clear();
        }

        public void CreateGraph(List<ColorProcessData> 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);

        }
    }
}