示例#1
0
        private void DrawFram(Painter painter, ChartData data, ChartType chartType)
        {
            DrawLegend(painter, data.ReadColumnName().ToArray());

            if (chartType != ChartType.Pie)
            {
                //Draw axis's points
                ChartPoint[]   axisPoint      = new ChartPoint[2];
                PaintArguments paintArguments = new PaintArguments(painter, data, chartMargin);

                float tmpX = paintArguments.AxisXLocation;
                float tmpY = painter.Height - paintArguments.AxisYLocation;
                //X axis
                axisPoint[0] = new ChartPoint(tmpX, tmpY);
                axisPoint[1] = new ChartPoint(tmpX + paintArguments.AxisWidth + 20, tmpY);
                DrawAxis(painter, axisPoint);

                //Y axis
                axisPoint[0] = new ChartPoint(tmpX, tmpY);
                axisPoint[1] = new ChartPoint(tmpX, tmpY - paintArguments.AxisHeight - 10);
                DrawAxis(painter, axisPoint);

                DrawHorizontalGrid(painter, data);
                if (chartType == ChartType.Line || chartType == ChartType.Curve)
                {
                    DrawVerticalGrid(painter, data);
                }
            }
        }
示例#2
0
        protected override void DrawCore(Painter painter, ChartData data)
        {
            base.DrawCore(painter, data);
            if (data != null)
            {
                PaintArguments paintArguments = new PaintArguments(painter, data, ChartMargin);
                int            start          = paintArguments.AxisXLocation;

                try
                {
                    float tmpY     = painter.Height - paintArguments.AxisYLocation;
                    int   interval = CalculateInterval(painter, data);
                    float ratio    = paintArguments.Ratio;
                    foreach (DataSeries dataSeries in data.Series)
                    {
                        painter.DrawString(dataSeries.Name, Style, new ChartPoint(start + interval, tmpY + 2));

                        foreach (DataPoint dataPoint in dataSeries.Point)
                        {
                            start += interval;

                            if (dataPoint.IsValid == true)
                            {
                                ChartPoint[] rectPoint = new ChartPoint[4];
                                float        y         = dataPoint.Value / ratio;
                                rectPoint[0]       = new ChartPoint(start, tmpY - 1);
                                rectPoint[1]       = new ChartPoint(start, tmpY - y);
                                rectPoint[2]       = new ChartPoint(start + interval, tmpY - y);
                                rectPoint[3]       = new ChartPoint(start + interval, tmpY - 1);
                                Style.CurrentColor = Style.ColorList[dataSeries.Point.IndexOf(dataPoint)];
                                painter.DrawPolygon(Style, rectPoint);

                                if (interval > 10)
                                {
                                    painter.DrawString(dataPoint.Value.ToString(), Style, new ChartPoint(start, tmpY - y - 15));
                                }
                            }
                        }
                        start += interval;
                    }
                }
                catch (IndexOutOfRangeException exception)
                {
                    exception.Source = "Check the Painter whether is error./n Check the data source whether is error.";
                    throw exception;
                }
            }
        }
示例#3
0
        private void DrawVerticalGrid(Painter painter, ChartData data)
        {
            PaintArguments paintArguments = new PaintArguments(painter, null, chartMargin);

            foreach (DataSeries dataSeries in data.Series)
            {
                int          x          = paintArguments.AxisXLocation + (data.Series.IndexOf(dataSeries)) * CalculateInterval(painter, data);
                ChartPoint[] yLinePoint = new ChartPoint[2];
                foreach (DataPoint dataPoint in dataSeries.Point)
                {
                    yLinePoint[0] = new ChartPoint(x, painter.Height - paintArguments.AxisYLocation);
                    yLinePoint[1] = new ChartPoint(x, painter.Height - paintArguments.AxisYLocation - paintArguments.AxisHeight);
                }
                painter.DrawLine(style, yLinePoint, LineType.DotLine);
            }
        }
