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