Системи координат

Верхній лівий кут графічного екрану має координати (0, 0). Значення Х (номера стовпця) збільшується зліва направо. Значення Y (номер рядка) збільшується зверху вниз.

Для графічного адаптера VGA в режимі VGAHI=2 координати екрана для кожного з чотирьох кутів буде виглядати таким чином:

(0, 0) – лівий верхній кут;

(0, 639) – правий верхній кут;

(320, 240) – центр;

(0, 479) – лівий нижній кут;

(639 х 479) – правий нижній кут.

При роботі драйверами у графічному режимі можна використовувати функції, що визначають максимальні значення координат:

· Function GetMaxX: Integer – повертає максимальну координату Х для по-точного драйвера в поточному режимі.

· Function GetMaxY: Integer – повертає максимальну координату Y для по-точного драйвера в поточному режимі.

Графічна система Turbo Pascal підтримує поточний вказівник, який має ті ж властивості, що і курсор в текстовому екрані, але є невидимим. Для переміщен-ня цього вказівника на графічному екрані використовуються процедури MoveTo(X, Y), MoveRel(Dx, Dy), LineTo(X, Y), LineRel(Dx, Dy):

Процедура MoveTo(X, Y : Integer) – переміщує поточний вказівник коорди-нат в точку вікна з координатами (X, Y). Ця процедура еквівалентна процедурі GotoXY для текстового екрану.

Процедура MoveRel(Dx, Dy : Integer) – переміщує поточний вказівник координат на задане зміщення Dx, Dy.

Процедура LineTo(X, Y : Integer) – проводить лінію з поточної позиції поточного кольору в точку з заданими координатами (X, Y).

Процедура LineRel(Dx, Dy : Integer) – проводить лінію з поточної позиції поточного кольору в точку, зсунуту на зміщення Dx, Dy.

 

8.1.3. Вибір кольорів в графічному режимі

Перед тим, як почати створювати графічні образи, необхідно очистити екран, задати кольори фону та зображення. Для роботи з кольоровою палітрою в графічному режимі Tutbo Pascal використовуються такі процедури і функції:

· ClearDevice – процедура, яка очищує екран.

· SetColor(Color: Word) – процедура, яка задає колір пікселів для рисування. Параметр Color задає номер кольру в палітрі.

· SetBkColor(Color: Word) – процедура, яка задає колір фону.

· GetColor – функція, яка повертає номер кольору в палітрі зображень, який задається процедурою SetColor.

· GetBkColor(Цвет) – функція, яка повертає номер кольору для фону в палітрі зоображень, який задається процедурою SetBkColor.

· CloseGraph – закриває графічний режим і завантажує текстовой режим.

Константи, які використовуються для завдання кольорів:

Black = 0 – чорний.

Blue =1 – синій.

Green= 2 – зелений.

Cyan = 3 – голубий.

Red = 4 – червоний.

Magenta = 5 – фіолетовий.

Brown= 6 – коричневий.

LightGray = 7 – світло-сірий.

DarkGray = 8 – темно-сірий.

LightBlue= 9 – світло-синій.

LightGreen = 10 – світло-зелений.

LightCyan = 11 – світло-голубий.

LightRed =12 – світло-червоний.

LightMagenta = 13 – світло-фіолетовий.

Yellow = 14 – жовтий.

While=14 – білий.

 

8.1.4. Завдання стилів ліній та заливки контурів

Графічний режим Turbo Pascal підтримує різноманітні засоби для рисування та заповнення фігур, включаючи точку, лінії, кола, дуги еліпси, прямокутники, діаграми, трьохвимірні та секторні діаграми.

Для установлення товщини і стилю (суцільна, пунктирна чи нарисована) лінії використовується процедура:

SetLineStyle(LineStyle:Word; Pattern: Word; Thickness: Word);

Thickness – товщина лінії. Якщо Thickness рівний ThickWidth, то линії будуть товстими, якщо NormWidth, то звичайними.

LineStyle – стиль лінії, який може мати значення:

SolidLn = 0 – звичайна, суцільна.

DotteLn = 1 – пунктирна.

CenterLn= 2 – осьова.

DashedLn =3 – штрихова.

UseBitLn = 4 – задана користувачем.

Pattern – шаблон лінії – задається лише в тому випадку, якщо LineStyl=UseBitLn.

Подається у вигляді двохбайтового числа, кожен біт якого рівний 1, якщо черговий піксель слід висвітлити, і нуль – у противному випадку.

Процедура:

SetFillStyle(Pattern:Word; Color:Word);

встановлює стиль і колір заливки. Якщо Pattern равно UserFill, то використовується визначений користувачем стиль, описаний процедурою SetFillPattern.

Наведемо значення найчастіше використовуваних параметрів стилю заливки:

· EmptyFill = 0 – заповнення кольором фону.

· SolifFill = 1 – однорідне заповнення заданим кольором.

· LineFill = 2 – штрихування горизонтальними лініям.

· LtSlashFill = 3 – штрихування косими лініями.

· HatcheFill = 7 – штрихування символом +.

· CloseDotFill= 11 – густе штрихування крапками.

Процедура:

SetFillPattern(Pattern:FillPatternType; Color:Word);

встановлює визначений користувачем стиль і колір заливки, де

FillPatternType=Array [1..8] of Byte;

 

8.1.5. Виведення тексту в графічному режимі

Для виведення тексту використовуються дві процедури:

