Пример #1
0
        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();
        }
Пример #2
0
        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();
        }
Пример #3
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);
        }
Пример #4
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;
 }