using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics.CodeAnalysis; namespace Microsoft.Research.DynamicDataDisplay.Charts { public sealed class MinorNumericTicksProvider : ITicksProvider { private readonly ITicksProvider parent; private Range[] ranges; internal void SetRanges(IEnumerable> ranges) { this.ranges = ranges.ToArray(); } private double[] coeffs; public double[] Coeffs { get { return coeffs; } set { if (value == null) throw new ArgumentNullException("value"); coeffs = value; Changed.Raise(this); } } internal MinorNumericTicksProvider(ITicksProvider parent) { this.parent = parent; Coeffs = new double[] { 0.3, 0.3, 0.3, 0.3, 0.6, 0.3, 0.3, 0.3, 0.3 }; } #region ITicksProvider Members public event EventHandler Changed; public ITicksInfo GetTicks(Range range, int ticksCount) { if (Coeffs.Length == 0) return new TicksInfo(); var minorTicks = ranges.Select(r => CreateTicks(r)).SelectMany(m => m); var res = new TicksInfo(); res.TickSizes = minorTicks.Select(m => m.Value).ToArray(); res.Ticks = minorTicks.Select(m => m.Tick).ToArray(); return res; } public MinorTickInfo[] CreateTicks(Range range) { double step = (range.Max - range.Min) / (Coeffs.Length + 1); MinorTickInfo[] res = new MinorTickInfo[Coeffs.Length]; for (int i = 0; i < Coeffs.Length; i++) { res[i] = new MinorTickInfo(Coeffs[i], range.Min + step * (i + 1)); } return res; } public int DecreaseTickCount(int ticksCount) { return ticksCount; } public int IncreaseTickCount(int ticksCount) { return ticksCount; } public ITicksProvider MinorProvider { get { return null; } } public ITicksProvider MajorProvider { get { return parent; } } #endregion } }