2014-08-29 105 views
0

我目前將XY數據繪製在畫布上並用它繪製曲線。到目前爲止,它很簡單,適用於細線,但是當我增加厚度時,由於如何繪製線條以形成曲線,會出現奇特的效果。WPF c#使用線條或替代方法繪製粗曲線

我附上了一個示例圖像,它顯示了一條很好的平滑線條,當線條很細時,效果很好。但是當線條較粗時,您顯然可以看到問題。

  1. 有沒有辦法將這些端點連接起來製作出一個很好的流暢線條?

  2. 如果沒有,是否有另一個繪圖工具可用於創建漂亮的線條?

我對實現不滿意,因爲很快,canvas上的數百甚至數千行對象變得混亂。這似乎是一個可怕的方式,但我還沒有找到更好的方法。我寧願選擇另一條創建單個曲線對象的路線。

任何幫助一如既往的讚賞。

謝謝!

Point previousPoint; 

    public void DrawLineToBox(DrawLineAction theDrawAction, Point drawPoint) 
    { 
     Line myLine = new Line(); 

     myLine.Stroke = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)); 
     myLine.StrokeThickness = 29; 

     if(theDrawAction == DrawLineAction.KeepDrawing) 
     { 
      myLine.X1 = previousPoint.X;  //draw from this point 
      myLine.Y1 = previousPoint.Y; 
     } 
     else if(theDrawAction == DrawLineAction.StartDrawing) 
     { 
      myLine.X1 = drawPoint.X;   //draw from same point 
      myLine.Y1 = drawPoint.Y; 
     } 

     myLine.X2 = drawPoint.X;    //draw to this point 
     myLine.Y2 = drawPoint.Y; 

     canvasToDrawOn.Children.Add(myLine); //add to canvas 

     previousPoint.X = drawPoint.X;   //set current point as last point 
     previousPoint.Y = drawPoint.Y; 


    } 

enter image description here

+1

我認爲將位置追加到Path對象會更好 - 它被渲染爲一個連續的對象並支持筆劃厚度。 – kidshaw 2014-08-29 19:44:16

+1

您是否嘗試過使用折線?每次只需在Points集合中添加一個新的Point? – SuperOli 2014-08-29 19:53:36

+1

您應該肯定使用Polyline,並且還可以設置其[StrokeLineJoin](http://msdn.microsoft.com/zh-cn/library/system.windows.shapes.shapes.shape.strokelinejoin.aspx)屬性。 – Clemens 2014-08-30 05:48:32

回答

3

嘗試添加以下兩行:

myLine.StrokeStartLineCap = PenLineCap.Round;
myLine.StrokeEndLineCap = PenLineCap.Round;

此外,你真的應該使用Polylne或Path對象來做你現在正在做的事情。就我個人而言,我總是將StrokeStartLineCap和StrokeEndLineCap設置爲PenLineCap.Round並將StrokeLineJoin設置爲我使用的Polyline對象的PenLineJoin.Round。