Example #1
0
        /// <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);
        }