2016-01-05 61 views
0

我想在.NET中使用實線箭頭CustomLineCap繪製一條線,但與線相交的帽的部分未填充。我嘗試將cap的路徑中的所有Y座標設置爲非負數,但CustomLineCap構造函數拋出了「未實現」異常;顯然,帽必須與負線Y軸(即線本身)相交,而不是在線的端點處。.NET - 我如何使一個填充的CustomLineCap不會不填充線重疊?

這裏是我使用用於CustomLineCap的代碼:

GraphicsPath ArrowCapPath = new GraphicsPath(); 
    ArrowCapPath.AddLine(new Point(0, 4), new Point(2, -1)); 
    ArrowCapPath.AddLine(new Point(2, -1), new Point(-2, -1)); 
    ArrowCapPath.AddLine(new Point(-2, -1), new Point(0, 4)); 
    CustomLineCap ArrowCap = new CustomLineCap(ArrowCapPath, null); 

的「箭頭」是具有高度5和寬度4.線三角形本身變爲1落入該三角形,而且這是在部分沒有填充。

如何獲得整個瓶蓋?

+0

https://msdn.microsoft.com/zh-cn/library/system.drawing.drawing2d.customlinecap(v=vs.110).aspx上的MSDN示例沒有任何負面的座標。 –

+1

它可能與您的要點在箭頭周圍(順時針/逆時針)所採用的「方向」有關。 MSDN表示,結尾大小總是使用'Winding'填充模式來確定形狀內部的內容。你可以嘗試顛倒點的方向。由於它看起來像整條線被繪製爲一條合併路徑,任何交叉點都會導致填充問題。我懷疑你將能夠使用消極的協調,並表現出理智。請參閱https://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.fillmode(v=vs.110).aspx –

+0

布拉德利 - 示例是針對鉤形開放線,而不是需要填補。 但是,您的建議改變了工作線的方向;當我改變了X值的符號時,箭頭現在被正確填充。 –

回答

1

問題是你的觀點在形狀上的「方向」。 CustomLineCaps always使用Winding FillMode,這不是用於GraphicPath的默認填充模式,該模式根據點之間的順時針和逆時針角度找到形狀的內部。您使用的積分順序將導致GDI認爲您的上限是「內向外」並且未填充。

顛倒你的觀點應該解決問題,使「外部」成爲「內部」,並允許填充算法以您期望的方式工作。