Я хочу создать «заливку», которая заполняет внутреннюю часть многоугольника, созданного с использованием списка точек, но иметь возможность удалять его отверстия.
Мой старый код:
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
Это не так уж плохо... он исключает внутренние полигоны, но также рисует полосу «пустого» между контурами. Итак, я думаю, это не работает.
Спасибо.
Редактировать: Добавление изображения:
Контур задается в виде списка точек ("точки"), отверстия - в виде списка списков ("дырок"). На картинке справа есть грубый рисунок полос линий, которые я получаю (хотя отверстия и контуры не имеют общих точек) - линии меняются по мере того, как я перемещаю изображение.