Esempio n. 1
0
        internal bool draw()
        {
            Font  font        = gdef.smallFont;
            Color gridColor   = gdef.colors[COLOR_GRID];
            Color mGridColor  = gdef.colors[COLOR_MGRID];
            Color fontColor   = gdef.colors[COLOR_FONT];
            int   fontHeight  = (int)Math.Ceiling(rrdGraph.getSmallFontHeight());
            int   labelOffset = (int)(worker.getFontAscent(font) / 2);

            double pixpex = (double)im.ysize / (Math.Log10(im.maxval) - Math.Log10(im.minval));

            if (Double.IsNaN(pixpex))
            {
                return(false);
            }
            double minstep, pixperstep;
            int    minoridx = 0, majoridx = 0;

            for (int i = 0; yloglab[i][0] > 0; i++)
            {
                minstep = Math.Log10(yloglab[i][0]);
                for (int ii = 1; yloglab[i][ii + 1] > 0; ii++)
                {
                    if (yloglab[i][ii + 2] == 0)
                    {
                        minstep = Math.Log10(yloglab[i][ii + 1]) - Math.Log10(yloglab[i][ii]);
                        break;
                    }
                }
                pixperstep = pixpex * minstep;
                if (pixperstep > 5)
                {
                    minoridx = i;
                }
                if (pixperstep > 2 * fontHeight)
                {
                    majoridx = i;
                }
            }
            int x0 = im.xorigin, x1 = x0 + im.xsize;

            for (double value = Math.Pow(10, Math.Log10(im.minval)
                                         - Math.Log10(im.minval) % Math.Log10(yloglab[minoridx][0]));
                 value <= im.maxval;
                 value *= yloglab[minoridx][0])
            {
                if (value < im.minval)
                {
                    continue;
                }
                int i = 0;
                while (yloglab[minoridx][++i] > 0)
                {
                    int y = rrdGraph.mapper.ytr(value * yloglab[minoridx][i]);
                    if (y <= im.yorigin - im.ysize)
                    {
                        break;
                    }
                    worker.drawLine(x0 - 1, y, x0 + 1, y, gridColor, TICK_STROKE);
                    worker.drawLine(x1 - 1, y, x1 + 1, y, gridColor, TICK_STROKE);
                    worker.drawLine(x0, y, x1, y, gridColor, GRID_STROKE);
                }
            }
            for (double value = Math.Pow(10, Math.Log10(im.minval)
                                         - (Math.Log10(im.minval) % Math.Log10(yloglab[majoridx][0])));
                 value <= im.maxval;
                 value *= yloglab[majoridx][0])
            {
                if (value < im.minval)
                {
                    continue;
                }
                int i = 0;
                while (yloglab[majoridx][++i] > 0)
                {
                    int y = rrdGraph.mapper.ytr(value * yloglab[majoridx][i]);
                    if (y <= im.yorigin - im.ysize)
                    {
                        break;
                    }
                    worker.drawLine(x0 - 2, y, x0 + 2, y, mGridColor, TICK_STROKE);
                    worker.drawLine(x1 - 2, y, x1 + 2, y, mGridColor, TICK_STROKE);
                    worker.drawLine(x0, y, x1, y, mGridColor, GRID_STROKE);
                    String graph_label = string.Format("{0,3:E0}", value * yloglab[majoridx][i]);
                    int    length      = (int)(worker.getStringWidth(graph_label, font));
                    worker.drawString(graph_label, x0 - length - PADDING_VLABEL, y + labelOffset, font, fontColor);
                }
            }
            return(true);
        }