예제 #1
0
        public void Update(float?val, SimpleGraph other = null, float?otherVal = null)
        {
            if (!val.HasValue)
            {
                return;
            }

            _history.RemoveAt(0);
            _history.Add(val.Value);

            if (AutoScale(other, otherVal))
            {
                UpdateAxis();
                UpdateGridLines();
            }

            _figure.Segments.Clear();

            UpdatePath();
        }
예제 #2
0
        private bool AutoScale(SimpleGraph other, float?otherVal)
        {
            if (Primary != null)
            {
                Max = Primary.Max;
                Min = Primary.Min;
                return(false);
            }

            if (NoScale)
            {
                return(false);
            }

            var historyWithValues = _history.Where(h => h >= 0).ToList();

            if (historyWithValues.Count == 0)
            {
                return(false);
            }

            var changed = false;

            var histMax = _history.Where(h => h >= 0).Max();

            if (other != null)
            {
                var otherHistMax = other._history.Where(h => h >= 0).DefaultIfEmpty(0).Max();
                if (otherHistMax > histMax)
                {
                    histMax = otherHistMax;
                }
                if (otherVal.HasValue && otherVal.Value > histMax)
                {
                    histMax = otherVal.Value;
                }
            }
            var histMin = _history.Where(h => h >= 0).Min();

            while (histMax > Max)
            {
                changed = true;
                Max    += 10;
            }

            while (histMax < Max - 10 && Max > _defaultMax)
            {
                changed = true;
                Max    -= 10;
                if (Max < _defaultMax)
                {
                    Max = _defaultMax;
                    break;
                }
            }

            while (histMin < Min)
            {
                changed = true;
                Min    -= 10;
            }

            while (histMin > Min + 10 && Min < _defaultMin)
            {
                changed = true;
                Min    += 10;
                if (Min > _defaultMin)
                {
                    Min = _defaultMin;
                    break;
                }
            }

            return(changed);
        }