Exemple #1
0
        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;
        }