2013-05-21 3 views
0

페인트 이벤트의 그래픽 개체를 사용하여 winforms 패널에 여러 줄을 그리려고합니다. 실제로 주어진 지점에 합류하는 여러 줄을 그리는 중입니다. 그래서, 우선 내가 이런 짓을, 아래 그림과 같은 결과를 생성 DrawLines 및 DrawLine을 사용하여 여러 줄을 그리면 다른 결과가 나타납니다.

private void panel1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawLines(new Pen(new SolidBrush(Color.Crimson), 3), PointFs.ToArray()); 
     float width = 10; 
     float height = 10; 
     var circleBrush = new SolidBrush(Color.Crimson); 
     foreach (var point in PointFs) 
     { 
      float rectangleX = point.X - width/2; 
      float rectangleY = point.Y - height/2; 
      var r = new RectangleF(rectangleX, rectangleY, width, height); 

      e.Graphics.FillEllipse(circleBrush, r); 
     } 
    } 

,

enter image description here

당신이 선 날카로운에서 확장의 약간을 갖는 그려 볼 수 있듯이 턴이 예상되지 않습니다. 그래서 drawlines 코드를

var pen = new Pen(new SolidBrush(Color.Crimson), 3); 
for (int i = 1; i < PointFs.Count; i++) 
{ 
    e.Graphics.DrawLine(pen, PointFs[i - 1], PointFs[i]); 
} 

으로 변경했습니다. 이제 그림이 잘 작동합니다.

enter image description here

사람은 두 가지 접근 방식의 차이를 말할 수 있습니까?

답변

1

나는 (내 연구 중에이 질문에 비틀 거리며) 똑같은 문제가 있었지만 지금은 해결책을 찾았습니다.

이 문제는 사용한 Pen의 LineJoin 속성으로 인해 발생합니다. 이 DevX 페이지에서는 다양한 LineJoin 유형에 대해 설명합니다 (그림 1 참조). Miter가 기본 유형 인 것처럼 보이며, 이는 뾰족한 각도가있을 때 "오버 슛"을 유발합니다.

나는 경사에 LineJoin 속성을 설정하여 내 문제를 해결하지 :

var pen = new Pen(new SolidBrush(Color.Crimson), 3); 
pen.LineJoin = Drawing2D.LineJoin.Bevel; 

이제 DrawLines가 더 이상 포인트를 오버 슈트.

관련 문제