Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Координатная система. Текущий указатель.




Верхний левый угол графического экрана определен как (0,0). Значение Х или колонки увеличиваются направо. Значение Y или строки увеличиваются вниз.

Функция GetМахХ Возвращает для текущего графического режима и драйвера самый правый столбец (разрешение по х).

Описание: GetMaxX

Тип результата: Целый (integer).

Примечания: Возвращает для текущего графического режима и драйвера максимальное значение х. В режиме 320х200 СGА, например, данная процедура будет возвращать значение 319. Процедуры GetМахХ и GetМахY чрезвычайно полезны для центрирования, определения границ области экрана и т.д.

Функция GetМахY Возвращает для текущего графического режима и драйвера самую нижнюю строку (разрешение по y).

Описание: GetMaxY

Тип результата: Целый (integer).

Пример:

uses Graph;

var Driver, Mode: integer;

i: integer;

Begin

Driver:= Detect; { перевести в графический режим }

InitGraph(Driver, Mode, '');

if GraphResult < 0 then

Halt(1);

Rectangle(0,0,GetMaxX,GetMexY); { нарисовать полную рамку экрана }

Readln;

CloseGraph;

end.

 

Многие графические системы поддерживают понятие текущего указателя (CP – Current Pointer). CP подобен понятию курсора в текстовом режиме, но в отличие от курсора CP не виден.

Write ('ABC');

В текстовом режиме оператор Write будет помещать курсор в колонку непосредственно после символа C. Если C помещен в колонку 80, то курсор передвинется в первую колонку следующей строки. Если C помещен в колонку 80 25-ой строки, то весь экран сдвинется на одну строку вверх и курсор будет в первой колонке 25 строки.

Следующие команды перемещают CP: InitGraph, MoveTo, MoveRel, LineTo, LineRel, OutText, SetGraphMode, GraphDefaults, ClearDevice, SetViewPort, ClearViewPort. Последние 5 команд перемещают CP в (0,0).

Процедура MoveTo Перемещает текущий графический указатель(СР) в точку (x,y).

Описание: MoveTo(x, y: integer)

Процедура LineTo. Рисует прямую линию из точки, в которой находится текущий указатель, в точку (x,y).

Описание: LineTo(x, y: integer).

Примечания: Рисует прямую, толщина и тип которой задаются процедурой SetLineStyle, а цвет устанавливается процедурой SetColor. Заметим, что

MoveTo(100,100);

LineTo(200,200);

эквивалентно

Line(100,100,200,200);

Первый метод требует больше времени для выполнения и большего объема памяти для выполняемого кода. Используйте процедуру LineТо только когда текущий указатель находится в одном из концов прямой. Отметим, что второй метод не изменяет значения текущего указателя.

Процедура LinеТо перемещает текущий указатель в точку (x,y).

 

Пример:

var Gd, Gm: integer;

Begin

Gd:= Detect;

InitGraph(gd, Gm, '');

if GraphResult <> 0 then

Halt(1);

Randomize;

Repeat

LineTo(Random(200),Random(200));

until KeyPressed;

Readln;

CloseGraph;

end.

Процедура MoveRel Перемещает текущий указатель (СР) на расстояние, заданное относительными координатами от его текущей позиции.

Описание: MoveRel(Dx, Dy: integer)

Примечания: Процедура МоvеRеl перемещает текущий указатель (СР) в точку, заданную относительным расстоянием (Dх,Dy) от точки, в которой находится текущий указатель. Относительные команды перемещения и рисования полезны при вычерчивании различных объектов на экране, у которых начальная точка может быть изменена (чтобы, например, вычертить ту же самую фигуру в другом месте экрана).

Процедура LineRel Проводит прямую в точку, заданную относительным расстоянием от текущего указателя (СР).

Описание: LineRel(Dx,Dy)

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

Пример:

uses Graph;

var Gd, Gm: integer;

Begin

Gd:=Detect;

InitGraph(gd, Gm, '');

if GraphResult <> 0 then

Halt(1);

Else

Begin

MoveTo(1,2);

LineRel(10,10); { провести прямую в точку (11,12) }

