2013-05-21 48 views
0

我想在繪製事件中使用它的圖形對象在Winforms面板上繪製多行。我實際上正在繪製連接給定點的許多行。所以,首先我這樣做,使用DrawLine和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

正如你所看到的畫線與尖銳件具有延伸一點點轉彎,這不是預期的。所以,我把劃線代碼改爲,

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

我剛剛有同樣的問題(在我的研究期間偶然發現了這個問題),但我現在已經找到了解決方案。

該問題是由使用的筆上的LineJoin屬性造成的。這個DevX頁面解釋了不同的LineJoin類型(參見圖1中的插圖)。 Mitre似乎是默認的類型,當你有尖銳的角度時會導致「超調」。

我解決我的問題由LineJoin屬性設置爲倒角:

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

現在DrawLines不再衝過點。