c # drawing target chart example

  public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => {
                Form form = new Form();
                form.StartPosition = FormStartPosition.CenterScreen;
                form.Width = 500;
                form.Height = 500;
                Button button = new Button();
                form.Controls.Add(button);
                button.Location = new Point(0, 0);
                button.Width = 50;
                button.Height = 20;
                button.Click += new EventHandler(button_Test_Click);
                form.ShowDialog();
                //或
                //Application.Run(form)
               // the Application.DoEvents (); wake-up form
                //form.Show ();
            });

          
        }
         private void button_Test_Click(object sender, EventArgs e)
        {
            Thread.Sleep(10000);
        }

        Bitmap bit=new Bitmap(800,500);
         private void button2_Click(object sender, EventArgs e)
         {
             SetParameter(this.pictureBox1, bit, 20, 400, 250);
             DrawPosition(60, 60);
         }

        public void DrawPosition(int x,int y)
         {
            BufferedGraphicsContext current=BufferedGraphicsManager.Current;
            BufferedGraphics bg;
            bg=current.Allocate(_PictureBOx.CreateGraphics(),_PictureBOx.DisplayRectangle);
            Graphics g=bg.Graphics;
            g.FillRectangle(Brushes.Black, new Rectangle(0, 0, _PictureBOx.Width, _PictureBOx.Height));
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            //标准坐标图
            Pen pen=new Pen(Color.Red,1);
            g.DrawLine(pen, new Point(GetX(0), GetY(_CenterY)), new Point(GetX(_bitMap.Width), GetY(_CenterY)));
            for (int i = 0; i < 10;i++ )//横线
            {
                g.DrawLine(pen ,new Point(GetX(i*_CenterX/10+_CenterX),GetY(_CenterY)),new Point(GetX(i*_CenterX/10+_CenterX),GetY(_CenterY)-5));
                g.DrawLine(pen, new Point(GetX(_CenterX-i * _CenterX / 10), GetY(_CenterY)), new Point(GetX(_CenterX - i * _CenterX / 10), GetY(_CenterY) - 5));
            }

            g.DrawLine(pen, new Point(GetX(_CenterX), GetY(0)), new Point(GetX(_CenterX), GetY(_bitMap.Height)));

            for (int i = 0; i < 10; i++)//纵线
            {
                g.DrawLine(pen, new Point(GetX(_CenterX), GetY(_CenterY + i * _CenterY / 10)), new Point(GetX(_CenterX) + 5, GetY(_CenterY+i * _CenterY / 10)));
                g.DrawLine(pen, new Point(GetX(_CenterX), GetY(_CenterY - i * _CenterY / 10)), new Point(GetX(_CenterX) + 5, GetY(_CenterY - i * _CenterY / 10)));
            }


            int elliValue = _CenterX / 4;
            int pad = 29;
            int  coefficient = 0;
            for(int i=0;i<3;i++)//圆
            {
                coefficient = Convert.ToInt32(pad / 2*i);
                g.DrawEllipse(pen, new Rectangle(GetX(_CenterX - elliValue * i) + coefficient, GetY(_CenterY - elliValue * i) + coefficient, elliValue * i - coefficient, elliValue * i - coefficient));
            }

            int tempWidth = 3;
            int tempOffset = 25;
            g.DrawLine (pen, new Point (GetX (_CenterX) - tempWidth, Tide (_CenterY) - tempWidth), new Point (GetX (_CenterX) - tempWidth, Tide (_CenterY) - tempOffset)); //纵上左
            g. DrawLine (pen, new Point (GetX (_CenterX) - tempWidth, tide (_CenterY) + tempWidth), new Point (GetX (_CenterX) - tempWidth, tide (_CenterY) + tempOffset)); //纵下左
            g.DrawLine ( pen, new Point (GetX (_CenterX) + tempWidth, tide (_CenterY) - tempWidth), new Point (GetX (_CenterX) + tempWidth, tide (_CenterY) - tempOffset)); //纵上右
            g.DrawLine (pen, new Point (GetX (_CenterX) + tempWidth, tide (_CenterY) + tempWidth), new Point (GetX (_CenterX) + tempWidth, tide (_CenterY) + tempOffset)); //纵下右

            g.DrawLine (pen, new Point (GetX (_CenterX) - tempWidth, Tide (_CenterY) - tempWidth), new Point (GetX (_CenterX) - tempOffset, Tide (_CenterY) - tempWidth)); //横上左
            g. DrawLine (pen, new Point (GetX (_CenterX) - tempWidth, tide (_CenterY) + tempWidth), new Point (GetX (_CenterX) - tempOffset, tide (_CenterY) + tempWidth)); //横下左
            g.DrawLine ( pen, new Point (GetX (_CenterX) + tempWidth, tide (_CenterY) - tempWidth), new Point (GetX (_CenterX) + tempOffset, tide (_CenterY) - tempWidth)); //横上右
            g.DrawLine (pen, new Point (GetX (_CenterX) + tempWidth, tide (_CenterY) + tempWidth), new Point (GetX (_CenterX) + tempOffset, tide (_CenterY) + tempWidth)); //横下右
           //实时中心
            Pen Pen 2 = new pen (Color.Green, 1);
            g.DrawEllipse(pen2, new Rectangle(GetX(x) - 5, GetY(y) - 5, 10, 10));//画中心点
            g.FillEllipse(Brushes.Green , new Rectangle(GetX(x) - 5, GetY(y) - 5, 10, 10));
            g.DrawLine(pen2, new Point(GetX(x), GetY(y) - 20), new Point(GetX(x),GetY(y)+20));
            g.DrawLine(pen2, new Point(GetX(x)-20, GetY(y) ), new Point(GetX(x)+20, GetY(y)));
            bg.Render();
            bg.Dispose();
        
        }
        int _Margin=20;
        int _CenterX=400;
        int _CenterY=250;
        PictureBox _PictureBOx;
        Bitmap _bitMap;
        public void SetParameter(PictureBox pictureBOx,Bitmap bitmap,int margin, int centerX, int centerY)
        {
            _Margin = margin;
            _CenterX = centerX;
            _CenterY = centerY;
            _PictureBOx = pictureBOx;
            _bitMap = bitmap;
        }
        public int GetX(double x)
        {
            x = (x / _bitMap.Width) * (_PictureBOx.Width - 2 * _Margin) + _Margin;
            return Convert.ToInt32(x);

        }
        public int GetY(double y)
        {
            y = (y / _bitMap.Height) * (_PictureBOx.Height - 2 * _Margin) + _Margin;
            return Convert.ToInt32(y);

        }

        private void button3_Click(object sender, EventArgs e)
        {
            DrawPosition(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
        }

    }

Published 164 original articles · won praise 264 · Views 1.07 million +

Guess you like

Origin blog.csdn.net/u011555996/article/details/103941131