AForge.Controls.Chart.Chart_Paint C# (CSharp) Метод

Chart_Paint() приватный Метод

private Chart_Paint ( object sender, PaintEventArgs e ) : void
sender object
e PaintEventArgs
Результат 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( );
                    }
                }
            }
        }