end;

Readln;

CloseGraph;

end.

Текст.

Побитовый шрифт с матрицей 8х8 и несколько штриховых шрифтов определены для вывода текста в графическом режиме. Символ побитового шрифта определен в матрице 8х8 пикселей (точек). Штриховой шрифт определен серией отрезков, которые говорят графической системе как рисовать шрифт. Удобство использования штрихового шрифта проявляется, когда Вы начинаете рисовать большие символы. Поскольку штриховой шрифт определен отрезками, он остается хорошего разрешения и качества при увеличении. Когда побитовый шрифт увеличивается, матрица умножается на коэффициент масштабирования, и как только коэффициент масштабирования становится большим, разрешения символов становится грубым. Для небольших символов побитовый шрифт будет эффективен, но для большого текста Вы захотите использовать штриховой шрифт.

Каждый штриховой шрифт хранится в отдельном файле с расширением.CHR. Файлы шрифтов могут быть загружены с диска автоматически модулем Graph во время выполнения (как описано), или они могут быть включены в пользовательскую программу или загружены ей и "зарегистрированы" модулем Graph.

Специальная программа BINOBJ.EXE обеспечивает преобразование файла шрифтов (или любого двоичного файла данных, который соответствует ему) в файл.OBJ, который может быть включен в модуль или программу, используя директиву компилятора {$L}. Это позволяет программе иметь все файлы шрифтов, встроенные в.EXE файл.

В модуле Graph определены следующие константы управления шрифтом:

Константа Значение Описание
DefaultFont   шрифт с побитовым отображением 8х8
TriplexFont   "штриховой" шрифт
SmallFont   мелкий шрифт
SanScrifFont    
GothicFont    
     
HorizDir   направление слева направо
VertDir   снизу-вверх
NormSize   типовой размер

Для работы с текстом в графическом режиме определены следующие процедуры.

Процедура SetTextStyle устанавливает текущий шрифт, тип и коэффициент размера символа.

Описание: SetTextStyle(шрифт: word; направление: word; разм_символа: CharSizeType)

Примечания: Процедура влияет на весь текстовый вывод, выполняемый процедурами OutText и OutTextXY. Можно использовать один шрифт с двоичным образом 8х8 и несколько "штриховых" шрифтов.

Поддерживается нормальное (слева направо) расположение шрифта и вертикальное (развернутое на 90 градусов относительно нормального расположения), при котором текст начинается с нижней границы экрана и продолжается вверх. Размер каждого символа может увеличиваться на коэффициент, задаваемый параметром "разм_символа". Значение размера символа, равное единице, приводит к выводу двоичного образа шрифта 8х8 в прямоугольную область экрана, содержащую 8х8 элементов изображения, параметр "разм_символа", равный 2 приведет к выводу на экран двоичного образа шрифта 8х8 в прямоугольную область элементов изображения размером 16х16 и т. д. (вплоть до десятикратного увеличения нормального размера). Для определения действительных размеров шрифта всегда используйте процедуры TextHeight и TextWidth. Нормальными значениями размера для шрифта являются 1 для принятого по умолчанию шрифта и 4 для "штрихового" шрифта. Эти значения можно передавать процедуре SetTextStyle в параметра "разм_символа". Для настройки размера "штрихового" текстового шрифта можно использовать процедуру SetUserFont.

Процедура SetTextJustify Устанавливает значения выравнивания текста, которые используются процедурами OutText и OutTextXY.

Описание: SetTextJustify(гориз, верт: word)

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

Установленные по умолчанию параметры выравнивания можно восстановить с помощью вызова SetTextJustify(LeftText,TopText). Если процедуре SetTextJustify передаются недопустимые параметры, функция GraphResult будет возвращать значение -11(grError), а текущие параметры выравнивания текста останутся неизмененными.

Определены следующие константы:

Константа Значение Описание
горизонтальное выравнивание
LeftText   выровнять влево
CenterText   центрировать
RightText   выровнять вправо
вертикальное выравнивание
BottomText   переместить вниз
CenterText   центрировать
TopText   переместить вверх

Процедура OutText Пересылает строку на устройство вывода в то место, в котором находится текущий указатель.

Описание: ОutТехt(строка: string)

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

Процедура OutText использует параметры вывода, установленные процедурой SetTextJustify (выравнивание, центрирование, вращение на 90 градусов и т.д.). Текущий указатель изменяется процедурой OutText только в том случае, если направление вывода текста горизонтальное и задано выравнивание по левой границе. Направление вывода текста (горизонтальное или вертикальное) задается с помощью процедуры SetTextStyle, а выравнивание - с помощью процедуры SetTextJustify (текущий указатель слева от строки, центрируется или расположен справа от строки, записывается над строкой, под строкой).

В следующем примере в блоке 1 выводится ABCDEF и текущий указатель перемещается (текст выводится горизонтально и выравнивается слева), в блоке 2 выводится ABC а DEF записывается справа над этим текстом, так как текст выравнивается справа, аналогично, в блоке 3 выводится текст ABC и над ним справа выводится DEF (так как текст выводится вертикально).

program CPupdate;

uses Graph;

var Driver, Mode: integer;

Begin

Driver:= Detect;

InitGraph(Driver, Mode, '');

if GraphResult < 0 then

Halt(1);

{ блок 1 }

MoveTo(0, 0);

SetTextStyle(DefaultFont, HorizDir, 1) { разм. симв. =1 }

SetTextJustify(LeftText, TopText);

OutText('ABC'); { CP изменяется }

OutText('DEF'); { СР изменяется }

{ блок 2 }

MoveTo(100, 50);

SetTextStyle(DefaultFont, HorizDir, 1) { разм. симв. =1 }

SetTextJustify(RightText, TopText);

OutText('ABC'); { CP изменяется }

OutText('DEF'); { СР изменяется }

{ блок 3 }

MoveTo(100, 100);

SetTextStyle(DefaultFont, VerDir, 1) { разм. симв. =1 }

SetTextJustify(LeftText, TopText);

OutText('ABC'); { CP не изменяется }

OutText('DEF'); { СР не изменяется }

Readln;

CloseGraph;

end.

Процедура OutTextXY Пересылает строку на устройство вывода.

Описание: OutTextXY(Х,Y: integer; текст_строка:string)

Примечания: Строка, заданная параметром "текст_строка", выводится в точке (Х,У). Если строка слишком длинная и выходит за пределы экрана или текущей области просмотра, то она усекается.

Процедура GetTextSettings Возвращает текущий тип текстового шрифта, его направление, размер и выравнивание, установленные с помощью процедур SetTextStyle и SetTextJustify.

Описание: GetTextSettings(var TextInfo: TextSettingsType)

Примечания: Определены следующие типы:

type CharSizeType = 1..10;

TextSettingsType = record

Font: word;

Direction: word;

CharSize: CharSizeType;

Horiz: word;

Vert: word;

end;

Пример:

uses Graph;

var Gd, Gm: integer;

OldStyle: TextSettingsType;

Begin

Gd:= Detect; { перевести в графический режим }

InitGraph(Gd, Gm, '');

if GraphResult < 0 then

Halt(1);

GetTextSettings(OldStyle);

SetTextJustify(LeftText, CenterText);

SetTextStyle(TriplexFont, VertDir, 4);

OutTextXY(GetMaxX, div 2, GetMaxY div 2, 'Новый тип');

with OldStyle do

begin { восстановить старый тип текста}

SetTextJustify(Horiz, Vert);

SetTextStyle(Font, Directtion, CharSize);

end;

OutTextXY(0, TextHeight('H'), 'Снова старый тип');

Readln;

CloseGraph;

end.

Фигуры и стили.

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

Процедура PutPixel Строит элемент изображения) в точке (x,y).

Описание: PutPixel(x,y: integer; эл_изображ: word).

Примечания: Строит в (x,y) точку, цвет которой определяется параметром "эл_изобр".

Пример:

uses Graph;

var Gd,Gm,Color: word;

Begin

Gd:= Detect;

InitGraph(Gd, Gm, '');

if GraphResult <> grOk then

Halt(1);

Randomize;

Repeat

