Получить GraphicsPath из Region - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Друзья, спасите! Заблудился в трех соснах: GaphicsPath, Region и Intersect. Вот пример задачи:
Листинг программы
  1. Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint
  2. 'исходные фигуры - прямоугольник rect и замкнутый контур grpth
  3. Dim rect As New Rectangle(70, 120, 160, 120)
  4. Dim pts As Point() = {New Point(100, 100), New Point(100, 200), New Point(200, 200), New Point(200, 300),
  5. New Point(300, 300), New Point(300, 100), New Point(100, 100)}
  6. Dim grpth As New GraphicsPath(pts, {0, 1, 1, 1, 1, 1, 1})
  7. '==========
  8. Dim reg As New Region(grpth)
  9. 'часть прямоугольника внутри контура
  10. reg.Intersect(rect)
  11. e.Graphics.FillRegion(Brushes.Yellow, reg)
  12. 'отодвинем результирующий регион для наглядности
  13. Dim mx As New Matrix
  14. mx.Translate(250, 0)
  15. reg.Transform(mx)
  16. e.Graphics.FillRegion(Brushes.Yellow, reg)
  17. 'сверху рисуем исходные фигуры
  18. e.Graphics.DrawPath(Pens.Blue, grpth)
  19. e.Graphics.DrawRectangle(Pens.Red, rect)
  20. 'что дальше???
  21. Dim newGraphicsPath As New GraphicsPath '= reg.???????
  22.  
  23. End Sub
и картинка:
Спойлер
Надо получить GraphicsPath желтого Region. Либо сразу GraphicsPath общей области красной и синей фигуры.

Решение задачи: «Получить GraphicsPath из Region»

textual
Листинг программы
  1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  2. '…
  3.     DrawRegion(gg, Color.Red, gr) 'рисуем границу области
  4.     If CheckBox1.Checked Then setPoints(gr, gg)
  5. '…
  6. End Sub
  7. Private Sub setPoints(ByVal reg As Region, ByVal g As Graphics)
  8.     Dim ww As Single = 9
  9.     Dim x, y As Single
  10.     Dim rects() As RectangleF = reg.GetRegionScans(New System.Drawing.Drawing2D.Matrix())
  11.     For Each rr As RectangleF In rects
  12.         x = rr.X - ww / 2
  13.         y = rr.Y - ww / 2
  14.         g.FillEllipse(Brushes.Yellow, x, y, ww, ww)
  15.         g.DrawEllipse(Pens.Red, x, y, ww, ww)
  16.         g.FillEllipse(Brushes.Yellow, x + rr.Width, y, ww, ww)
  17.         g.DrawEllipse(Pens.Red, x + rr.Width, y, ww, ww)
  18.         g.FillEllipse(Brushes.Yellow, x + rr.Width, y + rr.Height, ww, ww)
  19.         g.DrawEllipse(Pens.Red, x + rr.Width, y + rr.Height, ww, ww)
  20.         g.FillEllipse(Brushes.Yellow, x, y + rr.Height, ww, ww)
  21.         g.DrawEllipse(Pens.Red, x, y + rr.Height, ww, ww)
  22.     Next
  23. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы