.NET WinForms에서 폴리 라인을 그리기 위해 SharpDX를 사용하고 있습니다. 이 폴리선은 판금 프로파일을 나타냅니다.PathGeometry.Widen()을 사용할 때 StrokeStyle이있는 불필요한 End-Caps
가' update m_fillTransformedGeometry based on m_pathGeometry & the current transform matrix3x2,
m_fillTransformedGeometry = New TransformedGeometry(D2DCanvas.canvas_factory2D, m_pathGeometry, Matrix3x2.Rotation(m_rotation, InsertPoint) * _transformMatrix)
' to draw the polyline
D2DCanvas.canvas_renderTarget2D.DrawGeometry(m_fillTransformedGeometry, m_fillBrush, plaatdikte * _transformMatrix.ScaleVector(1), m_strokeStyle)
폴리 라인 가져 : I은 A가 (계정 변환에 & 규모를 취할) 변환을 적용 스크리닝 그려지 전에
'reset m_pathGeometry (the core geometry of this sheetmetal profile)
m_pathGeometry = New PathGeometry(D2DCanvas.canvas_factory2D)
' pointsRef = collection of points showing the segments & bends in this sheetmetal profile
Dim pointsRef As List(Of Vector2) = calculateSegmentsPoints()
' Add lines to m_pathGeometry using our points collection
Using sink As SimplifiedGeometrySink = m_pathGeometry.Open()
sink.BeginFigure(pointsRef.First(), FigureBegin.Filled)
sink.AddLines(pointsRef.ToArray)
sink.EndFigure(FigureEnd.Open)
sink.Close()
End Using
:
PathGeometry 객체는 폴리 라인을 정의 구성된다 스트로크 스타일, 둥근 라인 조인 및 플랫 엔드 캡으로 그려 짐
With m_strokeStyleProps
.LineJoin = LineJoin.Round
.EndCap = CapStyle.Flat
.StartCap = CapStyle.Flat
End With
' First draw a wider stroke
D2DCanvas.canvas_renderTarget2D.DrawGeometry(m_fillTransformedGeometry, m_strokeBrush, (plaatdikte + 0.2) * _transformMatrix.ScaleVector(1), m_strokeStyle)
' Then draw the fill
D2DCanvas.canvas_renderTarget2D.DrawGeometry(m_fillTransformedGeometry, m_fillBrush, plaatdikte * _transformMatrix.ScaleVector(1), m_strokeStyle)
: 약간 넓은 StrokeWidth와 함께, 어두운 색으로 동일한 폴리 라인을 그릴
먼저 생각 하였다결과는 스트로크를 사용할 수 약간 옅은 결과는 좋지만 엔드 캡은 다음과 같이 획을 긋지 않습니다.
두 번째 아이디어은 원본 polyline-PathGeometry에서 Widen() 메서드를 호출하여 획 자체에 대해 약간 확대 된 PathGeometry를 만드는 것입니다.
는' update m_transGeom based on m_widenedPathGeometry & the current transform matrix3x2,
m_transGeom = New TransformedGeometry(D2DCanvas.canvas_factory2D, m_widenedPathGeometry, Matrix3x2.Rotation(m_rotation, InsertPoint) * _transformMatrix)
' to draw the stroke of the Polyline
D2DCanvas.canvas_renderTarget2D.DrawGeometry(m_transGeom, m_strokeBrush, plaatdikte * _transformMatrix.ScaleVector(1), m_strokeStyle)
' update m_fillTransformedGeometry based on m_pathGeometry & the current transform matrix3x2,
m_fillTransformedGeometry = New TransformedGeometry(D2DCanvas.canvas_factory2D, m_pathGeometry, Matrix3x2.Rotation(m_rotation, InsertPoint) * _transformMatrix)
' to draw the fill of the PolyLine
D2DCanvas.canvas_renderTarget2D.DrawGeometry(m_fillTransformedGeometry, m_fillBrush, plaatdikte * _transformMatrix.ScaleVector(1), m_strokeStyle)
이 불필요한 생성이 넓어진 형상 (! 모두 동일한 StrokeStyle 사용) 전에 "채우기"도면에 "스트로크"로 (계정 변환 도입) 그린 얻는다
'define m_widenedPathGeometry (makes op the outline/stroke of this sheetmetal profile)
m_widenedPathGeometry = New PathGeometry(D2DCanvas.canvas_factory2D)
Using sink As SimplifiedGeometrySink = m_widenedPathGeometry.Open()
m_pathGeometry.Widen(0.2, sink)
sink.Close()
End Using
최종 캡에 미치는 영향 : 를 (어느 둥근, 느릅 나무는 StrokeStyle에 정의되지 않았거나 사이에 뭔가)
이 스트로크/채우기 - I가 사용 StrokeStyle가 '둥근'엔드 캡을 가지고 다시 정의 할 때 방법은 벽돌 쌓는 제대로 작동 :
그러나 '평면'엔드 캡이 난 후 정말로 것입니다.
왜 이런 일이 발생하는지 또는 어떻게 다르게 해결할 수 있습니까?
건배!
StrokeStyle을 전혀 사용하지 않고 위 테스트를 한 결과, '확대 된'PathGeometry는 여전히 폴리 라인의 끝에서 이러한 아티팩트를 산출합니다. [예] (http://i.stack.imgur.com/wgVrH.jpg) – BertCoding