2014-08-29 2 views
0

현재 캔버스에 XY 데이터를 플롯하고 곡선을 그립니다. 지금까지는 단순하고 얇은 선으로 작업했지만 두께를 늘리면 선이 곡선을 그리는 방식으로 인해 특수 효과가 발생합니다.WPF C# 선 또는 대체로 두꺼운 곡선 그리기

선이 얇을 때 잘 작동하는 멋진 부드러운 선을 보여주는 예제 이미지를 첨부했습니다. 그러나 선이 더 두꺼울 때 당신은 명백하게 문제를 볼 수 있습니다.

  1. 멋진 부드러운 선을 만들기 위해이 끝점을 연결하는 방법이 있습니까?

  2. 그렇지 않은 경우 멋진 선을 만드는 데 유용한 다른 그리기 도구가 있습니까?

캔버스에서 수천 줄의 줄 개체가 아닌 캔버스가 빠르게 복잡해지기 때문에 구현에 만족하지 않습니다. 이것은 이것을하는 끔찍한 방법처럼 보이지만 나는 아직 더 나은 방법을 찾지 못했습니다. 나는 하나의 커브 오브젝트를 생성하는 또 다른 라우트를 사용하는 편이 낫다.

언제나처럼 도움을 주실 수 있습니다.

감사합니다.

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

+1

대신 폴리 라인을 사용해 보셨습니까? 매번 Points 컬렉션에 새 Point를 추가하기 만하면됩니까? – SuperOli

+1

확실히 Polyline을 사용해야하며 선택적으로 [StrokeLineJoin] (http://msdn.microsoft.com/en-us/library/system.windows.shapes.shape.strokelinejoin.aspx) 속성도 설정해야합니다. – Clemens

답변

3

시도는 다음 두 개의 라인을 추가 :

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

또한 현재 Polylne 또는 Path 객체를 사용하여 현재 수행중인 작업을 수행해야합니다. 개인적으로 필자는 항상 StrokeStartLineCap과 StrokeEndLineCap을 PenLineCap.Round로 설정하고 StrokeLineJoin을 PenLineJoin.Round로 설정했습니다.