Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания на РГР ПЯВУ.pdf
Скачиваний:
45
Добавлен:
12.03.2015
Размер:
747.05 Кб
Скачать

Detect = 0.

Константа Detect используется для указания необходимости автоматического распознавания, имеющегося в наличии графического адаптера.

После задания драйвера для указания соответствующего режима можно воспользоваться следующими константами:

EgaHi = 1 - экран 640 на 350 точек с 16 цветами VgaHi = 2 - экран 640 на 480 точек с 16 цветами

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

InitGraph (var GrDr:integer; PathDr: string), где параметры переменные GrDr и GrMod определяют используемый драйвер и режим, а параметр PathDr определяет путь к графическому драйверу в соответствии с правилами MS/DOS. В простейшем случае параметр PathDr можно задать как пустую строку, что соответствует ситуации, когда графический драйвер находится в текущем каталоге. Теперь можно привести два варианта инициализации графического режима - с явным и автоматическим заданием драйвера и режима:

Вариант 1:

var GrDr,GrMod: integer;

begin

GrDr:=Vga; {используется драйвер VGA}

GrMod:=VgaHi;

InitGraph(GrDr,GrMod,’’);

Вариант 2:

var GrDr,GrMod: integer;

begin

GrDr:= Detect; {требуется автоопределение}

InitGraph(GrDr,GrMod,’’);

7

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

Вывод основных графических примитивов.

Любое сложное изображение, в конечном счете, составляется из набора нескольких простейших геометрических элементов, называемых примитивами. Система Турбо Паскаль предлагает следующий набор графических примитивов: точка, отрезок, окружность, дуга, дуга эллипса, прямоугольник, круговой сектор, сектор эллипса, многоугольник, текст.

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

Установка цвета вывода примитива производится процедурой

SetColor(цвет: integer),

где 0<=цвет<=15 и цветовая палитра совпадает с текстовым режимом. Установка цвета фона производится процедурой

SetBkColor(цвет: integer).

Установка типа и толщины линии - процедурой

SetLineStyle(тип_линии, образец, толщина: integer).

Для задания типа линии предусмотрены следующие константы: SolidLn=0 - непрерывная линия;

DottedLn=1 - точечная линия; CenterLn=2 - штрихпунктирная линия; DoshedLn=3 - пунктирная линия;

UserBitLn=4 - тип линии, определяемый пользователем;

8

в этом случае параметр ‘ образец ’ задает образец линии; во всех остальных случаях следует брать ‘образец’=0.

Замечание: атрибут ‘тип линии’ действует только для прямолинейных примитивов. Для задания толщины линии можно использовать следующие 2 константы:

NormWidth=1 - нормальная толщина; ThickWidth=3 - утолщенная линия.

Установка шаблона и цвета закраски замкнутых областей производится с помощью процедуры

SetFillStyle(шаблон,цвет: integer).

Для задания шаблона можно использовать следующие константы: EmptyFill=0 - закраска фоновым цветом;

SolidFill=1 - закраска заданным цветом; LineFill=2 - закраска шаблоном вида - - - - - - -; LtSlashFill=3 - закраска шаблоном вида / / / / / /;

SlashFill=4 - закраска шаблоном из толстых линий ////////;

BkSlashFill=5 - закраска шаблоном из толстых линий \\\\\\\;

LtBkSlashFill=6 - закраска шаблоном вида \ \ \ \ \ \; HatchFill=7 - закраска редкой штриховкой; XHatchFill=8 - закраска пересекающейся штриховкой; InterLeaveFill=9 - закраска прерывистой линией; WideDotFill=10 - закраска редкими точками; CloseDotFill=11 - закраска частыми точками.

Пользователь имеет возможность создавать свои собственные шаблоны заполнения с помощью процедуры SetFillPottern.

Для рисования т о ч к и на экране используется процедура

PutPixel(x,y,цвет: integer).

9

Точка - наименьший адресуемый элемент изображения, который принято называть пикселом. Можно запросить цвет заданной точки экрана, обратившись к функции

GetPixel(x,y: integer): integer.

Для вывода о т р е з к а прямой линии используются процедуры

Line(x1,y1,x2,y2: integer) - отрезок от (x1,y1) до

(x2,y2);

LineTo(x,y: integer)- отрезок от текущей точки до точки (x,y);

LineRel(dx,dy: integer) - отрезок от текущей точки до точки, определяемой смещением dx, dy.

Для задания текущей точки имеется специальный указатель текущей позиции (УТП), который аналогичен курсору в текстовом режиме, но в отличие от него невидим на экране. Изменение значения УТП отслеживается графическими процедурами. Для перемещения УТП можно использовать следующие процедуры:

MoveTo(x,y: integer) - перемещение УТП в точку (x,y);

MoveRel(dx,dy: integer) - смещение УТП на (dx,dy)

относительно его исходного положения.

Можно запросить значения УТП, обратившись к целочисленным функциям GetX и GetY, которые аналогичны функциям WhereX и WhereY для текстового режима.

Вывод прямоугольника с горизонтальными и вертикальными сторонами производится процедурой

Rectangle(x1,y1,x2,y2: integer),

где (x1, y1) - левый верхний угол, а (x2, y2) - правый нижний угол прямоугольника.

Вывод окружности с центром (x1, y1) и радиусом R производится процедурой

10

Circle(x,y,R: integer).

Вывод дуги окружности производится процедурой

Arc(x,y,нач_угол,кон_угол,R: Integer),

где (x, y) - центр образующей окружности радиуса R, а нач_угол и кон_угол задают начальный и конечный угол дуги (в градусах); дуга рисуется против часовой стрелки в соответствии с общепринятыми соглашениями.

