/// <summary> /// Updates the axis to the given state. /// </summary> /// <param name="axis">Axis.</param> private void UpdateAxis(MinMaxLineAxis axis, Sensor sensor, Scalar min, Scalar max, Unit u, int major = 2, int minor = 5) { var su = u.standardUnit; var minMag = min.ConvertTo(u).amount; var maxMag = max.ConvertTo(u).amount; minMag = minMag.TruncateToSignifiantDigits(2); maxMag = maxMag.RoundToSignificantDigits(2); if (maxMag - minMag == 0) { if (minMag == 0) { minMag -= u.OfScalar(1).amount; maxMag += u.OfScalar(1).amount; } else { var del = Math.Pow(10, Math.Floor(Math.Log10(minMag)) - 1); minMag -= del; maxMag += del; } } var determineDifference = DetermineMinimumBounds(sensor); minMag = u.OfScalar(minMag).ConvertTo(su).amount; maxMag = u.OfScalar(maxMag).ConvertTo(su).amount; var diff = (maxMag - minMag); if (minMag < sensor.minMeasurement.ConvertTo(su).amount) { minMag = sensor.minMeasurement.ConvertTo(su).amount; } var range = sensor.range.ConvertTo(su) * 0.05; if (diff < range.magnitude) { diff = range.magnitude; maxMag = minMag + diff; } var mod = diff / major; axis.SetMinMax(minMag, maxMag); axis.Minimum = minMag; axis.Maximum = maxMag; var padding = diff * 0.20; axis.MajorStep = mod; axis.MinimumMajorStep = mod; axis.Minimum -= padding; axis.Maximum += padding; axis.MajorTickSize = 10; axis.TicklineColor = OxyColors.Black; axis.MinimumPadding = 0.25; axis.MaximumPadding = 0.25; axis.AxislineStyle = LineStyle.Solid; axis.AxislineThickness = 1; axis.AxisTickToLabelDistance = -(MeasureTextWidth(axis) + axis.MajorTickSize + 5); }