/// <summary> /// Calculates actual interval /// </summary> /// <param name="axis"></param> /// <param name="range"></param> /// <param name="availableSize"></param> /// <param name="interval"></param> /// <returns></returns> internal static double CalculateActualInterval(ChartAxis axis, DoubleRange range, Size availableSize, object interval) { if (interval == null) { return(Math.Max(1d, Math.Floor(range.Delta / axis.GetActualDesiredIntervalsCount(availableSize)))); } #if NETFX_CORE return(Convert.ToDouble(interval)); #else return(((double?)interval).Value); #endif }
/// <summary> /// Calculates nice interval /// </summary> /// <param name="axis"></param> /// <param name="actualRange"></param> /// <param name="availableSize"></param> /// <returns></returns> internal static double CalculateNiceInterval(ChartAxis axis, DoubleRange actualRange, Size availableSize) { double delta = actualRange.Delta; double actualDesiredIntervalsCount = axis.GetActualDesiredIntervalsCount(availableSize); double niceInterval = delta; double minInterval = Math.Pow(10, Math.Floor(Math.Log10(niceInterval))); foreach (int mul in ChartAxis.c_intervalDivs) { double currentInterval = minInterval * mul; if (actualDesiredIntervalsCount < (delta / currentInterval)) { break; } niceInterval = currentInterval; } return(niceInterval >= 1 ? niceInterval : 1); }