Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема Графика в C#.doc
Скачиваний:
11
Добавлен:
03.05.2019
Размер:
3.65 Mб
Скачать

Рисование закрашенных фигур.

В классе Graphics определен ряд методов, предназначенных для рисования закрашенных фигур. Имена некоторых из этих методов, имеющих префикс Fill, мы перечислили в табл. 10‑2.

FillRectangle - рисование закрашенного прямоугольника;

FillRectangles – рисование множества закрашенных прямоугольников;

FillPolygon - рисование закрашенного многоугольника;

FillEllipse - рисование закрашенного сегмента эллипса;

FillPie - рисование закрашенного сегмента эллипса

FillClosedCurve Рисование закрашенного сплайна

FillRegion Рисование закрашенной области типа Region

Есть два отличия методов с префиксом Fill от одноименных методов с префиксом Draw. Прежде всего, методы с префиксом Fill рисуют закрашенные фигуры, а методы с префиксом Draw — не закрашенные. Кроме этого, в качестве первого параметра методам с префиксом Fill передается не перо класса Pen, а кисть класса Brush.

Рассмотрим пример рисования фигуры при помощи метода FillRegion.

Класс Region описывает внутреннюю часть графической формы, состоящей из прямоугольников и контуров.

Метод FillRegion заполняет внутреннюю часть объекта заданного при помощи объекта Region.

Для решения задачи создадим инструмент для рисования SolidBrush красного цвета.

SolidBrush myBrush = new SolidBrush(Color.Red);

Зададим область заливки в виде прямоугольника при помощи объекта класса Rectangle.

Rectangle myRect = new Rectangle(10,10, 200,200);

Вызов метода FillRegion будет выглядеть следующим образом.

g.FillRegion(myBrush,new Region(myRect));

Код обработчика события Form1_Paint имеет вид (см слайд).

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

SolidBrush myBrush = new SolidBrush(Color.Red);

Rectangle myRect = new Rectangle(10,10, 200,200);

g.FillRegion(myBrush,new Region(myRect));

}

Результат работы программы представлен на рис.

Рис. Работа метода FillRegion

Тема. Инструменты для рисования

На данный момент при рисовании стандартных фигур были использованы два инструмента для рисования: SolidBrush и Pen. В данном разделе будут описаны другие возможные инструменты для рисования и заливки различных фигур.

Стоит напомнить, что для использование некоторых возможностей класса Graphics необходимо подключить пространство имен System.Drawing.Drawing2D.

Инструмент для рисования перо (Pen) и его свойства

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

Существуют несколько видов перегруженных конструкторов.

public Pen(Color); public Pen(Color, float); public Pen(Brush); public Pen(Brush, float);

Первый вариант конструктора создает перо заданного цвета. Цвет задается при помощи объекта класса Color, расположенного в пространстве имен System.Drawing.Color.

Pen myPen = Pen(Color.Red);

Второй конструктор позволяет дополнительно задать толщину пера при помощи аргумента типа float, в нашем случае толщина линии задается размером 4 пикселя.

Pen myPen = Pen(Color.Red, 4);

Третий и четвертый конструктор создают перо на основе кисти, причем в четвертом конструкторе можно указать толщину создаваемого пера.

Pen myPen = Pen(Brushes.Red, 4);

После того как перо создано, программа может определить его атрибуты при помощи свойств класса Pen. Рассмотрим отдельно свойства класса Pen.

Свойство PenAlignment пример использования приведен ниже. Это свойство определяет, каким образом объект Pen рисует замкнутые кривые и многоугольники. Перечислением PenAlignment задаются пять значений: Center; Inset; Right; Left; Outset. Однако только два значения — Center и Inset изменяют внешний вид рисуемой линии.

Значение Center устанавливается по умолчанию для этого свойства, и им задается центрирование ширины пера по контуру кривой или многоугольника. Значение Inset этого свойства соответствует размещению пера по всей ширине внутри границы кривой или многоугольника. Три другие значения, Right, Left и Outset задают центрированное перо.

Перо Pen, для которого выравнивание установлено равным Inset, выдает недостоверные результаты, иногда рисуя в позиции вставки, а иногда — в центрированном положении. К тому же, вложенное перо невозможно использовать для рисования составных линий, и оно не позволяет рисовать пунктирные линии с оконечными элементами Triangle.

myPen.Alignment = PenAlignment.Center;

Свойство Brush. Получает или задает объект Brush, определяющий атрибуты объекта Pen. Назначение этого свойства позволяет перу рисовать заполненные линии и кривые. Оно переопределяет свойство Color объекта Pen.

myPen.Brush = Brushes.Blue;

Рис. Результат работы свойства Brush

Свойство Color. Получает или задает цвет объекта Pen. Изменим цвет пера на красный при помощи этого свойства.

myPen.Color = Color.Red;

Рис. Результат работы свойства Color

Свойство CompoundArray. Получает или задает массив значений, определяющий составное перо. Составное перо рисует составную линию, состоящую из параллельных линий и разделяющих их промежутков.

