public AxisLimits(DateTime startTimestamp, DateTime endTimestamp, Dimension yDimension)
        {
            const bool snapToGrid = true;

            StartTimestamp = startTimestamp;
            EndTimestamp   = endTimestamp;
            var timeInterval = (EndTimestamp - StartTimestamp).TotalSeconds;

            TimeUnit = new TimeUnitForDisplay(timeInterval);
            X        = new Dimension(0, TimeUnit.ConvertFromSeconds(timeInterval), !snapToGrid);
            Y        = yDimension;
        }
Exemplo n.º 2
0
        private void InitSeries(
            MeasurementComparisonDictionary sourceData,
            DateTime baseTimestamp,
            TimeUnitForDisplay timeUnit)
        {
            _actualSeries   = new Series(ActualCaption);
            _expectedSeries = new Series(ExpectedCaption);
            _failSeries     = new Series(FailCaption);

            var hasFailure = false;

            foreach (var key in sourceData.Keys)
            {
                var xValue    = timeUnit.ConvertFromSeconds((key - baseTimestamp).TotalSeconds);
                var value     = sourceData[key].Value;
                var expectedY = value.ExpectedValueOut?.To <double>();
                // if we have a non-convertible value, return null, so it is skipped
                var actualY = value.ActualValueOut?.ToWithDefault <double?>(null);
                // ensure that IsGood issues are also marked as failures.
                var pass = sourceData[key].IsOk();

                var failValue = actualY ?? expectedY;
                AddPoint(_expectedSeries, xValue, expectedY);
                AddPoint(_actualSeries, xValue, actualY);
                if (pass)
                {
                    continue;
                }
                AddPoint(_failSeries, xValue, failValue);
                hasFailure = true;
            }

            SetSeriesStyle(_actualSeries, SeriesType.Actual, hasFailure);
            SetSeriesStyle(_expectedSeries, SeriesType.Expected, hasFailure);
            SetSeriesStyle(_failSeries, SeriesType.Fail, hasFailure);

            _chart.Series.Add(_actualSeries);
            _chart.Series.Add(_expectedSeries);
            _chart.Series.Add(_failSeries);
        }
        private void InitSeries(
            MeasurementComparisonDictionary sourceData,
            DateTime baseTimestamp,
            TimeUnitForDisplay timeUnit)
        {
            _expectedSeries = new LineSeries <ObservablePoint>
            {
                Values         = new List <ObservablePoint>(),
                Fill           = null,
                LineSmoothness = 0,
                GeometrySize   = 0,
                Stroke         = new SolidColorPaint(ExpectedColor)
                {
                    StrokeThickness = LineThickness, PathEffect = new DashEffect(new[] { 5f, 5f })
                },
                Name = ExpectedCaption
            };
            _actualSeries = new LineSeries <ObservablePoint>
            {
                Values         = new List <ObservablePoint>(),
                Fill           = null,
                LineSmoothness = 0,
                GeometrySize   = 0,
                Stroke         = new SolidColorPaint(ActualColor)
                {
                    StrokeThickness = LineThickness + 1
                },
                Name = ActualCaption
            };
            var errorPaint = new SolidColorPaint(FailColor);

            _failSeries = new LineSeries <ObservablePoint, CircleGeometry>
            {
                GeometrySize   = 9,
                Values         = new List <ObservablePoint>(),
                Fill           = null,
                Stroke         = null,
                GeometryStroke = errorPaint,
                GeometryFill   = errorPaint,
                LineSmoothness = 0,
                Name           = FailCaption
            };

            foreach (var key in sourceData.Keys)
            {
                var xValue    = timeUnit.ConvertFromSeconds((key - baseTimestamp).TotalSeconds);
                var value     = sourceData[key].Value;
                var expectedY = value.ExpectedValueOut?.To <double>();
                // if we have a non-convertible value, return null, so it is skipped
                var actualY = value.ActualValueOut?.ToWithDefault <double?>(null);
                // ensure that IsGood issues are also marked as failures.
                var pass = sourceData[key].IsOk();

                var failValue = actualY ?? expectedY;
                AddPoint(_expectedSeries, xValue, expectedY);
                AddPoint(_actualSeries, xValue, actualY);
                if (pass)
                {
                    continue;
                }
                AddPoint(_failSeries, xValue, failValue);
            }

            var chartSeries = new List <ISeries> {
                _actualSeries, _expectedSeries
            };
            var errors = _failSeries.Values as List <ObservablePoint>;

            Debug.Assert(errors != null, nameof(errors) + " != null");
            if (errors.Any())
            {
                chartSeries.Add(_failSeries);
            }
            _chart.Series          = chartSeries;
            _chart.DrawMarginFrame = new DrawMarginFrame
            {
                Fill   = new SolidColorPaint(ChartColor),
                Stroke = new SolidColorPaint(MajorGridColor)
            };
        }