Color:= Random(GetMaxColo)r;

PutPixel(Random(100),Random(100),Color); { строит "звездочки" }

Delay(10);

until KeyPressed;

Readln;

CloseGraph;

end.

Процедура Line Рисует прямую линию из точки (x1,y1) в точку (x2,y2).

Описание: Line(x1, y1, x2, y2: integer)

Примечания: Рисует прямую, толщина и тип которой задаются процедурой SetLineStyle, а цвет устанавливается процедурой SetColor.

Процедура Rectangle Рисует прямоугольник, используя текущий цвет и тип строки.

Описание: Rectangle(x1, y1, x2, x2: integer).

Примечания: Точка с координатами (х1,у1) определяет верхний левый угол прямоугольника, а точка с координатами (х2,у2) определяет нижний правый угол (0 <= х1 < х2 <=GetМахХ и 0 <= у1 < у2 <= GetМахY).

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

Процедура DrawPoly Используя текущий тип прямой и текущий цвет рисует контур многоугольника.

Описание: DrawPoly(числ_коорд: word; var коорд_верш)

Примечания: Параметр "коорд_верш" является нетипизованным параметром, который содержит координаты каждого пересечения в многоугольнике. Параметр "числ_коорд" задает число координат в "коорд_верш". Координата состоит из двух слов: значения x и значения y.

Если при вычерчивании многоугольника происходит ошибка, то функция GraphResult будет возвращать значение -6.

Заметим, что для вычерчивания замкнутой фигуры с n вершинами вы должны передать при обращении к процедуре DrawPoly n+1 координату, где координата вершины с номером n будет равна координате вершины с номером 1 (см. приведенный ниже пример).

Пример:

const Triangle: array [1..4] of PolyPoint=((x:10;y:100),(x:100;y:100),(x:150;y:150),(x:50;y:100);

Begin

...

DrawPoly(SizeOf(Triangle) div SizeOf(PolyPoint), Triangle);

...

end.

Процедура Circle Рисует окружность. Точка (Х,Y) считается центром окружности.

Описание: Circlе(Х,Y: integer; радиус: word)

Примечания: Окружность рисуется текущим цветом. В каждом графическом драйвере содержится коэффициент относительного удлинения, который используется в процедурах Сirclе, Аrс и РiеSliсе.

Пример:

for r:= 1 to 5 do

Circle(100,100,r*10);

Процедура Arc Вычерчивает дугу окружности от начального угла до конечного угла. Точка (x,y) используется, как центр окружности.

Описание: Аrс(Х,Y:integer; нач_угол, кон_угол, радиус:word)

Примечания: Рисует дугу окружности с центром (x,y) и радиусом "радиус". Дуга рисуется от начального угла ("нач_угол") до конечного угла ("кон_угол"). При этом используется текущий цвет. Начальный угол, равный 0 и конечный угол, равный 359, задают вычерчивание полной окружности.

Пример:

for f:= 1 to 5 do

Arc(100, 100, 0, 89, f*10);

Процедура Ellipse Рисует эллиптическую дугу от начального угла до конечного угла, используя (Х,Y) в качестве точки центра.

Описание: Еllipsе(Х, Y: integer; нач_угол, кон_угол:word; радХ, радУ: word)

Примечания: Процедура рисует эллиптическую дугу, используя (Х,Y), как точку центра, а "радХ", "радУ" - как горизонтальную и вертикальную полуоси. Дуга эллипса вычерчивается от начального угла (параметр "нач_угол") до конечного угла (параметр "кон_угол") текущим цветом. Значение начального угла, равное 0, и конечного угла, равное 359, приведут к вычерчиванию полного эллипса.

Процедура SetLineStyle Устанавливает текущую толщину и тип линии.

Описание: SetLineStyle(тип_строки: word; образец:word; толщина: word)

Примечания: Данная процедура влияет на все типы линий, вычерчиваемые процедурами Line, LineTo, RecTangle, DrawPoly, Arc, Circle и др.

Могут вычерчиваться непрерывные, пунктирные линии, линии, состоящие из точек или точек и тире. Если процедуре SetLineStyle иередаются неверные параметры, то GraphResult будет возвращать значение -11(grError) и текущие установки останутся неизмененными. Описаны следующие константы:

Константа Значение Описание
SolidLn   непрерывная линия
DottedLn   линия из точек
CenterLn   линия из точек и тире
DashedLn   пунктирная линия
UserBitLn   тип, определяемый пользователем
NormWidth   нормальная толщина
ThickWidth   жирная линия

Когда в качестве параметра процедуру SetLineStyle передается UserBitLn, то в качестве BitPattern для строки будет использоваться параметр "образец".

Пример:

uses Graph;

var GraphDriver, GraphMode: integer;

x1, y1, x2, y2: integer;

Begin

GraphDriver:= Detect;

InitGraph(GraphDriver,GraphMode,'');

if GraphResult <> grOk then

Halt(1);

x1:= 10;

y1:= 10;

x2:= 200;

y2:= 150;

SetLineStyle(DottedLn,0,NormVidth);

Rectangle)x1,y1,x2,y2);

SetLineStyle(UserBitLn,$C3,ThickWidth);

Rectangle(Pred(x1), Pred(y1), Succ(x2), Succ(y2));

end.

Процедура SetFillPattern Выбирает заданный пользователем образец закраски.

Описание: SetFillPattern(Pattern: FillPatternType; Color: word)

Примечания: Устанавливает тип закраски и ее цвет для всех типов закраски, выполняемых процедурами FillPoly, Bar, FloodFill, Bar3D и PieSlice, битовый образец закраски, задаваемый процедурой Pattern, и цвет, задаваемый процедурой Color.

Тип FillPatternType предварительно определяется следующим образом:

type FillPatternType = array [1..8] of byte;

Образец закраски основывается на внутренних байтовых значениях, содержащихся в массиве Pattern. Этот массив имеет длину 8 байтов и каждый байт 8 элементам изображения в образце закраски. Если бит в байте образца закраски принимает значение 1, то элемент изображения будет построен. Следующий образец закраски представляет собой, например, закраску в виде "шахматной доски" (50% полутон):

Двоичный вид Шестнадцатеричный вид  
  $AA первый байт
  $55 второй байт
  $AA третий байт
  $55 четвертый байт
  $AA пятый байт
  $55 шестой байт
  $AA седьмой байт
  $55 восьмой байт

Определенные пользователем типы закраски позволяют вам создавать типы закраски, отличающиеся от заранее определенных, которые могут выбираться с помощью процедуры SetFillStyle. Всякий раз, когда вы выбираете новый образец закраски с помощью процедур SetFillPattern или SetFillStyle все операции закраски будут выполняться с использованием этого типа закраски. При обращении вида SetFillStyle(UserField, SomeColor) всегда будет выбираться образец, заданный пользователем. Это позволяет вам определять и использовать с помощью процедуры SetFillPattern новый образец закраски, а затем переходить от встроенного образца закраски к новому, заданному вами, обращаясь к процедуре GetTextStyle.

Пример:

uses Graph;

const Gray50:FillPatternType = ($AA, $55, $AA, $55, $AA, $55,$AA, $55);

var Driver, Mode: integer;

Begin

Driver:= Detect; { перевести в графический режим }

InitGraph(Driver, Mode, '');

if GraphResult <> 0 then

Halt(1)

SetFillPattern(Gray50, White);

Bar(0, 0, 100, 100); { нарисовать столбец, используя 50% полутон }

Readln;

CloseGraph;

end.

Процедура SetFillStyle Устанавливает тип закраски и ее цвет.

Описание: SetFillStyle(образец: word; цвет: word)

Примечания: Устанавливает образец и цвет закраски для всех типов закраски, выполняемых процедурами FillPoly, Bar, Bar3D, и PieSlice. Можно использовать множество типов закраски. По умолчанию выбирается сплошная закраска белого цвета.

Определены следующие константы:

Константа Значение Описание
EmptyFill   заполнить область фоновым цветом
SolidFill   непрерывное заполнение област за- данным цветом
LineFill   заполнить ---
LtSlashFill   заполнить ///
SlashFill   заполнить жирными линиями ///
BkSlashFill   заполнить \\\ (жирными линиями
LtBkSlashFill   заполнить \\\
HatchFill   заполнить редкой штриховкой
XhatchFill   заполнить частой пересекающейся штриховкой
InterLeaveFill   заполнить прерывистой линией
WideDotFill   заполнить редкими точками
CloseDotFill   заполнить частыми точками

Пример:

SetFillStyle(SolidFill,0);

Bar(x1,y1,x2,y2);

SetFillStyle(XHatchFill,0);

Bar(x1,y1,x2,y2);

 

Процедура FloodFill Заполняет ограниченную облать, используя текущий заполнитель.

Описание: FloodFill(x, y, граница: word)

Примечания: Эта процедура используется для заполнения замкнутой области (для растровых устройств). Точка (x,y) является внутренней точкой заполняемой области. Для заполнения области, ограниченной цветом, который определяет параметр "граница", используется текущий образец закраски. Если точка (x,y) находится внутри замкнутой области, то заполняется внутренняя область. Если эта точка находится вне замкнутой области, то заполняется ее внешняя часть (поле экрана, не входящее в область).

Если при заполнении области происходит ошибка, то функция GraphResult возвращает значение -7 (grNoFloodMem).

Заметим, что процедура FloodFill останавливается после того, как выведено две пустых строки. Это может произойти в том случае, когда заполнитель и маленький прямоугольник сливаются. В следующей программе прямоугольник полностью не закрашивается:

program StopFill;

uses Graph;

var Driver, Mode: integer;

Begin

Driver:= Detect;

InitGraph(Driver, Mode, 'c:\bgi');

if GraphResult <> grOk then

Halt(1);

SetFillStyle(LtSlashFill, GetMaxColor);

Rectangle(0, 0, 8, 20);

FloodFill(1, 1, GetMaxColor);

ReadLn;

CloseGraph;

end.

В этом случае прямоугольник будет полностью закрашен, если использовать более "густой" заполнитель типа SlashFill.

 

Процедура ClearDevice

Функция: Сбрасывает состояние текущего графического экрана и подготавливает его для вывода данных

Описание: ClearDevice

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

Пример:

Randomize;

repeat

LineTo(Random(200), Random(200));

until KeyPressed;

ClearDevice;

Readln;

Процедура SetViewPort Устанавливает для графического вывода текущую область просмотра или окно.

Описание: SetViewPort(х1, у1, х2, у2: word;

Примечания: Точка (x1,y1) задает верхний левый угол области просмотра, а точка с координатами (x2,y2) определяет нижний правый угол (0 <= y1 < x2 и 0 <= y1 < y2). Левый верхний угол экрана задается координатами (0,0). Булевская переменная Сliр определяет будет ли изображение отсекаться текущими границами области просмотра.

Процедура SetViewPort(0,0,GetMaxX,GetMaxY,True) всегда задает в качестве области просмотра все поле графического экрана. Определены следующие константы:

const

ClipOn:= true;

ClipOff:= false;

Все графические команды (например, GetX, ОutТехt, Rectangle, МоvеТо и т. д.) зависят от текущей области просмотра. В качестве примера заметим, что процедура МоvеТо перемещает текущий указатель в точку (5,5) внутри области просмотра (абсолютными координатами данной точки были бы координаты (15,25)).

Если булевская переменная Сliр установлена в значение Тruе, то, когда выполняется обращение к процедуре SetViewPort, все рисунки будут обрезаться на границах текущей области просмотра. Заметим, что "текущий указатель" никогда не отсекается. В следующем примере прямая линия не будет нарисована полностью, поскольку она будет обрезана на границе области просмотра:

SetWiewPort(10, 10, 20, 20, ClipOn);

Line(0, 5, 15, 5);

Если бы не выполнялось отсечение, то прямая должна была бы начинаться в точке с абсолютными координатами (10,15) и заканчиваться в точке с абсолютными координатами (25,15). Но, поскольку выполнялось отсечение, то в действительности прямая будет вычерчиваться, начиная с точки с абсолютными координатами (10,15), и заканчивается в точке (20,15).

Процедуры InitGraph, ClearDevice и SetGraphMode сбрасывают определение текущей области просмотра и устанавливают в качестве области просмотра весь экран. Текущее определение области просмотра можно получить с помощью процедуры GetViewSettings, которая воспринимает параметры следующего глобального типа:

type ViewPortType = record

x1, y1, x2, y2: word;

Clip: boolean;

end;

Процедура SetViewPort перемещает текущий указатель в точку с координатами (0,0).

Пример 2:

 

const vp1: ViewPortType = (x1: 10; y1: 80; x2: 100; y2: 150; Clip: ClipOn);

vp2: ViewPortType = (x1: 110; y1: 0; x2: 150; x2: 70; Clip: ClipOn);

var GraphDriver, GraphMode: integer;

begin

GraphDriver:= Detect;

InitGraph(GraphDrivet,GraphMode,'');

if GraphRasult <> grOk then

Halt(1);

with vp1 do

begin

Rectangle(Succ(x1), Succ(y1), { нарисовать контур области просмотра }

Pred(x2), Pred(y2));

SetViewPort(x1, y1, x2, y2, ClipOn);

OutText('Область просмотра');

end;

{ полный экран }

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);

with vp2 do

begin

{ нарисовать контур второй области просмотра }

Rectangle(Succ(x1), Succ(y1), { нарисовать контур области просмотра }

Pred(x2), Pred(y2));

SetViewPort(x1, y1, x2, y2, ClipOn);

OutText('Область просмотра 2');

end;

Readln;

CloseGraph;

end.

Процедура ClearViewPort Очищает текущую область просмотра (окно).

Описание: ClearViewPort

Примечания: Очищается текущая область просмотра. При этом используется цвет, сохраненный в Раlettе(0), вызывается процедура Bar и текущий указатель перемещается в точку с координатами (0,0). Если при очистке области просмотра возникает ошибка, процедура GraphResult возвращает значение 6.

Пример:

begin

...

SetViewPort(10, 10, 100, 100, ClipOn);

SetColor(White);

OutText('Для очистки области просмотра нажмите <RETURN>);

ClearViewPort;

...

end;

Процедура GetViewSettings Позволяет пользователю выдать запрос о текущей области просмотра на экране и параметрах "вырезанного" изображения.

Описание: GetViewSettings(var ViewPort: ViewPortType)

Примечания: Данная процедура возвращает переменную типа ViewPortType. Этот тип предварительно описан следующим образом:

type ViewPortType = record

x1, y1, x2, y2: integer;

Clip: boolean;

end;

Точки (x1,y1) и (x2,y2) представляют собой размеры активной области просмотра. Параметр Clip представляет собой переменную булевского типа и указывает на наличие "вырезанного" (отсеченного за заданными границами) изображения.

Пример:

uses Graph;

var Gd, Gm: integer;

ViewPortType = ViewPortType;

begin

Gd:= Detect; { перевести в графический режим }

InitGraph(Gd, Gm, '');

if GraphResult < 0 then

Halt(1);

GetViewSettings(ViePort);

with ViewPort do

begin

Rectangle(0, 0, x2 x1, y2 y1);

if Clip then

OutText('Отсечение изображения не активно');

else

OutText('Сегодня отсечение изображения не действует');

end;

Readln;

CloseGraph;

end.

Процедура RestoreCrtMode Возвращает режим экрана в исходное состояние (то, какое существовало до инициализации графики).

Описание: RestoreCrtMode

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

Пример:

uses Graph;

var GraphDriver, GraphMode: integer;

begin

GraphDriver:= Detect;

InitGraph(GraphDriver,GraphMode,'');

if GraphResult <> grOk then

Halt(1);

OutText('Для выхода из графики нажмите RETURN:');

Readln;

RestoreCrtMode;

Writeln('Теперь вы в текстовом режиме');

Readln;

SetGraphMode(GetGraphMode);

OutTextXY(0, 0, 'Вы снова в графическом режиме');

OutText(0, TextHeight('H'), 'Для выхода нажмите RETURN');

Readln;

CloseGraph;

end.

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...