Створення графічних об’єктів
Методи класу Graphics
Іноді для відображення деякого процесу недостатньо завантаження графічних елементів із файлу, необхідно за певними параметрами створити графік функції або геометричну фігуру.
Малювати графіки функцій та геометричні об'єкти можна як безпосередньо на формі, так і в таких елементах управління, як:Image, Panel, TabPageта інших.
Всі геометричні об'єкти малюються за допомогою методів та властивостей класу Graphics. На елементі управління спочатку необхідно створити полотно, на якому буде зображено малюнок.
Щоб створити полотно для малюнка, пропишіть у коді команду:
Graphics ім'я_полотна =форма.елемент_управління.CreateGraphics();
де елемент_управління – це елемент, у якому буде створено полотно для рисунка.
Приклад.
Graphics g = this.pictureBox1.CreateGraphics();
Примітка. Елемент_управління може бути відсутнім, полотно можна розташовувати безпосередньо на формі.
Вибір інструментів малювання
Перо
Методам класуGraphics, що малює контур фігури, необхідно передати перо - об'єкт класуPen, за допомогою якого всі фігури промальовуватимуться на полотні. У конструкторі класуPenможна задати колір пера та його товщину (частіше кажуть "ширину пера"). Колір задається об'єктом класу (структурою)Color.
Щоб створити перо з певними характеристиками, пропишіть у коді команду:
Pen ім'я_пера = new Pen(Color.колір, товщина);
Приклад:
Pen p = New Pen(Color.Red, 1);
Пензель
Щоб зафарбувати створений графічний об'єкт, скористайтеся засобами класуBrush. Цейклас, що задає пензля, влаштований складніше, ніж класPen. КласBrushє абстрактним класом, так що створювати пензлі цього класу не можна, але можна створювати пензлі класів-нащадків Brush. Таких класів п'ять:
- SolidBrush – пензлі для суцільного зафарбування області заданим кольором;
- TextureBrush - кисті для зафарбування області заданою картинкою (image);
- HatchBrush – кисті для зафарбування області зумовленим візерунком;
- LinearGradientBrush – пензлі для суцільного забарвлення з переходом від одного кольору до іншого, де зміна відтінків задається лінійним градієнтом;
- PathGradientBrush – пензлі для суцільного забарвлення з переходом від одного кольору до іншого, де зміна відтінків задається складнішим шляхом.
Перші два класи пензлів знаходяться у просторі імен System.Drawing, решта – у System.Drawing.Drawing2D.
Щоб створити пензель з певними характеристиками, пропишіть в коді команду:
Brush ім'я_пензля = new тип_пензля (параметри_пензля);
Приклад:
Brush b = New SolidBrush(Color.Maroon);
Класифікація методів по об'єктах, що малюються за їх допомогою
Для малювання найважливіші три групи методів.
· До першої відноситься перевантажений методDrawString, що дозволяє виводити тексти в графічному режимі.
· Другу групу складають методиDraw:DrawEllipse, DrawLine, DrawArcта інші, що дозволяють кольоровим пером (об'єктом класуPen) малювати геометричні фігури: лінії, різні криві, прямокутники, багатокутники, еліпси та інше.
· До третьої групи належать методиFill:FillEllipse, FillPie, FillRectangleта інші, що дозволяють намалювати фігуру кольоровим перомі зафарбувати її пензлем (об'єктом класу, похідного відBrush).
Приклади побудови графічних об'єктів
Крива Без'є
Нехай у проекті створена на формі панель Panel1. На цій панелі намалюємо пучок кривих Безьє, що виходять із єдиного центру. Центр пучка збігається з точкою дотику курсору миші до панелі. При натисканні лівої кнопки миші з'являється пучок. При русі миші з лівою натиснутою кнопкою центр пучка переміщається за мишею і криві перемальовуються. Щойно кнопка миші відпускається – малюнок фіксується. Подвійним клацанням миші полотно очищається.

Щоб створити пучок кривих із трьох кривих Безьє, що виходять з точки дотику курсору миші з полотном, виконайте такі дії:
1. Створіть клас глобальних змінних об'єктів: перо, полотно, координати центру пучка та її кінців, індикатора натискання миші.
public class MyMouse
public static Graphics graph; //Полотно
public static Pen MyPen; //перо
public static Point pt, pt1, pt2, pt3;
2. Створіть обробник натискання миші, в якому пропишіть характеристики пера, ініціалізацію змінних координат кривих і полотна. Щоб відстежити положення кнопок миші надалі, задамо індикатору миші значення 1 - "натиснута". При русі миші з натиснутою кнопкою (зі значенням індикатора рівним 1), криві будуть перемальовуватися. При русі миші з не натиснутою кнопкою (зі значенням індикатора рівним 0), криві малюватись не будуть.
private void panel1_MouseDown(object sender, MouseEventArgs e)
MyMouse.MyPen = новий Pen(Color.Azure, 1);
MyMouse.pt = новий Point(); //Центр пучка
MyMouse.pt2 = новий Point();
MyMouse.pt3 = новий Point();
MyMouse.pt1 = новий Point();
3. Створіть обробник віджимання миші, в якому налаштуйте індикатору миші значення 0 – «не натиснуто».
private void panel1_MouseUp(object sender, MouseEventArgs e)
4. Створіть обробник руху миші. Якщо індикатор миші дорівнює одиниці, необхідно прописати в коді: очищення полотна, координати центру пучка, і координати кривих Безье. Як три додаткові точки кривих Безьє використовуються статичні точки, що знаходяться на різних межах полотна. Додаткові точки можна створювати за допомогою датчика випадкових чисел.
private void panel1_MouseMove(object sender, MouseEventArgs e)
//Зчитуємо координати миші та присвоюємо їх координатам центру
MyMouse.pt.X = e.X; MyMouse.pt.Y = e.Y;
//Задаємо колір першої кривої
// Задаємо додаткові точки
MyMouse.pt1.X = 0; MyMouse.pt1.Y = 0;
MyMouse.pt2.X = 0; MyMouse.pt2.Y = panel1.Height;
MyMouse.pt3.X = panel1.Width; MyMouse.pt3.Y = panel1.Height;
// Малюємо першу криву
MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,
MyMouse.pt1.X = panel1.Width; MyMouse.pt1.Y = 0;
MyMouse.pt2.X = panel1.Width; MyMouse.pt2.Y = panel1.Height;
MyMouse.pt3.X = 0; MyMouse.pt3.Y = panel1.Height;
MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,
MyMouse.pt1.X = panel1.Width/3; MyMouse.pt1.Y = panel1.Height / 2;
MyMouse.pt2.X = 2*panel1.Width/3; MyMouse.pt2.Y = panel1.Height/2;
MyMouse.pt3.X = MyMouse.pt.X; MyMouse.pt3.Y = MyMouse.pt.Y;
MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,
5. Створіть обробник подвійного клацання миші, в якому пропишіть команду очищення полотна
private void panel1_MouseDoubleClick(object sender, MouseEventArgs e)
Побудова трикутника
У цьому прикладі створимо код для малювання трикутника. Координати трикутника створюються випадковим чином:
Щоб створити трикутник:
1. Координати вершин трикутника будуть у структурі “Treyg”. Для цього створимо змінні для роботи зі структурою та саму структуру.
public static class tr
public static Pen MyPen;
public struct Treyg
public struct B
public struct C
2. За допомогою датчика випадкових чисел створимо координати вершин трикутника. У цьому прикладі розмір панелі взятий фіксований: 270х240.
private void treyg(object sender)
label1.Visible = false; Random r = new Random();
tr.MyPen = новий Pen(Color.Blue, 1);
tr.Treyg.A.x = r.Next(80)+10; tr.Treyg.A.y = r.Next(70)+10;
tr.Treyg.B.x = r.Next(80) + 80; tr.Treyg.B.y = r.Next(70) + 160;
tr.Treyg.C.x = r.Next(80) + 180; tr.Treyg.C.y = r.Next(70) + 80;
tr.graph.DrawEllipse(tr.MyPen, tr.Treyg.A.x, tr.Treyg.A.y, 2, 2);
tr.graph.DrawEllipse(tr.MyPen, tr.Treyg.B.x, tr.Treyg.B.y, 2, 2);
tr.graph.DrawEllipse(tr.MyPen, tr.Treyg.C.x, tr.Treyg.C.y, 2, 2);
// з'єднуємо їх лініями
tr.graph.DrawLine(tr.MyPen, tr.Treyg.A.x, tr.Treyg.A.y, tr.Treyg.B.x,
tr.graph.DrawLine(tr.MyPen, tr.Treyg.B.x, tr.Treyg.B.y, tr.Treyg.C.x,
tr.graph.DrawLine(tr.MyPen,tr.Treyg.C.x, tr.Treyg.C.y, tr.Treyg.A.x,
3. Малюватимемо трикутник по клацанню миші на панелі:
private void panel1_Click(object sender, EventArgs e)
Створення графіка функції
У цьому прикладі створимо код для побудови графіка функції на інтервалі.

Щоб побудувати графік функції необхідно:
1. Створити об'єкти полотно та перо:
public static class graphiс
public static Pen MyPen;
2. Задати характеристики полотна та пера. Пір'я може бути кілька: для побудови осей і графіків.
graphic.MyPen = новий Pen(Color.Blue, 1);
Визначити позиції початку координат та межі області малювання: X, Y – початок координат, Xmax, Ymax – межі області.
int X, Y, Xmax, Ymax;
Xmax = panel1.Size.Width; Ymax = panel1.Size.Height;
X = Xmax/2; Y = Ymax / 2;
3. Побудувати осі декартової системи координат:
graphic.graph.DrawLine(graphic.MyPen, 0, Y, Xmax, Y);
graphic.graph.DrawLine(graphic.MyPen, X, 0, X, Ymax);
4. Задати крок для розрахунку точок по осі Ох в декартовій системі координат та початкову точку, в даному:
double h = 0.1, Xdec = -4, Ydec = Xdec * Xdec/2-4;
Задати масштаб і перевести координати точки в декартовій системі координат систему координат прийнятої в C#:
int d = 10, Xp = Convert.ToInt16 (Xdec * d) + X, Yp = - Convert.ToInt16 (Ydec * d) + Y;
5. Створити змінні для розрахунку наступної точки та задати цикл для побудови графіка: