Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Private void Form1_Paint(object sender, PaintEventArgs e)




Лабораторная работа №2 Разработка приложения, имитирующего движение графических объектов

Цель работы

Изучить теоретические принципы использования графических объектов GDI+ и получить практические навыки разработки программ, имитирующих движение графических объектов.

 

Краткая теория

Работа с перьями

Все методы класса Graphics, предназначенные для рисования фигур или текста, получают через один из параметров перо класса Pen или кисть класса Brush, с помощью которых и выполняется рисование.

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

public Pen(Color);

public Pen(Color, float);

public Pen(Brush);

public Pen(Brush, float);

Первый из этих конструкторов создает перо заданного цвета. Цвет задается при помощи объекта класса Color. Второй конструктор позволяет дополнительно задать толщину пера. Третий и четвертый конструктор создают перо на основе кисти, причем в четвертом конструкторе можно указать толщину создаваемого пера.

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

 

Свойство Описание
Alignment Выравнивание пера
Width Ширина линии
Brush Кисть, используемая пером
Color Цвет пера
DashStyle Стиль пунктирных и штрихпунктирных линий
DashCup Вид точек и штрихов пунктирных и штрихпунктирных линий
DashOffset Расстояние от начала линии до начала штриха
DashPattern Массив шаблонов для создания произвольных штрихов и пробелов штриховых и штрихпунктирных линий
StartCup EndCup Стиль концов линий
LineCap Формы концов линий
LineJoin Стиль соединения концов двух различных линий
MiterLimit Предельная толщина в области соединения остроконечных линий

Устанавливая значение свойства Color и Width, приложение может изменить соответственно цвет и ширину линии, рисуемой пером.

Если надо нарисовать пунктирную или штрихпунктирную линию, приложение должно задать необходимое значение для свойства DashStyle. При этом допускается изменять вид точек и тире пунктирных и штрихпунктирных линий (свойство DashCup), задавать расстояние от начала линии до начала штриха (свойство DashOffset) или даже вовсе задать произвольный вид для штрихов и разделяющих эти штрихи пробелов (свойство DashPattern).

При необходимости изменить внешний вид концов линий используйте свойства StartCup и EndCup, задающие стиль концов линий. Свойство LineCap определяет форму концов линий.

Если нужно указать стык между двумя различными линиями, то стиль этого стыка задается свойством LineJoin, а предельная толщина стыка - стилем MiterLimit.

При помощи перьев можно рисовать не только прямые линии, но и любые геометрические фигуры.

 

Работа с кистью

Внутренняя область окна и замкнутых геометрических фигур может быть закрашена при помощи кисти. В приложениях Мiсrosоft.NEТ Framework кисти создаются на базе классов, производных от абстрактного класса Brush. Это следующие классы:

-Brushes;

-SolidBrush;

-HatchBrush;

-TextureBrush;

-LinearGradientBrush;

-PathGradientBrush.

 

Кисть для сплошной закраски

Простейшие из кистей - это кисти Brushes и SolidBrush, предназначенные для сплошной закраски фигур. Эти кисти создаются при помощи конструктора с одним параметром, задающим цвет в виде объекта класса Color.

Ниже приведена часть приложения, в котором кисть класса Brushes применяется для создания перьев, с помощью которых приложение рисует прямоугольник и эллипс. Кроме этого, кисть черного цвета создается и для рисования текста:

Private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

g.Clear(Color.White);

g.DrawString(Text,new Font("Helvetica",12),Brushes.Black,0,0);

g.DrawRectangle(new Pen(Brushes.Black, 2), 10, 30, 200,100);

g.DrawEllipse(new Pen(Brushes.Black, 2), 150, 120, 100,130);

}

Кисти типа HatchBrush

При помощи класса НаtchBrush можно создать прямоугольную кисть заданного стиля с заданным цветом изображения и фона.

Для создания кистей этого типа предусмотрено 2 конструктора:

public HatchBrush(HatchStyle, Color);

public HatchBrush(HatchSty1e, Color, Color);

Первый из этих конструкторов позволяет создать кисть заданного стиля и цвета, а второй дополнительно позволяет указать цвет фона.

Далее в таблице перечислены различные стили кисти HatchBrush, представляющие собой константы перечисления HatchStyle.

 

