2009-06-11 4 views
1

다음 코드로 이상한 버그를보고 있습니다.WPF 버그 또는 나는 미쳐 가고 있습니까?

는 내가 그것에 LineSegment의를 추가 할 수 있도록 PathGeometry가있는 나는 PathFigure을 추가해야합니다.

_pathGeometry.Figures.Add(_pathFigure); 
_pathFigure.StartPoint = new Point(4, 0); 
LineSegment lineSegment1 = new LineSegment(new Point(4, -10), true); 
LineSegment lineSegment2 = new LineSegment(new Point(4, 0), true); 
_pathFigure.Segments.Add(lineSegment1); 
_pathFigure.Segments.Add(lineSegment2); 

나는 다음을 그릴 :

using (DrawingContext drawingContext = RenderOpen()) 
    drawingContext.DrawGeometry(null, _pen, _pathGeometry); 

내가 볼 수 무엇 :

WPF는 수직 선을 그어야한다

내가 할 것입니다 그 값은 0에서 -10까지이며 0으로 되돌아갑니다. 마지막 부분 (bac k = 0)은 동일한 x 픽셀에 그려 지므로 볼 수 없습니다. 하지만 마지막 부분은 다음과 같은 원인 :

WPF는 0에서 -15로가는 선을 그립니다 : 내가 볼 무엇

. 나에게 의미가 없다. 이 5 픽셀의 차이는 이전 예제에서와 같이 수직선을 다른 수직선 위에 그릴 때마다 발생합니다.

누군가 제가 실수를했으며 WPF 버그가 아니라고 알려 주시기 바랍니다.

+0

x 값도 변경하면 어떻게됩니까? – ChrisF

+0

같은 x 값을 사용해야하기 때문에 문제가되지 않습니다. 그 이유는 라인이 어디서 끝날 지 모르는 변화하는 라인입니다. –

+0

Btw, x 값을 변경하면 올바르게 그립니다. 이 시점에서 같은 픽셀에 있어야한다는 것입니다. –

답변

5

WPF가 경로의 "모서리"를 렌더링하는 방법과 관련이 있다고 생각합니다. 두 선분 사이의 각도가 더 가파르게 작을수록 모서리 렌더링이 더욱 분명 해집니다.

귀하의 경우, 가장 문제가되는 0도 각도 (다시 접힌 선분)가 있습니다.

모두가 손실되지는 않습니다 - 거기에 몇 가지 가능한 솔루션 :

  • 분할 (당신의 해결 방법입니다)이 PathFigures에 PathFigure. 이렇게하면 모서리 및 따라서 문제가 제거됩니다.
  • 경로의 StrokeLineJoin 속성을 Mitre (기본값) 대신 Bevel로 설정합니다. 이것은 베벨 모서리 모양입니다.
  • 경로의 StrokeMiterLimit를 내립니다. 이것은 과학자들이 말하듯이 모서리를 덜 뾰족하게 만듭니다.
  • LineSegment에 "구석"을 명시 적으로 제거하도록 지시하십시오.IsSmoothJoin 속성을 true로 설정하여이 작업을 수행 할 수 있습니다.

StrokeLineJoin에 대한 자세한 내용은 here을 참조하십시오. WPF에서 Mitter 된 모서리를 렌더링하는 방법에 대한 흥미로운 게시물은 here을 참조하십시오.

+0

해결 방법은 정상입니다. 모든 솔루션에 감사드립니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있는지 배우는 것은 매우 흥미 롭습니다. –

0

GraphicsPath과 같은 경우 끝점을 설정해야합니다.

+0

마지막 LineSegment는 항상 종점입니다. –

0

좋아,이 문제에 대한 해결책을 직접 찾았습니다. WPF 버그 인 것 같습니다. 내가하지 않으면 나는이 버그를 볼 이유는 누군가가 설명 할 수 있다면

PathFigure pathFigure1 = new PathFigure(); 
pathFigure1.StartPoint = new Point(4, 0); 
LineSegment lineSegment1 = new LineSegment(new Point(4, -10), true); 
pathFigure1.Segments.Add(lineSegment1); 

PathFigure pathFigure2 = new PathFigure(); 
pathFigure2.StartPoint = new Point(4, -10); 
LineSegment lineSegment2 = new LineSegment(new Point(4, 0), true); 
pathFigure2.Segments.Add(lineSegment2); 

pathGeometry.Figures.Add(pathFigure1); 
pathGeometry.Figures.Add(pathFigure2); 

나는 여전히 감사 할 것입니다 :

은이 이상한 행동을 볼 개별 PathFigure들에 LineSegment의를 추가해야 이런 식으로 또는 누군가가 이것이 버그라는 것을 확인할 수 있다면.

관련 문제