Уберите углы при рисовании толстых линий - PullRequest
1 голос
/ 01 июля 2010

Результат:

альтернативный текст http://lh4.ggpht.com/_1TPOP7DzY1E/TCyG2pVxi2I/AAAAAAAADSM/TTqZZxh5LR8/s800/Capture4.gif

Вопрос:

Можно ли округлить или сделать что-нибудь с этой строкой "приложение"?

Код:

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Point[] points1 = new Point[] {
            new Point(50, 90),
            new Point(60, 20),
            new Point(70, 120)
        };

        GraphicsPath path1 = new GraphicsPath();
        path1.AddLines(points1);

        ControlPaint.DrawGrid(e.Graphics, this.ClientRectangle,
            new Size(10, 10), Color.Red);

        using (Pen p = Pens.DarkBlue.Clone() as Pen)
        {
            p.Width = 5;
            e.Graphics.DrawPath(p, path1);
            e.Graphics.DrawString("Width: " + p.Width, 
                new Font(this.Font, FontStyle.Bold), 
                Brushes.DarkBlue, new Point(35, 150));

            Matrix m = new Matrix();
            m.Translate(50, 0);
            e.Graphics.Transform = m;

            p.Width = 1;
            e.Graphics.DrawPath(p, path1);
            e.Graphics.DrawLine(Pens.Red, -40, 20, 150, 20);
            e.Graphics.DrawString("Width: " + p.Width, 
                this.Font, Brushes.DarkBlue, new Point(35, 150));
        }
    }

1 Ответ

4 голосов
/ 01 июля 2010

Просто измените Pen.LineJoin на LineJoin.Round. Вы также можете опустить Pen.MiterLimit, чтобы обрезать очень длинные углы.

...