WinRTXamlToolkit.Controls.DataVisualization.Charting.LinearAxis.CalculateActualInterval C# (CSharp) Method

CalculateActualInterval() protected method

Returns the actual interval to use to determine which values are displayed in the axis.
protected CalculateActualInterval ( Size availableSize ) : double
availableSize Windows.Foundation.Size The available size.
return double
        protected virtual double CalculateActualInterval(Size availableSize)
        {
            if (Interval != null)
            {
                return Interval.Value;
            }

            // Adjust maximum interval count adjusted for current axis
            double adjustedMaximumIntervalsPer200Pixels = (Orientation == AxisOrientation.X ? 0.8 : 1.0) * MaximumAxisIntervalsPer200Pixels;
            // Calculate maximum interval count for current space
            double maximumIntervalCount = Math.Max(GetLength(availableSize) * adjustedMaximumIntervalsPer200Pixels / 200.0, 1.0);
            // Calculate range
            double range = ActualDoubleRange.Maximum - ActualDoubleRange.Minimum;
            // Calculate largest acceptable interval
            double bestInterval = range / maximumIntervalCount;
            // Calculate mimimum ideal interval (ideal => something that gives nice axis values)
            double minimumIdealInterval = Math.Pow(10, Math.Floor(Math.Log10(bestInterval)));
            // Walk the list of ideal multipliers
            foreach (int idealMultiplier in new int[] { 10, 5, 2, 1 })
            {
                // Check the current ideal multiplier against the maximum count
                double currentIdealInterval = minimumIdealInterval * idealMultiplier;
                if (maximumIntervalCount < (range / currentIdealInterval))
                {
                    // Went too far, break out
                    break;
                }
                // Update the best interval
                bestInterval = currentIdealInterval;
            }
            // Return best interval
            return bestInterval;
        }