Beispiel #1
0
        internal void DrawGrid(PanelControl pan)
        {
            var gs = _graphPanel.GetMasterGraph(pan);

            if (gs == null)
            {
                return;
            }

            if (double.IsInfinity(gs.MaxD))
            {
                gs.MaxD = gs.MinD + 100.0;
            }

            if (double.IsNaN(gs.MaxD))
            {
                gs.MaxD = gs.MinD + 100.0;
            }

            var xStep = 50.0;

            while (xStep * pan.XScale < 75)
            {
                xStep = xStep * 2;
            }
            while (xStep * pan.XScale > 150)
            {
                xStep = xStep / 2;
            }

            var val = xStep;
            var cnt = 0;

            if (val <= 0.0)
            {
                val = 1.0;
            }

            if (val < 1.0)
            {
                while (val < 1.0)
                {
                    val *= 10;
                    cnt -= 1;
                }
            }

            if (val > 10)
            {
                while (val > 10)
                {
                    val  = val / 10;
                    cnt += 1;
                }
            }

            if (val > 5.001)
            {
                xStep = 5.0;
            }
            else if (val > 2.001)
            {
                xStep = 2.0;
            }
            else
            {
                xStep = 1.0;
            }

            if (cnt < 0)
            {
                cnt = Math.Abs(cnt);
                for (var i = 0; i < cnt; i++)
                {
                    xStep /= 10.0;
                }
            }
            else
            {
                for (var i = 0; i < cnt; i++)
                {
                    xStep *= 10.0;
                }
            }


            var minValue = gs.MinD;

            var maxValue = (gs.MaxD - minValue) / 10.0;

// ReSharper disable once CompareOfFloatsByEqualityOperator
            if (maxValue == 0.0)
            {
                maxValue = 10.0;
            }

            var yStep = (pan.GPan.Height - 5) / 10.0;

            while (yStep * pan.YScale < 50)
            {
                yStep    = yStep * 2.0;
                maxValue = maxValue * 2.0;
            }

            while (yStep * pan.YScale > 100)
            {
                yStep    = yStep / 2.0;
                maxValue = maxValue / 2.0;
            }

            val = maxValue;
            cnt = 0;

            if (val < 1.0 && val > 0.0)
            {
                while (val < 1.0)
                {
                    val *= 10;
                    cnt -= 1;
                }
            }

            while (val > 10)
            {
                val  = val / 10;
                cnt += 1;
            }

            if (val > 5.001)
            {
                val = 5.0;
            }
            else if (val > 2.001)
            {
                val = 2.0;
            }
            else
            {
                val = 1.0;
            }

            if (cnt < 0)
            {
                cnt = Math.Abs(cnt);
                for (var i = 0; i < cnt; i++)
                {
                    val /= 10.0;
                }
            }
            else
            {
                for (var i = 0; i < cnt; i++)
                {
                    val *= 10.0;
                }
            }

            if (_stepOverride && xStep > 1)
            {
                xStep = 1;
            }

            if (_xStepOverride)
            {
                xStep = 1;
            }

            if (_stepOverride && val > 1)
            {
                val = 1;
            }


            var scl = val / maxValue;

            maxValue = val;
            yStep    = yStep * scl;


            try
            {
                DrawXGrid(pan, xStep);
                yStep = yStep * pan.YScale;
                DrawYGrid(pan, yStep, gs, minValue, maxValue);
            }
// ReSharper disable once EmptyGeneralCatchClause
            catch
            {
            }
        }