private void timer1_Tick(object sender, EventArgs e) { dc.UpdateDrag(); UpdateNearest(); gr.Clear(Color.White); gr.DrawLine(Pens.Red, dc.Transform(new PointF(0, 0)), dc.Transform(new PointF(500, 0))); gr.DrawLine(Pens.Green, dc.Transform(new PointF(0, 0)), dc.Transform(new PointF(0, 500))); Pen p = new Pen(Color.Gray); p.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot; p.DashPattern = new float[] { 4, 2, 2, 4 }; gr.DrawLine(p, dc.Transform(-2000, 100), dc.Transform(2000, 100)); gr.DrawLine(p, dc.Transform(-2000, 0), dc.Transform(2000, 0)); for (int i = -10; i < 10; i++) { var x1 = (float)(i * Math.PI * 2 * xxScale); gr.DrawLine(p, dc.Transform(x1, 100), dc.Transform(x1, 0)); } int w1 = 4; int w2 = 2; var temp1 = new List <ProjectPolygon>(); temp1.AddRange(polygons); if (addPolygonMode) { temp1.Add(new ProjectPolygon() { Points = newPolygonPoints.Select(z => new Vector2d(z.X, z.Y)).ToList() }); } foreach (var polygon in temp1) { for (int i = 0; i < polygon.Points.Count; i++) { Vector2d item = (Vector2d)polygon.Points[i]; var tr = dc.Transform(item.X, item.Y); gr.FillRectangle((sp == polygon && i == sindex) ? Brushes.Red : Brushes.Blue, tr.X - w1, tr.Y - w1, w1 * 2, w1 * 2); gr.FillRectangle(Brushes.LightBlue, tr.X - w2, tr.Y - w2, w2 * 2, w2 * 2); } if (polygon.Points.Count > 2) { var pp = polygon.Points.Select(z => { var t = dc.Transform(z.X, z.Y); return(new PointF(t.X, t.Y)); }).ToArray(); gr.FillPolygon(new SolidBrush(Color.FromArgb(64, Color.LightGreen)), pp); Pen p2 = new Pen(Color.Blue, 1); p2.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; p2.DashPattern = new float[] { 10, 5 }; Pen p3 = new Pen(Color.Black); p3.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; p3.DashPattern = new float[] { 5, 10 }; gr.DrawPolygon(p2, pp); //gr.DrawPolygon(p3, pp); } } var pos = pictureBox1.PointToClient(Cursor.Position); var back = dc.BackTransform(pos); gr.FillRectangle(new SolidBrush(Color.FromArgb(64, Color.LightBlue)), 0, 0, 150, 60); gr.DrawString("Projection mode: Cylinder", SystemFonts.DefaultFont, Brushes.Black, 0, 0); var ang = ((back.X / xxScale) * 180 / Math.PI) % 360; gr.DrawString($"X: {back.X}", SystemFonts.DefaultFont, Brushes.Black, 0, 15); gr.DrawString($"Y: {back.Y}", SystemFonts.DefaultFont, Brushes.Black, 0, 30); gr.DrawString($"Angle: {ang:N2}°", SystemFonts.DefaultFont, Brushes.Black, 0, 45); pictureBox1.Image = bmp; }