Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 7.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
295.94 Кб
Скачать

7.8 Рекомендации по выполнению лабораторной работы

7.8.1 Структура графической Паскаль-программы.

В настоящее время более 50 стандартных графических процедур и функций содержится в стандартном модуле Graph.tpu. Чтобы воспользоваться возможностями модуля graph.tpu, необходимо иметь компьютер, оснащенный видеоадаптером. В состав модуля Graph входит ряд программ-драйверов для наиболее распространенных видеоадаптеров: CGA, MCGA, EGA, VGA, SVGA, Hercules, AT&T, 3270 PC. Эти драйверы хранятся в файлах с расширением .BGI (Borland Graphic Interface). Для множества символов имеются файлы описаний с расширением .CHR.

Любая программа Turbo Pascal, использующая графические процедуры и функции из модуля Graph, имеет следующую типовую структуру:

program prog graph;

uses Graph, Crt,......;

var grDriv, grMod : integer,

к од графического режима •

код видеографического устройства

{ Процедуры и функции}

function F(var x: real) : real

begin

end;

begin

write('Bведите XN, XK:'); { Ввод исходных данных }

readln(Xn, Xk); { в текстовом режиме }

write('Введите количество точек графика: ');

readln(N);

{ Вычисление Yn и Yk и шага изменения аргумента h }

{———— Инициализация графического режима ————}

grDriv := Detect;

I nitGraph(grDriv, grMod, 'D:\TP\BGI');

{ путь к графическому драйверу)

{—-—-— Проверка успешного завершения инициализации ———)

if GraphResult <> GrOK then begin

writeln('Ошибка!!!');

{... обработка кода ошибки.....}

delay(lOOO);

exit

end;

{—————— Основная часть программы ——————}

XNE:=...; { Задание области вывода графика;}

YNE:=...; (можно вводить с клавиатуры или задавать) Xke:=...; {в программе }

Yke:=...;

Мх:=...; { Расчет масштабов )

Му:=..;

{ Установка цветов, типов линий и др.)

х:=хn; { Переход в начало графика }

x:=x+h;

while x < xk do

begin

y:=F(x);

{ Черчение отрезка прямой от предыдущей точки к }

{точке(x,у)}

end;

{ Черчение осей координат }

{Вывод текста }

repeat

until KeyPressed;

{———— Завершение графического режима —————)

CloseGraph

end.

7.8.2 Справочная информация по графическим процедурам и функциям

Графические процедуры и функции, включенные в модуль Graph, можно разделить на следующие группы:

- управляющие графические процедуры и функции;

- графические процедуры и функции для формирования экрана, окна, страницы ;

- графические процедуры и функции для работы с точечными изображениями;

- графические процедуры и функции для работы с графическими примитивами типа "линия";

- графические процедуры и функции для работы с дугами, фигурами, штриховкой;

- графические процедуры и функции для работы с цветом и палитрой;

- графические процедуры и функции для работы с текстом.

Управляющие графические процедуры и функции:

InitGraph (var gt,gm:integer;tpf:string) - процедура.

Инициализирует графический режим работы, код которого возвращается в переменной gm.

В переменной gt пересылается код соответствующего графического драйвера, для этого в модуле Graph.tpu определены следующие константы:

const detect = 0;

CGA=1;

MCGA=2;

EGA=3;

CGA=9;

PC3270=10;

Если перед инициализацией графического режима переменной gt присвоить значение 0, что соответствует константе Detect (см. пример раздела 7.8.1), то графический драйвер выбирается автоматически и определяется подходящий графический режим gm. Путь доступа к графическому драйверу (с расширением .BGI) должен задаваться в строковой переменной tpf. Если здесь стоит пустая строка ' ', то InitGraph осуществляет поиск в текущем каталоге.

CloseGraph - процедура. Удаляет графический драйвер из памяти и осуществляет переход в тот текстовый режим, который бьл установлен перед вызовом InitGraph.

GraphResult - функция. Значением функции является код ошибки последней графической операции. Если значение функции равно 0, это соответствует нормальному завершению последней графической операции.

GraphErrorMsg (errcode:integer) - функция. Генерирует сообщение об ошибке, соответствующее коду ошибки errcode, значение которого определяет функция GraphResult.

Графические процедуры и функции для формирования экрана, окна, страницы:

ClearDevice - процедура. Гасит экран и устанавливает параметры графического драйвера на стандартное значение.

SetViewPort (xl,yl,x2,Y2:intеgеr;clip:boolean) - процедура. Создает окно с левым верхним углом (х1,у1) и правым нижним углом (х2,у2), устанавливая при этом курсор в верхний левый угол окна. Параметр clip устанавливает, пересекают ли символы границы окна.