Procedure OutText(TextString: String);

виводить на екран послідовність символів, починаючи з поточної позиції. Поточний колір тексту задається процедурою SetColor. Параметри шрифту – процедурами SetTextStyle та SetTextJustify. Ширину та висоту рядка визначають за допомогою функцій TextWidth, TextHight.

Procedure OutTextXY(X, Y: Integer; TextString: String);

виводить на екран послідовність символів, починаючи з заданих координатою (X, Y). Параметри тексту задаються так само, як і для процедури OutText.

Текст виводиться стилем, що задається процедурою:

Procedure SetTextStyle(Font: Word: Direction: Word; CharSize: Word);

встановлюється поточний тип шрифта, напрямку тексту і розмір символів.

В модулі Graph визначені такі константи для параметру Font:

DefaultFont = 0 – матричний шрифт.

TriplexFont=1 – жирний шрифт.

SmallFont =2 – тонкий шрифт.

SansSerifFont = 3 – прямий шрифт.

GothicFont = 4 – готичний шрифт.

Для всіх видів шрифтів, крім першого, є відповідні файли Trip.chr, Litt.chr, Sans.chr, Goth.chr. Матричний (або стандартний) шрифт входить до складу модуля Graph, тобто завжди доступний.

Виводити можна коди ASCII від 32 до 127. Для того, щоб використовувати символи з кодами від 128 до 255 треба мати додаткову програму їх підтримки.

Параметр Direct приймає одне із двох значень:

Horizdir = 0 – визначає напрямок виведення тексту зліва направо.

VertDir = 1 – визначає вертикальний напрям виведення тексту.

Останній параметр CharSize регулює розмір відображуваний символів. Це своєрідний коефіцієнт збільшення розміру символу по ширині та висоті. Якщо він рівний 1, символ має розміри 8х8 пікселів, якщо 2 – 16х16 пікселів і т.п. Найбільше значення коефіцієнту – 10.

Спосіб вирівнювання тексту при виведенні його з використанням процедур OutText та OutTextXY задається процедурою:

Procedure SetTextJustify(Horiz, Vert: Word);

Тут Horiz, Vert – параметри вирівнювання по горизонталі і вертикалі, що можуть приймати значення:

LeftText = 0 – ліве вирівнювання.

CenterText= 1 – вирівнювання по центру.

RightText= 2 – праве вирівнювання.

BottomText =3 – нижнє вирівнювання.

TopText= 4 – верхнє вирівнювання.

 

8.1. 6. Процедури для рисування фігур

Для рисування фігур в модулі Graph використовуються такі процедури:

Procedure PutPixel(X, Y: Integer; Pixel: Word);

Рисує на екрані точку p з координатами (X, Y) кольором Pixel.

Procedure Line(X1, Y1, X2, Y2: Integer);

Рисує на екрані відрізок прямої від точки (X1, Y1) до точки (X2, Y2).

Procedure Rectangle(X1, Y1, X2, Y2: Integer);

Рисує на екрані прямокутник с верхнім лівим кутом в точці (X1, Y1) і нижнім правим кутом в точці (X2, Y2).

Procedure Bar(X1, Y1, X2, Y2: Integer);

Рисує на екрані залитий прямокутник з верхнім лівим кутом в точці (X1, Y1) і нижнім правим кутом в точці (X2, Y2). Стиль і колір заливки задаються процедурою SetFillStyle.

Procedure Bar3D(X1, Y1, X2, Y2: Integer; Depth: Word; Top: Boolean);

Рисує на екрані паралелепіпед с залитою передньою гранню. Глибина фігуры – Depth. Якщо Top рівне TopOn, то паралелепіпед рисується з верхньою гранню, якщо TopOff – то без верхньої грані. Стиль і колір заливки передньої грані зада-ються процедурою SetFillStyle.

Procedure Circle(X, Y: Integer; Radius: Word);

Рисує на екрані коло з центром в точці (X, Y) радіусом Radius.

Procedure Ellipse(X, Y: Integer; StAngle, EndAngle: Word; XRadius, YRadius: Word);

Рисує на екрані еліптичну дугу з центром в точце (X, Y), радіусами XRadius, YRadius. StAngle, EndAngle – початкові і кінцеві кути.

Procedure Arc(X, Y: Integer; StAngle, EndAngle: Word; Radius: Word);

Рисує на екрані дугу кола з центром в точце (X,Y), радіусом Radius. StAngle, EndAngle – початковий і кінцевий кути.

Procedure FillEllipse(X, Y: Integer; XRadius,YRadius: Word);

Рисує на екране залитий еліпс з центром в точці (X, Y), радіусами XRadius, YRadius. Стиль і колір заливки задаються процедурой SetFillStyle.

Procedure Sector(X, Y: Integer; StAngle, EndAngle: Word; XRadius, YRadius: Word);

Рисує на екрані замальований сектор еліпса з центром в точці (X, Y), радіусами XRadius, YRadius. StAngle, EndAngle – початковий і кінцевий кути. Стиль і колір заливки задаються процедурою SetFillStyle.

Procedure PieSlice(X, Y: Integer; StAngle, EndAngle: Word; Radius: Word);

Рисує на екрані замальований сектор круга з центром в точці (X, Y), радіусом Radius. StAngle, EndAngle – початковий і кінцевий кути. Стиль і колір заливки задаються процедурою SetFillStyle.