ПОНЯТНО О Visual Basic NET (том 3)

Графический путь


Существует класс GraphicsPath (графический путь) пространства имен Drawing2D. Если создать экземпляр этого класса, то в него можно «складывать», как в коллекцию, разные фигуры, чтобы затем весь «склад» можно было нарисовать одним махом. Этот класс полезен в частности тем, что подходящие соседние фигуры он соединяет линиями, образуя таким образом единый контур, и позволяет этот контур заливать. Так что название графический путь для этого класса неудачно, лучше подошло бы контур.

Поставим задачу нарисовать, а затем залить «Буратино», как на Рис. 17.6.

Рис. 17.6

Если бы мы рисовали обычным образом, нам бы пришлось рисовать 5 элементов: окружность (глаз), большую дугу (голова), маленькую дугу (кончик носа) и два отрезка (нос). А залить такую фигуру нам бы вообще не удалось.

Вот код с использованием графического пути:

Dim Гр As Graphics = Me.CreateGraphics

Dim Путь As New Drawing2D.GraphicsPath

Путь.AddArc(20, 20, 120, 120, 0, 330)            'Голова

Путь.AddArc(220, 20, 10, 10, 270, 180)          'Кончик носа

Путь.CloseFigure()

Путь.AddEllipse(90, 40, 20, 20)                      'Глаз

Гр.DrawPath(Pens.Black, Путь)                      'Рисуем левого Буратино

Гр.TranslateTransform(200, 0)                        'Смещаем начало координат

Гр.FillPath(Brushes.Blue, Путь)                      'Рисуем правого Буратино

Пояснения:

2 строка создает Путь. Пока он пустой.

3 строка добавляет в Путь большую дугу. Вы видите, что у Пути есть набор методов, начинающихся на Add и добавляющих в Путь фигуру того или иного типа. Например, метод AddLine добавляет в Путь отрезок прямой. Теперь Путь не пуст, но ничего еще пока не нарисовано.

4 строка добавляет в Путь маленькую дугу. И тут происходит примечательное событие: конечная точка предыдущего элемента Пути (большая дуга) самостоятельно, без всякого приказа с вашей стороны соединяется отрезком (верхняя часть носа) с начальной точкой следующего элемента Пути (маленькая дуга), образуя единый контур.

5 строка заставляет VB соединить отрезком (нижняя часть носа)  конечную точку последнего элемента Пути (маленькая дуга) с начальной точкой первого элемента Пути (большая дуга), замыкая таким образом контур. Пока еще ничего не нарисовано.

6 строка добавляет окружность. Как видите, не ко всем фигурам проводится контур. 

7 строка рисует Путь (левый Буратино).

Чтобы две фигуры не накладывались друг на друга, в 8 строке я сдвигаю вправо систему координат.

9 строка рисует залитый Путь (правый Буратино).

На подробностях проведения контуров и заливки Путей я не останавливаюсь.



Содержание раздела