Accord.Controls.Chart.Chart_Paint C# (CSharp) Method

Chart_Paint() private method

private Chart_Paint ( object sender, PaintEventArgs e ) : void
sender object
e PaintEventArgs
return void
        private void Chart_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            int clientWidth = ClientRectangle.Width;
            int clientHeight = ClientRectangle.Height;

            // fill with white background
            Brush backgroundBrush = new SolidBrush(BackColor);
            g.FillRectangle(backgroundBrush, 0, 0, clientWidth - 1, clientHeight - 1);
            backgroundBrush.Dispose();

            // draw a black rectangle
            g.DrawRectangle(blackPen, 0, 0, clientWidth - 1, clientHeight - 1);

            // set clipping rectangle
            g.SetClip(new Rectangle(2, 2, clientWidth - 4, clientHeight - 4));

            // check if there are any data series
            if (rangeX.Length != 0)
            {
                double xFactor = (double)(clientWidth - 10) / (rangeX.Length);
                double yFactor = (double)(clientHeight - 10) / ((rangeY.Length != 0) ? rangeY.Length : 1);

                // walk through all data series
                foreach (KeyValuePair<string, DataSeries> kvp in seriesTable)
                {
                    DataSeries series = kvp.Value;
                    // get data of the series
                    double[,] data = series.data;

                    // check for available data
                    if (data == null)
                        continue;

                    // check series type
                    if (series.type == SeriesType.Dots)
                    {
                        // draw dots
                        Brush brush = new SolidBrush(series.color);
                        int width = series.width;
                        int r = width >> 1;

                        // draw all points
                        for (int i = 0, n = data.GetLength(0); i < n; i++)
                        {
                            int x = (int)((data[i, 0] - rangeX.Min) * xFactor);
                            int y = (int)((data[i, 1] - rangeY.Min) * yFactor);

                            x += 5;
                            y = clientHeight - 6 - y;

                            g.FillRectangle(brush, x - r, y - r, width, width);
                        }
                        brush.Dispose();
                    }
                    else if (series.type == SeriesType.ConnectedDots)
                    {
                        // draw dots connected with 1-pixel width line
                        Brush brush = new SolidBrush(series.color);
                        Pen pen = new Pen(series.color, 1);
                        int width = series.width;
                        int r = width >> 1;

                        int x1 = (int)((data[0, 0] - rangeX.Min) * xFactor);
                        int y1 = (int)((data[0, 1] - rangeY.Min) * yFactor);

                        x1 += 5;
                        y1 = clientHeight - 6 - y1;
                        g.FillRectangle(brush, x1 - r, y1 - r, width, width);

                        // draw all lines
                        for (int i = 1, n = data.GetLength(0); i < n; i++)
                        {
                            int x2 = (int)((data[i, 0] - rangeX.Min) * xFactor);
                            int y2 = (int)((data[i, 1] - rangeY.Min) * yFactor);

                            x2 += 5;
                            y2 = clientHeight - 6 - y2;

                            g.FillRectangle(brush, x2 - r, y2 - r, width, width);
                            g.DrawLine(pen, x1, y1, x2, y2);

                            x1 = x2;
                            y1 = y2;
                        }

                        pen.Dispose();
                        brush.Dispose();
                    }
                    else if (series.type == SeriesType.Line)
                    {
                        // draw line
                        Pen pen = new Pen(series.color, series.width);

                        int x1 = (int)((data[0, 0] - rangeX.Min) * xFactor);
                        int y1 = (int)((data[0, 1] - rangeY.Min) * yFactor);

                        x1 += 5;
                        y1 = clientHeight - 6 - y1;

                        // draw all lines
                        for (int i = 1, n = data.GetLength(0); i < n; i++)
                        {
                            int x2 = (int)((data[i, 0] - rangeX.Min) * xFactor);
                            int y2 = (int)((data[i, 1] - rangeY.Min) * yFactor);

                            x2 += 5;
                            y2 = clientHeight - 6 - y2;

                            g.DrawLine(pen, x1, y1, x2, y2);

                            x1 = x2;
                            y1 = y2;
                        }
                        pen.Dispose();
                    }
                }
            }
        }