ClearViewPort - процедура. Содержимое окна гасится и окрашивается в цвет, заданный фоновым.

SetVisualPage (p:word) - процедура. Некоторые графические адаптеры ( например, EGA, VGA, Hercules) поддерживают несколько страниц. Процедура SetVisualPage устанавливает, какая страница видна.

SetActivePage (p:word) - процедура. Устанавливает, на какой странице строится изображение.

GetMaxX - функция. Возвращает максимально возможную координату Х для установленного драйвера и режима.

GetMaxY - функция. Возвращает максимально возможную координату Y для установленного драйвера и режима.

Графические процедуры и функции для работы с точечными изображениями:

PutPixel (x,y:integer;col:word) - процедура. В точке с координатами (х,у) рисуется точка, цвет который определяется значением переменной col.

GetPixel (x,y:integer) - функция. Возвращает номер цвета элемента графического изображения в точке с координатами (х,у).

GetX - функция. Возвращает координату Х текущей позиции курсора.

GetY - функция. Возвращает координату Y текущей позиции курсора.

Графические процедуры и функции для работы с графическими примитивами типа "линия":

Line (xl,yl,x2,y2:integer) - процедура. Вычерчивает отрезок прямой от точки (х1,у1) до точки (х2,у2). Тип линии устанавливается процедурой SetLineStyle. Положение курсора не меняется.

LineTo (х,у: integer) - процедура. Вычерчивает отрезок прямой из текущей позиции курсора до точки (х,у). После вызова процедуры положение курсора (х,у).

LineRel (dx,dy:integer) - процедура. Курсор находится в позиции (х,у), начиная с которой вычерчивается прямая до точки (х+dx, y+dy).

MoveTo (x,y:integer) - процедура. Устанавливает курсор в точку (х,у).

MoveRel (dx,dy:integer) - процедура. Перемещает курсор из текущей позиции (х,у) в точку (x+dx,y+dy).

SetLineStyle (stil,muster,w:word) - процедура. Устанавливает тип линии для следующих операций над графическими изображениями ( Line, LineTo, Arc, Circle, DrawPoly, Rectangle ). Для переменной stil в модуле Graph определены следующие константы:

const

solidln = 0; { сплошная линия }

dotteln = 1; { пунктирная линия }

centerln = 2; { штрихпунктирная линия}

dasheln = 3; { штриховая линия }

userbitln = 4; { определенная пользователем линия }

Параметр muster имеет значение только при stil = userbitln. Для параметра w определены следующие константы:

const

normwidth = 1; { обычная толщина }

thickwidth = 3; { жирная линия )

Графические процедуры и функции для работы с дугами, фигурами, штриховкой:

Arc (x,y:integer;w1, w2, r:word) - процедура. Из центра (х,у) вычерчивает дугу радиусом г от угла wl до угла w2. Угол задается в градусах.

Circle (x,y:integer;r:word) - процедура. Вычерчивает окружность радиусом r с центром в точке (х,у).

Rectangle (xl,yl,x2,y2:integer) - процедура. Вычерчивает прямоугольник с координатами левого верхнего угла (х1,у1) и координатами правого нижнего угла (х2,у2).

Bar (xl,yl,x2,y2:integer) - процедура. Вычерчивает прямоугольник с координатами левого верхнего угла (xl,yl) и координатами правого нижнего угла (х2,у2), причем прямоугольник закрашивается в соответствии с образцом, заданным процедурами SetFillStyle или SetFillPattern.

Bar3d (xl,yl,x2,y2:integer;t:word;top:boolean) - процедура. Вычерчивает трехмерный брусок с прямоугольным основанием с координатами (х1,у1) и (х2,у2). Переменная t задает пространственную глубину в элементах изображения. Прямоугольник заполняется в соответствии с образцом, заданным процедурами SetFillStyle или SetFillPattern. Переменная top задает, должен ли брусок иметь верхнее замыкание или нет.

DrawPoly (an:word;var p) - процедура. Вычерчивает многоугольник с an вершинами. Переменная р является массивом, содержащим координаты вершин, то есть переменная р имеет тип аггау[1..аn] of pointtype, где

type pointtype = record

х,у: word;

end;

FillPoly (an:word;var p) - процедура. Вычерчивает многоугольник с an вершинами. Координаты точек могут задаваться через определенный в модуле graph тип pointtype. После того как многоугольник построен (последняя точка должна совпадать с первой, чтобы ломанная замкнулась), он заполняется в соответствии с образцом, определенными процедурами SetFUlStyle или SetFUlPattern.