Составная линия состоит из сменяющих друг друга параллельных линий и промежутков различной ширины. Значения массива задают начальные точки компонентов составной линии относительно ширины пера. Первое значение массива задает начало первого компонента (линии) по ширине пера и в долях от нее. Второе значение массива задает начало следующего компонента (пробела) по ширине пера и в долях от нее. Последнее значение массива задает окончание последнего компонента.

Предположим, что нужно создать перо, рисующее две параллельные линии. Первую линию толщиной 20% от ширины пера, пробел, разделяющий линии, — 50% от ширины пера, а вторую линию — 30% от ширины пера.

Для этого необходимо создать массив следующего вида.

float[] d = { 0.0F, 0.2F, 0.7F, 1F };

И присвоить его значение свойству CompoundArray.

myPen.CompoundArray = d;

В результате получим следующий обработчик события Form1_Paint.

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

g.Clear(Color.White);

Pen myPen = new Pen(Color.Black,10);

myPen.Color = Color.Red;

float[] d = { 0.0F, 0.2F, 0.7F, 1F };

myPen.CompoundArray = d;

g.DrawLine(myPen,10,50,200,50);

}

Результат работы свойства представлен на рис.

Рис. Результат работы свойства CompoundArray

Свойство Width. Получает или устанавливает ширину пера Pen, в единицах объекта Graphics, используемого для рисования.

myPen.Width = 5;

Свойство EndCap. Задает окончание линий, нарисованных при помощи объекта Pen. Этому свойству присваиваются значения из перечисления LineCap.

myPen.EndCap = LineCap.ArrowAnchor;

Это перечисление содержит следующие значения.

Flat - задает плоское завершение отрезка.

Square - задает квадратное завершение отрезка.

Round - задает круглое завершение отрезка.

Triangle - задает треугольное завершение отрезка.

NoAnchor - не задает маркер.

SquareAnchor - задает квадратный маркер завершения отрезка.

RoundAnchor - задает круглый маркер.

DiamondAnchor - задает маркер в форме ромба.

ArrowAnchor - задает маркер в форме стрелки.

Свойство StartCap. Задает начало линий, нарисованных при помощи объекта Pen. Этому свойству присваиваются значения из перечисления LineCap

myPen.StartCap = LineCap.DiamondAnchor;

Свойство DashCap. Получает или задает стиль окончания пунктиров, ограничивающих пунктирные линии, нарисованные при помощи объекта Pen. Свойству DashCap присваиваются одно из значений перечисления DashCap. Это перечисление содержит следующие значения для начала и окончания штриха: Flat(квадратное); Round(круглое); Triangle(треугольное).

Свойство DashOffset. Получает или задает расстояние от начала линии до начала штрихового шаблона.

Свойство DashPattern. Получает или задает массив настраиваемых штрихов и промежутков. Элементы массива dashArray задают длину всех штрихов и промежутков штрихового шаблона. Первый элемент задает длину штриха, второй — длину промежутка, третий — длину следующего штриха и так далее. Длина каждого штриха и промежутка штрихового шаблона вычисляется исходя из значения элемента массива и ширины объекта Pen.

float [] DashArray = {4.0F, 2.0F, 1.0F, 3.0F};

myPen.DashPattern = DashArray;

Свойство DashStyle. Получает или задает стиль, используемый для пунктирных линий, нарисованных при помощи объекта Pen. Значениями свойства является перечисление DashStyle, представляющее стиль, используемый для пунктирных линий, нарисованных при помощи объекта Pen. Это перечисление содержит следующие значения.

Solid - Задает сплошную линию.

Dash - Задает линию, состоящую из штрихов.

Dot - Задает линию, состоящую из точек.

DashDot - Задает штрих-пунктирную линию.

DashDotDot - Задает линию, состоящую из повторяющегося шаблона "штрих-две точки".

Custom - Задает пользовательский тип пунктирных линий.

Работа этого свойства выглядит следующим образом.

myPen.DashStyle = DashStyle.DashDotDot;

В результате получим следующий обработчик события Form1_Paint.

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

g.Clear(Color.White);

Pen myPen = new Pen(Color.Black);

myPen.Color = Color.Red;

myPen.Width = 5;

myPen.EndCap = LineCap.ArrowAnchor;

myPen.StartCap = LineCap.DiamondAnchor;

g.DrawLine(myPen, 10, 10, 200, 10);

float [] DashArray = {4.0F, 2.0F, 1.0F, 3.0F};

myPen.EndCap = LineCap.Flat;

myPen.StartCap = LineCap.Round;

myPen.DashCap = DashCap.Triangle;

myPen.DashPattern = DashArray;

g.DrawLine(myPen, 10, 20, 200, 20);

myPen.EndCap = LineCap.RoundAnchor;

myPen.StartCap = LineCap.Square;

myPen.DashStyle = DashStyle.DashDotDot;

g.DrawLine(myPen, 10, 30, 200, 30);

myPen.EndCap = LineCap.NoAnchor;

myPen.StartCap = LineCap.NoAnchor;

myPen.DashStyle = DashStyle.Dot;

g.DrawLine(myPen, 10, 40, 200, 40);

}

Рис. Результат работы обработчика события Form1_Paint