Смекни!
smekni.com

Відображення на екрані дисплея графічної інформації (стр. 2 из 2)

б) для ініціалізації графічного режиму використовують процедура InitGraph;

в) завершує графічний режим процедура CloseGraph;

г) структура графічної Паскаль-програми практично не відрізняється від стандартної структури;

д) модульGRAPH містить широкий набір процедур та функцій роботи з відеорежимами.

6. Побудови графічних об’єктів

Побудова геометричних фігур

Для побудови зображення у графічному режимі використовують систему координат, яка відрізняється від текстового режиму (екран представляється у вигляді прямокутного масиву символів і координати Х, У починаються з 1 …maxзначення).

Відлік координат починається з верхнього лівого кута екрана з координатами (0, 0). При цьому екран представляється у вигляді прямокутного масиву адресуємих точок (пікселів). Для різних типів адаптерів та режимів кількість точок по вертикалі та горизонталі суттєво відрізняється.

Для визначення максимальних значень координат екрану, в модулі GRAPH використовують функції:

GetMax X : integer;

GetMax Y : integer.

Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.

Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображаємого на екрані курсору не має, але є скритий поточний показчик СР (currentpointer), який виконує аналогічні функції курсору текстового режиму.

В графічному режимі для переміщення СР використовують процедури:

1) MoveTo (x, y : integer) – переміщує поточний показчик СР в точку з координатами x, y;

2) MoveRel (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) процедура SetColor (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 значення:

NormWidth = 1

ThickWidTh = 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 константи:

TopOn = TRUE – верхня грань відображається;

TopOff = FALSE – верхня грань не відображається.

Будова многокутників.

Многокутники можна зображати декількома способами: наприклад, за допомогою процедур Line, LineTo.

Паскаль також містить процедури, які дозволяють будь-які многокутники.

1) процедура DrowPoly (n : word; varpoints); створює многокутник за допомогою ліній поточного кольору, стиля і товщини. Параметр n – кількість точок ламаної; points – змінна типу PointType, яка містить координати x, yточок ламаної.

В модуліGRAPH передбачений такий тип:

Type

PoinType = RECORD

x, y : integer;

end;

2) процедура FillPoly (n : word; var points); схожа з попередньою, але навідміну від неї – малює замкнутий многокутник і зафарбовує його. Стиль і колір лінії і контура задається процедурами SetLineStyleiSetColor, тип і колір заповнення – процедурою 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); встановлює стиль тексту. Параметри: код шрифту, код орієнтації символів, розмір символів.

1. Відображення цифрової інформації.

В модулі GRAPH засоби відсутні. Але можна використовувати наступний спосіб: спочатку перетворити число або цифру в рядок за допомогою процедури Str, а далі операцією конкатенації (+) поєднати її з рядком, який відображається процедурою OutTextXY.

Приклад:

Max := 3.14;

Str (Max : 4 : 2, Smax);

OutTextXY (400, 40, ‘Max=’ + Smax);

Висновки: таким чином модульGRAPHмістить достатньо потужні засоби побудови і відображення різноманітної графічної інформації (геометричні фігури в комбінації з текстом і числами).