Константы Описание
BackwardDiagonal Линии штриховки располагаются в обратном направлении (от верхнего правого угла к нижнему левому углу кисти)
Cross Пересекающиеся горизонтальные и вертикальные линии
DarkDownwardDiagonal Диагональные линии, идущие в направлении снизу вверх, и расположенные на 50 % плотнее, чем при использовании константы ForwardDiagonal (темная штриховка)
DarkHorizontal Горизонтальные линии, которые на 50 % плотнее, чем при использовании константы Horizontal (темная штриховка)
DarkUpwardDiagonal Диагональные линии, плотнее на 50 % чем при использовании константы BackwardDiagonal (темная штриховка)
DarkVertical Вертикальные линии, которые на 50 % плотнее, чем при использовании константы Vertical (темная штриховка)
DashedDownwardDiagonal Штриховые диагональные линии, идущие в обратном направлении
DashedHorizontal Штриховые горизонтальные линии
DashedUpwardDiagonal Штриховые диагональные линии, идущие в прямом направлении
DashedVertical Штриховые вертикальные линии
DiagonalBrick Диагональная «кирпичная» штриховка
DiagonalCross Пересекающиеся прямые и обратные диагональные линии
Divot Штриховка в виде дерна
DottedDiamond Прямые и обратные диагональные пересекающиеся линии, состоящие из отдельных точек
DottedGrid Горизонтальные и вертикальные пересекающиеся линии, состоящие из отдельных точек
ForwardDiagonal Прямые диагональные линии, идущие в направлении от верхнего левого угла к нижнему правому углу кисти
Horizontal Горизонтальные линии
HorizontalBrick Горизонтальные «кирпичные» линии
LargeCheckerBoard Штриховка в виде шахматной доски с крупными клетками
LargeConfetti Штриховка в виде конфетти
LargeGrid Пересекающиеся горизонтальные и вертикальные линии (то же, что и Cross)
LightDownwardDiagonal Светлая обратная диагональная штриховка
LightHorizontal Светлая горизонтальная штриховка
LightUpwardDiagonal Светлая прямая диагональная штриховка
LightVertical Светлая вертикальная штриховка
Мах То же, что и SolidDiamond
Min То же, что и Horizonal
NarrowHorizontal Средняя горизонтальная штриховка
NarrowVertical Средняя вертикальная штриховка
OutlinedDiamond Пересекающиеся прямые и обратные диагональные линии штриховки
PercentO5, Percentl0, Percent20, РеrсеntЗО ... Percent90 Эти константы задают процентное соотношение цвета штриховки и цвета фона кисти
Plaid Штриховка в виде пледа
Shingle «Кровельная» штриховка
SmallCheckerBoard Штриховка в виде шахматной доски с мелкими клетками
SmallConfetti Штриховка в виде мелкого конфетти
SmallGrid Штриховка в виде мелкой сетки
SolidDiamond Штриховка в виде шахматной доски, расположенная по диагонали
Sphere Штриховка с использованием сферических фигур
Trellis Штриховка в виде решетки
Vertical Вертикальные линии
Wave Волнообразные линии
Weave Штриховка в виде ткани
WideDownwardDiagonal Широкие обратные диагональные линии
WideUpwardDiagonal Широкие прямые диагональные линии
ZigZag Зигзагообразные горизонтальные линии

Для демонстрации использования кистей класса НаtchBrush ниже представлен исходный текст обработчика событий Form1_Paint:

using System.Drawing.Drawing2D;

...

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.Black, Color.White);

g.FillRectangle(hb, 10, 30, 200, 100);

g.DrawRectangle(new Pen(Brushes.Black,1),10,30,200,100);

HatchBrush hb1 = new HatchBrush(HatchStyle.DottedGrid, Color.Black, Color.YellowGreen);

g.FillEllipse(hb1, 150, 120, 100, 130);

g.DrawEllipse(new Pen(Brushes.Black,1),150,120,100,130);

HatchBrush hb2 = new HatchBrush(HatchStyle.Divot, Color.Tomato, Color.Tan);

g.FillEllipse(hb2, 60,160,60,60);

g.DrawEllipse(new Pen(Brushes.Blue, 2), 60, 160, 60, 60);

}

Как видно, здесь последовательно создаются 3 различные кисти, а затем использу­ются для закраски внутренних областей прямоугольника и эллипсов. Результат работы приложения показан на рисунке 2.1.

 

Рис. 2.1 ­– Использование кистей класса НаtchBrush

 

Кисти типа TextureBrush

Если представленные выше кисти не подходят, то есть возможность создать собственную кисть на базе TextureBrush в виде произвольного изображения. Такая кисть, называемая текстурной, может иметь любой внешний вид и любой цвет.

Для создания кисти класса TextureBrush приложение может воспользоваться одним из следующих конструкторов:

public TextureBrush(Image);

public TextureBrush(Image, Rectangle);

public TextureBrush(Image, RectangleF);

public TextureBrush(Image, WrapMode);

public TextureBrush(Image, Rectangle, ImageAttributes);

public TextureBrush(Image, WrapMode, Rectangle);

public TextureBrush(Image, WrapMode, RectangleF);

Самому простому из этих конструкторов нужно передать изображение, загруженное из ресурсов приложения или из внешнего файла. Структуры Rectangle и RectangleF позволяют задать границы прямоугольной области, ограничивающие изображение кисти. С помощью констант перечисления WrapMode программа может задать способ размещения текстуры по горизонтали и вертикали. Эти константы приведены в таблице.

 

Константа Описание
Clamp Текстура кисти «прикрепляется» к границе объекта
Tile При закраске текстура кисти повторяется по вертикали и горизонтали
TileFlipX Аналогично предыдущему, но изображение в соседних столбцах заменяется зеркальным, отражаясь по вертикали
TileFlipY Аналогично Tile, но отражение происходит по горизонтали
TileFlipXY Отражение и по вертикали и по горизонтали

 

И, наконец, параметр ImageAttributes позволяет задать различные атрибуты изображения, такие, как количество цветов и способ рисования. Описание этого параметра и класса ImageAttributes можно найти в электронной справочной документации системы Microsoft Visual Studio.NET.

Закраску с помощью текстурной продемонстрировано в приведенном ниже коде:

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...