* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Рисование сложных фигур
8 февраля 2009
Время от времени приходится рисовать фигуры более сложные, чем прямоугольни- ки, эллипсы и многоугольники. У объектов простых фигур есть встроенные мето- ды, облегчающие их рисование, тогда как рисование сложных фигур требует допол- нительной подготовки. Ключевым для визуализации сложных фигур является объ- ект Graphics Path из пространства имен System.Drawing. Drawing2D. Он описывает про- извольный замкнутый контур или набор фигур. Так, можно создать объект Graphics- Path, образованный эллипсами, прямоугольниками и другими простыми объекта- ми, представляющий фигуру неправильной формы.
Создание объекта GraphicsPath Объект GraphicsPath создают вызовом одной из версий его конструктора, Простей- шая версия конструктора объекта GraphicsPath не принимает параметров: Visual Basic .NET Dim rnyPath As New Drawing2D.GraphicsPath() Visual C# GraphicsPath myPath = new Drawing2D.GraphicsPath(); Кроме того, объект GraphicsPath допустимо задавать в виде массива точек и зна- чений типа Byte. Точки определяют координаты контура, а значения Byte — тип линий, которыми эти точки соединяются. Преобразовав подобный массив из пере- числимого типа System.Drawing.Drawing2D.PathPointType, вы сможете написать бо- лее понятный и удобный в сопровождении код. Вот пример кода, создающего очень простой объект GraphicsPath: Visual Basic .NET 1 Этот пример предполагает наличие оператора Imports System.Drawing.Drawing2D Dim friyPatn As New GraphicsPath{New Pointf) {New Point(1, 1), New Point(32, 54), New Point(33, 5)}, New Byte() _ {CType(PathPointType.Start, Byte), CType(PathPointType.Line, _ Byte), CType(PathPointType.8ezier. Byte)}) Visual C# // Этот пример предполагает наличие оператора using System. Drawing. Drawing2D GraphicsPath myPath = new GraphicsPath(new Point[] {new Point(1, 1), new Point(32, 54), new Point(33, 5)}, new byte[] { (byte)PathPointType. Start, ( byte) Pat hPointType. Line, (byte)PathPointType.Bezier}); К созданному объекту GraphicsPath можно добавлять фигуры. Фигура — это зам- кнутый контур, он может быть простым (как эллипс или прямоугольник) или слож- ным (как произвольные кривые и контуры символов). Методы класса GraphicsPath позволяют добавлять к контуру новые фигуры (таб- лица 7-6). Таблица 7-6. Методы ,для добавления фигур к объекту GraphicsPath Имя Что добавляет AddClosedCurve Замкнутую кривую, заданную массивом точек AddElUpse Эллипс AddPath Заданный экземпляр объекта GraphicsPath AddPie Окружность AddPolygon Многоугольник, заданный массивом точек AddRedangle Прямоугольник AddRecmngles Массив прямоугольников AddString Графическое представление строки символов с заданным начертанием Разрешается не только напрямую добавлять фигуры к объекту GraphicsPath, но и составлять контуры, добавляя прямые, кривые и дуги. Чтобы начать новый контур, вызовите метод GraphicsPath. StartFigure. Далее, используя методы класса Graphics- Path, можно добавлять к контуру новые фигуры. Закончив конструирование фигу- ры, вызовите метод GraphicsPath. CIoseFigure, чтобы замкнуть ее контур — последняя точка фигуры автоматически соединяется с первой. Вот пример: Visual Basic .NET Dim myPath As New Drawing2D. GraphicsPath() myPath. StartFiguref) Здесь должен быть код, добавляющий элементы контура. [TiyPath.CloseFigure(') Visual C# GraphicsPath myPath = new Drawing2D.GraphicsPath(); myPath. StartFigure(); Здесь должен быть код, добавляющий элементы контура. myPath. CloseFigureO; Если вызвать метод StartFigure два раза подряд, не вызвав между ними метод Close- Figure, то фигура, созданная первым вызовом StartFigure, останется незамкнутой. Примечание При отображении в период выполнения любая незамкнутая фигура ав- томатически замыкается добавлением прямой, соединяющей первую и последнюю точку контура этой фигуры. В таблице 7-7 описаны методы объекта GraphicsPath, позволяющие добавлять новые элементы контура фигуры. Table 7-7. Методы для добавления элементов контура Имя Что добавляет AddArc Дугу AddBezier Кривую Безье AddBeziers Набор кривых Безье AddCurve Кривую, заданную массивом точек AddLine Прямую AddLines Набор соединенных прямых >• Как нарисовать сложную фигуру 1. Получите ссылку на объект Graphics, связанный с областью рисования, в кото- рой нужно нарисовать фигуру. 2. Создайте новый экземпляр класса GraphicsPath. 3. Добавьте к нему фигуры при помощи методов класса GraphicsPath. 4. Вызовите метод Graphics. DrawPath, чтобы нарисовать контур, или Graphics. Fill- Path, чтобы нарисовать закрашенную фигуру, заданную объектом GraphicsPath. 5. Освободите объект Graphics.