示例#4
0
        private void DrawHorizontalGrid(Painter painter, ChartData data)
        {
            PaintArguments paintArguments = new PaintArguments(painter, data, chartMargin);
            float          value          = data.CalculateMaxValue();
            float          height         = 20 / paintArguments.Ratio;

            ChartPoint[] points = new ChartPoint[2];
            ChartPoint   point  = new ChartPoint();

            float tmpX = paintArguments.AxisXLocation;

            if (value < height)
            {
                //Data max value is too small, so the offset is small
                for (int i = 0; i < value; i++)
                {
                    float tmpY = painter.Height - i / paintArguments.Ratio - paintArguments.AxisYLocation;
                    //One line-one string
                    points[0] = new ChartPoint(tmpX, tmpY);
                    points[1] = new ChartPoint(tmpX + paintArguments.AxisWidth, tmpY);
                    painter.DrawLine(style, points, LineType.DotLine);
                    point = new ChartPoint(tmpX - 30, tmpY - 2);
                    painter.DrawString(i.ToString(), style, point);
                }
            }
            else
            {
                float tmp = painter.Height - paintArguments.AxisYLocation;
                //Normal offset
                for (int i = 0; i < paintArguments.AxisHeight / height; i++)
                {
                    float tmpY = tmp - i * height;
                    points[0] = new ChartPoint(tmpX, tmpY);
                    points[1] = new ChartPoint(tmpX + paintArguments.AxisWidth, tmpY);
                    painter.DrawLine(style, points, LineType.DotLine);
                    point = new ChartPoint(tmpX - 30, tmpY - 2);
                    painter.DrawString(((int)(i * height * paintArguments.Ratio)).ToString(), style, point);
                }
            }
        }
示例#5
0
        protected ChartPoint[][] ChangeDataToPoints(ChartData data, Painter painter)
        {
            int            x;
            PaintArguments paintArguments = new PaintArguments(painter, data, chartMargin);

            ChartPoint[][] point = new ChartPoint[data.CalculateRowCount()][];

            foreach (DataSeries dataSeries in data.Series)
            {
                point[data.Series.IndexOf(dataSeries)] = new ChartPoint[dataSeries.Point.Count];
                x = paintArguments.AxisXLocation + data.Series.IndexOf(dataSeries) * CalculateInterval(painter, data);

                foreach (DataPoint dataPoint in dataSeries.Point)
                {
                    float y = dataPoint.Value / paintArguments.Ratio;
                    if (dataPoint.IsValid == true)
                    {
                        point[data.Series.IndexOf(dataSeries)][dataSeries.Point.IndexOf(dataPoint)] =
                            new ChartPoint(x, (int)(painter.Height - y - paintArguments.AxisYLocation));
                    }
                }
            }
            return(point);
        }
示例#6
0
        private void DrawLegend(Painter painter, string[] legends)
        {
            //Four points to draw rectangle
            ChartPoint[]   rectanglePoint = new ChartPoint[4];
            ChartPoint     labelPoint;
            PaintArguments paintArguments = new PaintArguments(painter, null, chartMargin);
            float          tmpX           = paintArguments.AxisXLocation + paintArguments.AxisWidth + 15;

            for (int i = 0; i < legends.Length; i++)
            {
                //Set four points to draw legend rectangle
                float tmpY = painter.Height - paintArguments.AxisYLocation - paintArguments.AxisHeight + i * 10;
                rectanglePoint[0]  = new ChartPoint(tmpX, tmpY);
                rectanglePoint[1]  = new ChartPoint(tmpX + 6, tmpY);
                rectanglePoint[2]  = new ChartPoint(tmpX + 6, tmpY + 5);
                rectanglePoint[3]  = new ChartPoint(tmpX, tmpY + 5);
                style.CurrentColor = style.ColorList[i];
                painter.DrawPolygon(style, rectanglePoint);

                //Set point to draw legend string
                labelPoint = new ChartPoint(tmpX + 8, tmpY - 5);
                painter.DrawString(legends[i], style, labelPoint);
            }
        }