public FastMultiChart() { InitializeComponent(); GetXScaleValue = GetXScaleValueDefault; GetYScaleValue = GetYScaleValueDefault; GetXValue = GetXValueDefault; GetYValue = GetYValueDefault; GetXDivisionValue = GetDivisionValueDefault; GetYDivisionValue = GetDivisionValueDefault; GetMinXScaleDivision = GetXMinScaleDivisionDefault; GetMinYScaleDivision = GetYMinScaleDivisionDefault; GetXStringValue = GetXStringValueDefault; GetYStringValue = GetYStringValueDefault; GetXStringScaleValue = GetXStringValueDefault; GetYStringScaleValue = GetYStringValueDefault; var g = new Graph(this); Graphs.Add(g); DoubleBuffered = true; UpdateMinMax(); UpdateScrollBarMinMax(); }
private int FindMinScaleDivision(float scale, int scaleDivisionMinPixel, int scaleDivisionMaxPixel, GetMinScaleDivisionDel getMinScaleDivision, GetScaleValueDel getScaleValue) { if (scale <= 0) { return(-1); } var result = -1; var found = false; var scaleDivisionMin = scaleDivisionMinPixel / scale; var scaleDivisionMax = scaleDivisionMaxPixel < 0 ? Int32.MaxValue - 1 : (int)(scaleDivisionMaxPixel / scale); // некоторые реализации getMinScaleDivision всегда выдают одно и то же значение вне зависимости от увеличения expectedValue // поэтому, если после 1000 итераций решения нет, то поиск прекратить var count = 0; for (var expectedValue = (int)scaleDivisionMin; expectedValue <= scaleDivisionMax; expectedValue++) // !!! шаг маловат для Int32.MaxValue, но равен суткам для DateTime { var divObject = getMinScaleDivision(expectedValue, this); result = getScaleValue(divObject, this); if (result >= scaleDivisionMin && result <= scaleDivisionMax) { found = true; break; } if (count > 1000) { break; } count++; } if (!found) { result = -1; } return(result); }
private int FindMinScaleDivision(float scale, int scaleDivisionMinPixel, int scaleDivisionMaxPixel, GetMinScaleDivisionDel getMinScaleDivision, GetScaleValueDel getScaleValue) { if (scale <= 0) return -1; var result = -1; var found = false; var scaleDivisionMin = scaleDivisionMinPixel / scale; var scaleDivisionMax = scaleDivisionMaxPixel < 0 ? Int32.MaxValue - 1 : (int)(scaleDivisionMaxPixel / scale); // некоторые реализации getMinScaleDivision всегда выдают одно и то же значение вне зависимости от увеличения expectedValue // поэтому, если после 1000 итераций решения нет, то поиск прекратить var count = 0; for (var expectedValue = (int)scaleDivisionMin; expectedValue <= scaleDivisionMax; expectedValue++) // !!! шаг маловат для Int32.MaxValue, но равен суткам для DateTime { var divObject = getMinScaleDivision(expectedValue, this); result = getScaleValue(divObject, this); if (result >= scaleDivisionMin && result <= scaleDivisionMax) { found = true; break; } if (count > 1000) break; count++; } if (!found) result = -1; return result; }