Вывод дуги эллипса производится процедурой

Ellipse(x,y,нач_угол,кон_угол,RX,RY: integer),

где (x, y) - координаты центра, RX и RY - полуоси, а нач_угол и кон_угол задают начальный и конечный углы дуги, аналогично дуге окружности; если нач_угол=0, а кон_угол=359, то будет нарисован полный эллипс.

Вывод контура многоугольника производится процедурой

DrawPoly(n: integer; var коорд_верш),

где n - число вершин, а параметр-переменная коорд_верш определяет координаты всех вершин многоугольника. Тип этого параметра не задан, поэтому он называется не типизированным, что является н е с т а н д а р т н о й возможностью системы Турбо Паскаль. Соответствующий фактический параметр может быть л ю б о г о типа. Например, удобно этот фактический параметр описать как массив записей вида:

var коор : array[1..n] of record

x,y: integer

end;

При вычерчивании замкнутого многоугольника с m вершинами начальная и конечная вершины рассматриваются как две отдельные вершины, координаты которых одинаковы, поэтому n=m+1.

11

Для построения закрашенного многоугольника можно использовать процедуру

FillPoly(n: integer; var коорд_верш),

где формальные параметры полностью аналогичны предыдущей процедуре.

Отличие данной процедуры от предыдущей состоит в том, что сначала рисуется контур многоугольника с использованием цвета, типа и толщины линий, заданных процедурами SetColor и SetLineStyle, а затем многоугольник закрашивается в соответствии с шаблоном и цветом, заданными процедурой

SetFillStyle.

Аналогичные действия, но по отношению к произвольной замкнутой области, выполняется процедура

FloodFill(x,y,цвет_гран: integer).

Она заполняет замкнутую область с границей, определяемой заданным цветом (параметр цвет_гран), в соответствии с заданным шаблоном закраски. Если точка (x, y) находится внутри области, то закрашивается внутренность области, иначе - весь экран за исключением заданной области.

Для вывода закрашенного кругового сектора можно использовать процедуру

PieSlice(x,y,нач_угол,кон_угол,R: integer),

где формальные параметры полностью аналогичны параметрам процедуры Arc.

Контур сектора вычерчивается в соответствии с заданным цветом, типом и толщиной линии, а потом закрашивается в соответствии с заданным шаблоном и цветом закраски.

Аналогичная процедура для закраски эллиптического сектора имеет

вид

Sector(x,y,нач_угол,кон_угол,RX,RY: integer).

12

Процедура

Bar(x1,x2,x2,y2: integer)

выводит прямоугольник , закрашенный в соответствии с установками процедуры SetFillStyle.

Система программирования Турбо Паскаль предусматривает ряд возможностей для вывода текстовой информации в графическом режиме. Прежде всего, имеется возможность выбора одного из типов шрифта. По умолчанию всегда выбирается точечный (растровый) шрифт, который для вывода любого символа использует точечную матрицу размерности 8 на 8.

При желании вместо точечного шрифта можно использовать один из штриховых (векторных) шрифтов, в которых любой символ описывается как набор отрезков (векторов). Штриховые шрифты хранятся в специальных файлах на диске и при необходимости загружаются в оперативную память. Для задания типа шрифта можно использовать следующие константы:

DefaultFont=0 - точечный шрифт;

TriplexFont=1 - основной штриховой шрифт (файл triplex.chr); SmallFont=2 - уменьшенный штриховой шрифт(файл small.chr); SanSeriFont=3 - дополнительный штриховой шрифт(sanserif.chr); GothicFont=4 - готический шрифт (файл gothic.chr).

Для задания горизонтального или вертикального направления вывода текста можно использовать следующие константы:

HorizDir=0 - горизонтальное направление (слева - направо): VertDir=1 - вертикальное направление(снизу-вверх).

Кроме того, имеется возможность управления размером символов. По умолчанию для точечного шрифта выбирается наименьший возможный размер, определяемый целочисленной константой NormSize=1.

Размер символов точечного шрифта можно увеличить в 2,3,...,10 раз. Задание типа шрифта, направления вывода и размеров символов

производится процедурой

13

SetTextStyle(шрифт,направл,размер: integer).

Изменение высоты и ширины символов для штриховых шрифтов производится процедурой

SetUserCharSize.

Выводимый текст можно выравнивать в горизонтальном или вертикальном направлениях. Горизонтальное выравнивание определяется следующими константами :

LeftText=0 - текст выводится вправо от заданной точки, т.е. выравнивается по л е в о й границе текста;

CenterText=1 - центрирование текста, т.е. заданная точка соответствует середине выводимого текста;

RightText=2 - текст выводится влево от заданной точки, т.е. выравнивается по правой границе текста.

Аналогично, для вертикального выравнивания определены константы: BottomText=0 - текст выводится н и ж е заданной точки; CenterText=1 - центрирование текста;

TopText=2 - текст выводится в ы ш е заданной точки.

Нулевые значения констант выбираются по умолчанию. Для задания выравнивания текста используется процедура

SetTextJustify(горизонт,вертик: integer).

Вывод текста производится двумя процедурами:

OutTextXY(x,y: integer; строка: string);

OutText(строка: string).

Первая выводит текст относительно заданной точки (x,y), а вторая - относительно имеющего значение УТП (обе - с учетом выравнивания текста).При использовании точечного шрифта (он всегда выбирается по умолчанию) надо знать, что если выводимая строка не помещается полностью на экране, то она просто не выводится!

14