SetFUlStyle (muster,f:word) - процедура. Устанавливает образец для заполнения площадки. Для muster существуют следующие константы:

const

emptyfill = 0; { Заполнение цветом фона )

solidfill = 1; { Сплошное заполнение }

linefill=2; {——}

Ltslashfill=3; {\\\\}

slashfill = 4; {\\\\, линии утолщенные}

bkslashfill = 5; {////,линии утолщенные }

Ltbkslashfill=6; {////}

hatehfill = 7; { легкая штриховка}

xhatchfill = 8; { частая штриховка, пересекающаяся } interleavefill = 9; { чередующиеся линии}

widedofill =10; { далеко отстоящие одна от другой точки } closedotfill =11; { жирные точки}

Переменная f определяет цвет заполнения.

SetFiIlPattern (mustcr:fillpatterntype;f:word) - процедура. Устанавливает образец заполнения и цвет для одной из вызываемых процедур FillPoly, FloodFiIl, Bar, Bar3d, Pieslice. Для этого в модуле Graph имеется тип

type

fillpatterntype = аrrау[1 ..8] of byte;

При этом каждому биту этого массива соответствует один элемент изображения (пиксел). Каждый байт определяет восемь расположенных рядом точек. Восемь байтов устанавливаются один за другим. Переменная f устанавливает цвет заполнения.

FloodFill (x,y,rand:word) - процедура. Если точка (x,y) находится внутри ограниченной некоторыми линиями цвета rand поверхности, она закрашивается в соответствии с образцом, определенными процедурами SetFillStyle или SetFillPattern.

Pieslice (x,y:integer;wl,w2,r:word) - процедура.Из центра (х,у) вычерчивает дугу радиусом г от угла wl до угла w2. Угол задается в градусах. Затем такая "вырезка" заполняется согласно установленному с помощью SetFillStyle или SetFillPattern образцу.

Ellipse (x,y:integer;al,a2,rX,rY:word) - процедура. Вычерчивает эллиптическую дугу радиусами гХ, rY от угла а1 до угла а2, координаты точки (х,у) задают центр эллипса.

Графические процедуры и функции для работы с цветом и палитрой:

SetBkColor (f:word) - процедура. Переменная f устанавливает фоновый цвет.

SetCoIor (f:word) - процедура. Переменная f устанавливает текущий цвет.

Графические процедуры и функции работы с текстом:

OutText (str: string) - процедура. С позиции курсора выводится строка str. Автоматической переверстки строк не производится. Шрифт устанавливается с помощью процедур SctTextJustify, SetTextStyle, SetUserCharSize.

OutTextXY (x,y: integer; str: string) - процедура. Строка str выдается, начиная с позиции (х,у). Прочее как для OutText.

SetTextStyle (font,dir,gr:word) - процедура. Для следующего вывода текста задаются шрифтовой фонт, наклон и размер символов. Параметр Font может принимать значения 0,1,... 7 (или соответствующие обозначения констант:

defaulfont = 0, sansseriffont = 3,

triplexfont = 1, gothicfont = 4,

smallfont = 2 и др.).

Параметр Dir может принимать значения HorizDir = 0 (слева направо) или VertDir = 1 (снизу вверх, строка повернута на 90 градусов против часовой стрелки). Параметр gr может принимать значения NormSize = 1 (или 0) или 2, 3,...; в первом случае используются минимальные размеры выбранного шрифта (размеры по умолчанию).

SetUserCharSize (mx,dx,my,dy:word) - процедура. Устанавливает коэффициенты увеличения символов по осям OX, OY:

"Ширина символа новая" = "Ширина символа" * Мх / Dx,

"Высота символа новая" = "Высота символа" * My / Dy.

InstaIlUserFont (font: string) - процедура. Устанавливает шрифт символов, определенный пользователем. Все шрифты символов хранятся в файлах с расширением .CHR и по мере необходимости пользователь может устанавливать тот или иной шрифтовой фонт. В переменной font должно представлено имя файла с расширением .CHR, который необходимо использовать, например,

font := InstaIlUserFont ('russ.chr');

SetTextStyle (font,vertdir,2);

SetTextJustify (hor,vert:word) - процедура. Устанавливает параметры расположения строки относительно курсора.

Hor=0 (LeftText); Vert=0 (BottomText);

Hor=1 (CenterText ); Vert=1 (CenterText);

Hor=2 (RightText ); Vert=2 (TopText).