Получить GraphicsPath из Region - Visual Basic .NET
Формулировка задачи:
Друзья, спасите! Заблудился в трех соснах: GaphicsPath, Region и Intersect.
Вот пример задачи:
и картинка:
Надо получить GraphicsPath желтого Region.
Либо сразу GraphicsPath общей области красной и синей фигуры.
Листинг программы
- Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint
- 'исходные фигуры - прямоугольник rect и замкнутый контур grpth
- Dim rect As New Rectangle(70, 120, 160, 120)
- Dim pts As Point() = {New Point(100, 100), New Point(100, 200), New Point(200, 200), New Point(200, 300),
- New Point(300, 300), New Point(300, 100), New Point(100, 100)}
- Dim grpth As New GraphicsPath(pts, {0, 1, 1, 1, 1, 1, 1})
- '==========
- Dim reg As New Region(grpth)
- 'часть прямоугольника внутри контура
- reg.Intersect(rect)
- e.Graphics.FillRegion(Brushes.Yellow, reg)
- 'отодвинем результирующий регион для наглядности
- Dim mx As New Matrix
- mx.Translate(250, 0)
- reg.Transform(mx)
- e.Graphics.FillRegion(Brushes.Yellow, reg)
- 'сверху рисуем исходные фигуры
- e.Graphics.DrawPath(Pens.Blue, grpth)
- e.Graphics.DrawRectangle(Pens.Red, rect)
- 'что дальше???
- Dim newGraphicsPath As New GraphicsPath '= reg.???????
- End Sub
Спойлер
Решение задачи: «Получить GraphicsPath из Region»
textual
Листинг программы
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- '…
- DrawRegion(gg, Color.Red, gr) 'рисуем границу области
- If CheckBox1.Checked Then setPoints(gr, gg)
- '…
- End Sub
- Private Sub setPoints(ByVal reg As Region, ByVal g As Graphics)
- Dim ww As Single = 9
- Dim x, y As Single
- Dim rects() As RectangleF = reg.GetRegionScans(New System.Drawing.Drawing2D.Matrix())
- For Each rr As RectangleF In rects
- x = rr.X - ww / 2
- y = rr.Y - ww / 2
- g.FillEllipse(Brushes.Yellow, x, y, ww, ww)
- g.DrawEllipse(Pens.Red, x, y, ww, ww)
- g.FillEllipse(Brushes.Yellow, x + rr.Width, y, ww, ww)
- g.DrawEllipse(Pens.Red, x + rr.Width, y, ww, ww)
- g.FillEllipse(Brushes.Yellow, x + rr.Width, y + rr.Height, ww, ww)
- g.DrawEllipse(Pens.Red, x + rr.Width, y + rr.Height, ww, ww)
- g.FillEllipse(Brushes.Yellow, x, y + rr.Height, ww, ww)
- g.DrawEllipse(Pens.Red, x, y + rr.Height, ww, ww)
- Next
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д