Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображеного на екрані курсору не має, але є скритий поточний покажчик СР (current pointer), який виконує аналогічні функції курсору текстового режиму.
В графічному режимі для переміщення СР використовують процедури:
1) Move To (x, y: integer) – переміщує поточний покажчик СР в точку з координатами x, y;
2) Move Rel (dx, dy: integer) – переміщує СР на dx точок по горизонталі і на dy точок по вертикалі відносно останнього положення поточного покажчика. Якщо dx, dy більше 0, то координати СР збільшуються; якщо менше 0 – зменшуються.
Для визначення поточного розташування графічного курсору СР використовують функції:
GET X : integer;
GET Y : integer;
які повертають значення поточних координат показчика.
Приклад 1:позиціонування графічного курсору та визначення його координат:
Uses GRAPH;
var Driver, Mode : integer;
begin
Driver := Detect;
InitGraph (Drive, Mode, ‘’);
if GraphResult <> 0 then
begin
writeln (‘ошибка’);
halt (1);
end;
Move To (GetMax X div 2, GetMax Y div);
OutTextXY (GET X, GET Y, ‘курсор по центру’);
MoveRel (-GET X div 2, -GET Y div 2);
OutTextXY (‘Курсор переміщений’);
readln;
CloseGraph;
end.
Установка кольору та стилю.
1) процедура Set Color (Color : word); встановлює поточний колір для ліній та символів. Параметр Color позначає номер кольору від 0 до 15:
Таблиця 1.
Black = 0 | Light Gray = 7 |
Blue = 1 | Darc Gray = 8 |
Green 2 | Light Blue = 9 |
Cyan =3 | Light Green = 10 |
Red = 4 | Light Cyan = 11 |
Magente = 5 | Light Red = 12 |
Brown = 6 | Light Magente = 13 Yellow = 14 White = 15 Blink = 128 |
2) процедура SetBKColor (Color : word); встановлює колір фону, який визначається параметром Color.
3) процедура SetFillStyle (Fill, Color : word); встановлює стиль (тип і колір) заповнення фрагментів зображення.
Геометричні побудови.
1) Відображення точки:
В модулі Graph для відображення точки використовують процедуру:
PutPixel (x, y : integer);
x, y – координата точки;
Color – її колір (значення беруть зі встановленої палітри).
2) Відображення ліній:
а) Процедура:Line (x1, y1, x2, y2: integer);
x1, y1, x2, y2 – координати початкової і кінцевої точок лінії. Лінія креслиться поточним стилем і поточним кольором.
б) Процедура: LineTo (x, y: integer); будує лінію від точки поточного розміщення покажчика до точки з координатами (x,y).
в) Процедура:LineRel (dx, dy: integer); проводить відрізок від точки поточного розміщення на величину заданого приросту.
г) Процедура: SetLineStyle (Type, Pattern, Thich: word); встановлює стиль відображення ліній, де параметри – це відповідно тип, шаблон і товщина лінії. Тип лінії задається константою з таблиці 3:
Таблиця 3
Const | Значення | Характеристика |
SolidLn | 0 | Безперервна |
PottedLn | 1 | Пунктирна |
CenterLn | 2 | Штрих-пунктирна |
DashedLn | 3 | Штрихова |
UserBitLn | 4 | Задана |
Параметр Pattern тільки для ліній типу UserBitLn і може приймати значення від 1..65536, тобто 2 байта кожен біт (із 16 біт слова) може приймати значення 0 або 1 (піксель не світиться або світиться). Таким чином параметр Pattern задає відрізок ліній, довжиною 16 пікселів. Цей шаблон періодично повторюється по всій довжині ліній.
Параметр Thich приймає 2 значення:
Norm Width = 1
Thick WidTh = 3
Побудова прямокутників та паралелепіпедів.
1) Процедура Rectangle (x1, y1, x2, y2: integer); створює прямокутник з координатами x1, y1 – лівого верхнього кута і x2, y2 – правого нижнього кута. Область середини прямокутника не зафарбована і співпадає з кольором фону екрану. Для ліній прямокутника використовується поточний стиль ліній і колір (заданий).
2) Процедура Bar (x1, y1, x2, y2: integer); утворює прямокутник, внутрішня область якого заповнюється поточним стилем (тип і колір). Параметри процедури – відповідні координати лівого верхнього та правого нижнього кутів. Використовують для побудови гістограм, діаграм і т.п.
3) Процедура Bar3D (x1, y1, x2, y2 : integer; D3 : word; Top: boolean); відображає паралелепіпед (трьохмірне зображення) і зафарбовує його передню грань поточним стилем. X1..Y2 – координати лівого верхнього та правого нижнього кута передньої грані; D3 – трьохмірне зображення "глибина" у пікселях; Top – задає режим відображення верхньої грані. В модулі GRAPH для режиму Top визначені 2 константи:
Top On = TRUE – верхня грань відображається;
Top Off = FALSE – верхня грань не відображається.
Будова многокутників.
Многокутники можна зображати декількома способами: наприклад, за допомогою процедур Line, LineTo.Паскаль також містить процедури, які дозволяють будь-які многокутники.
1) процедура DrowPoly (n: word; var points); створює многокутник за допомогою ліній поточного кольору, стиля і товщини. Параметр n – кількість точок ламаної; points – змінна типу PointType, яка містить координати x, y точок ламаної.
В модулі GRAPH передбачений такий тип:
Type
PoinType = RECORD
x, y : integer;
end;
2) Процедура FillPoly (n : word; var points); схожа з попередньою, але навідміну від неї – малює замкнутий многокутник і зафарбовує його. Стиль і колір лінії і контуру задається процедурами SetLineStyle i SetColor, тип і колір заповнення – процедурою SetFillStyle.
3) Процедура FloodFill (x, y: integer; Border: word); служить для заповнення заданим стилем (SetFillStyle) області в середині або зовні замкненого контуру. Параметри: x, y – координати точки в середині або зовні контуру; Border – задає колір контуру. Якщо контур незамкнений то буде заповнення всього екрану заданим стилем.
Побудова кола, дуги та еліпсу.
1) Процедура Circle (x, y: integer; r: word); зображає коло поточного кольору, товщини і вид лінії. Параметри x, y – координати центру кола, r – радіус у пікселях.
2) Процедура Arc (x, y: integer; StAngle, EndAngle, r: word); креслить дугу кола. Задається координатами центру кола, початковим та кінцевим кутами ( у градусах), які відраховуються від горизонтальної вісі проти часової стрілки; радіус кола у пікселях.
3) Процедура Ellipse (x, y: integer; StAngle, EndAngle, xr, yr, r: word); призначена для побудови еліптичних дуг. Параметри: координати центру, початковий та кінцевий кути, горизонтальний та вертикальний радіуси еліпсу у пікселях.
4) Процедура Sector (x, y : integer; StAngle, EndAngle, rx, ry, r : word); відображає сектор еліпсу, який заповнюється поточним стилем. Параметри аналогічні.
5) Процедура FillEllipse (x, y : integer; xr, yr : word); креслить контур еліпсу поточним кольором і заповнює поточним стилем. Параметри: координати центру, горизонтальний та вертикальний радіуси еліпсу.
6) Процедура PieSlice (x, y: integer; StAngle, EndAngle, r: word); зображає сектор кола і заповнює поточним стилем. Зручно використовувати для побудови кругових діаграм.
Програмування графіки в комбінації з текстом.
Відображення тексту у графічному режимі має ряд особливостей:
1) всі дії виконуються тільки з рядковими константами і змінними, тому вся чисельна інформація повинна перетворюватись в символьну;
2) можливість використання різноманітних шрифтів.
Розглянемо основні засоби модуля GRAPH для виведення текстової інформації:
а) Процедура OutText (text : string); виводить на екран рядок тексту, починаючи з поточного розміщення графічного курсору СР;
б) Процедура OutTextXY ( x, y, text ); виводить рядок тексту починаючи з указаних координат;
в) Процедура SetTextStyle (Font, Direct, size : word); встановлює стиль тексту. Параметри: код шрифту, код орієнтації символів, розмір символів.
Відображення цифрової інформації.
В модулі GRAPH засоби відсутні. Але можна використовувати наступний спосіб: спочатку перетворити число або цифру в рядок за допомогою процедури Str, а далі операцією конкатенації (+) поєднати її з рядком, який відображається процедурою OutTextXY.
Приклад:
Max := 3.14;
Str (Max : 4 : 2, Smax);
OutTextXY (400, 40, ‘Max=’ + Smax);
Висновки: таким чином модуль GRAPH містить достатньо потужні засоби побудови і відображення різноманітної графічної інформації (геометричні фігури в комбінації з текстом і числами).