2013-02-25 174 views
1

我想創建一個填充物,填充使用點列表創建的多邊形的內部,但能夠移除它的孔洞。帶孔洞的填充多邊形

我的舊代碼:

Private Sub DrawSomething(ByVal points as List(of Point), _ 
ByVal myBrush As System.Drawing.Brush, _ 
ByVal myGraphics As System.Drawing.Graphics) 
    myGraphics.FillPolygon(myBrush, points) 
End Sub 

它只是填充在列表中的點的輪廓創造了一個多邊形。

我怎樣才能填補多邊形,但不包括在它的孔(這是我知道的都在裏面,我已經測試):

Private Sub DrawSomething(ByVal points as List(of Point), _ 
ByVal holes as List(of List(of Point)), _ 
ByVal myBrush As System.Drawing.Brush, _ 
ByVal myGraphics As System.Drawing.Graphics) 

' fill the contour created by points, excluding the contours created by holes 
End Sub 

有什麼我可以使用,已經被創造出來的?我能以某種方式繪製原始多邊形並移除這些孔嗎?最好的方法是什麼?

有什麼我試過 - 例如:我也做了以下內容:

Private Sub DrawSomething(ByVal points as List(of Point), _ 
ByVal holes as List(of List(of Point)), _ 
ByVal myBrush As System.Drawing.Brush, _ 
ByVal myGraphics As System.Drawing.Graphics) 

    Dim myGraphicsPath As Drawing2D.GraphicsPath = New Drawing2D.GraphicsPath(Drawing2D.FillMode.Winding) 
    myGraphicsPath.AddLines(points) 
    Dim myRegion As System.Drawing.Region = New System.Drawing.Region(myGraphicsPath) 
    Dim otherGraphicsPath As Drawing2D.GraphicsPath = New Drawing2D.GraphicsPath(Drawing2D.FillMode.Winding) 
    ForEach otherPoints as List(of Point) in holes 
    otherGraphicsPath.AddLines(otherPoints) 
    Next 
    myRegion.Exclude(otherGraphicsPath) 
    myGraphics.FillRegion(myBrush, myRegion) 

End Sub 

這是沒有那麼糟糕...它排除了內部的多邊形,但它也借鑑之間的「空」一大片輪廓。所以,我猜這是行不通的。

謝謝。

編輯:添加圖片:enter image description here

輪廓被給定爲點的列表(「點」),孔作爲列表的列表(「孔」)。右邊的圖片對我得到的線條有粗略的描述(即使孔和輪廓沒有共同點) - 線條隨着我移動圖像而改變。

+0

不知道我明白問題所在。你不能只是再次繪製多邊形沒有洞? – LarsTech 2013-02-25 23:01:27

+0

這就是我想要的。繪製多邊形,沒有洞。多邊形內有孔的事實是必不可少的信息。所以我不能把它們掩蓋起來。理論上我有所有的信息 - 我只是不知道如何正確繪製它。 – Thalia 2013-02-25 23:10:28

回答

1

嘗試使用StartFigure和CloseFigure您GraphicPath對象:

For Each otherPoints as List(of Point) in holes 
    otherGraphicsPath.StartFigure() 
    otherGraphicsPath.AddLines(otherPoints) 
    otherGraphicsPath.CloseFigure() 
Next 

沒有,我認爲所有的對象都相互連接。

+0

我試過了,沒有任何效果。謝謝。 – Thalia 2013-02-25 23:35:19

+0

我也嘗試爲每個圖創建單獨的區域,並排除它們。具有相同的效果。 – Thalia 2013-02-25 23:38:20

+0

@Mihaela否則我無法嘲笑它。仔細檢查你的孔集合中的值。 – LarsTech 2013-02-25 23:39:09