Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Closegraph/0

Когда вы закончили использование графики, вызовите closegraph для

выключения графической системы. closegraph исключает драйвер из памяти и

восстанавливает первоначальный видеорежим (посредством restorecrtmode).

Restorecrtmode/0

restorecrtmode восстанавливает первоначальный видеорежим, определен-

ный с помощью initgraph. Если текстовой режим отличается от 80*25, то

нужно также вызывать предикат textmode для восстановления первоначального

экрана. Этот предикат может быть использован вместе с setgraphmode для

переключения в текстовый и обратно в графический режим.

Пример

Этот пример использует директиву компилятора include для подключения

файла GRAPDECL.PRO, который определяет символические константы для многих

целых переменных в BGI.

/* Program CH17EX01.PRO */

include "GRAPDECL.PRO"

constants

bgi_path = "\\tprolog2\\bgi"

predicates

toText

tempTextmode

toGraphic

goal

toGraphic,

tempTextmode,

toText.

clauses

toGraphic :-

% Detect graphics hardware

detectGraph(G_Driver, G_Mode),

initGraph(G_Driver, G_Mode, New_Driver, New_Mode, bgi_path),

write("A look into the BGI"), nl,

writef("Graph_Driver = %,Graph_Mode = %",G_Driver,G_Mode),nl,

writef("New_Driver = %,New_Mode = %",New_Driver,New_Mode),nl,

write("Press key to return:"),

readchar(_).

tempTextmode :-

getGraphMode(GraphMode),

restoreCRTMode,

write("\nNow you are in text mode.\n\n"),

write("\nPress any key to go back to graphics ..."),

readchar(_),

setGraphMode(GraphMode).

toText :-

closegraph.

Текущая позиция (тп)

Текущей позицией (ТП) является такая точка экрана или поля вывода

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

можете напечатать текст или провести линию из текущей позиции.

Вы можете поместить текущую позицию в определенном месте с помощью

предиката moveto или передвинуть ее на определенное расстояние с помощью

moverel. Предикаты getx и gety возвращают соответственно координаты x и y

текущей позиции (относительно поля вывода). getmaxx и getmaxy возвращают

максимальные значения x и y для текущего графического драйвера и режима.

getx/1

getx возвращает координату x текущей позиции.

getx(Xcur) /*(o)*/

(integer)

gety/1

gety возвращает координату y текущей позиции.

gety(Ycur) /*(o)*/

(integer)

moveto/2

moveto устанавливает текущую позицию в позиции (X,Y) поля вывода.

moveto(X,Y) /*(i,i)*/

(integer,integer)

moverel/2

moverel сдвигает текущую позицию на расстояние (X,Y).

moverel(DX,DY) /*(i,i)*/

(integer,integer)

getmaxx/1

getmaxx возвращает в Xmax максимальное значение x для текущего гра-

фического драйвера и режима.

getmaxx(Xmax) /*(o)*/

(integer)

Например, в CGA в режиме 320*200, Xmax будет равен 319. getmaxx удо-

бен для центровки изображения, определения границ области на экране и

т.д.

getmaxy/1

getmaxy возвращает в Ymax максимальное значение y для текущего гра-

фического драйвера и режима.

getmaxy(Ymax) /*(o)*/

(integer)

Например, в CGA в режиме 320*200, Ymax будет равен 199.

Рисование линий и фигур

С помощью предикатов BGI можно рисовать цветные линии, дуги, окруж-

ности, эллипсы, прямоугольники, многоугольники и различные фигуры, осно-

ванные на комбинации этих фигур. Вы можете заполнять любую фигуру (или

область, окружающую ее) любым из 11 данных шаблонов заполнения области

или сами определять шаблон заполнения.

Линии

Вы можете контролировать толщину и шаблон проводимых линий с помощью

предиката setlinestyle. Для определения текущего шаблона линии и ее тол-

щины служит предикат getlinesettings. С помощью предикатов line, linerel

и lineto можно проводить линии между двумя определенными точками, от те-

кущей позиции на определенное расстояние или между текущей позицией и оп-

ределенной точкой.

setlinestyle/3

setlinestyle используется для того, чтобы задать толщину проводимых

линий (а также граничных линий для закрашиваемых фигур) и вид линий

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

setlinestyle(LineStyle, Upattern, Thickness) /*(i,i,i)*/

(integer, integer, integer)

Аргумент LineStyle определяет шаблон линий (такие как сплошная, пун-

ктирная, пунктир с точкой и прерывистый пунктир). В файле GRAPDECL.PRO

даны символьные имена целым константам определяющим эти линии:

Таблица 17.4 Константы, определяющие шаблоны линий

----------------------------------------------------------------

Название линии Значение Описание

----------------------------------------------------------------

solid_LINE 0 сплошная линия

dotted_LINE 1 пунктирная линия

center_LINE 2 пунктир с точкой

dashed_LINE 3 прерывистый пунктир

userbit_LINE 4 вид линии, определенный

пользователем

----------------------------------------------------------------

Вы можете определить шаблон линии с помощью аргумента Upattern, за-

давая 16-ти битовую маску. Линия определяется следующим образом: маска

определяет отрезок линии длиной в 16 пиксел, линия будет проводиться цве-

том для рисования линий только в тех пикселах, которым соответствуют не-

нулевые биты в маске. Например, сплошная линия соответствует значению

Upattern $FFFF (все пикселы окрашиваются), а пунктирной линии будет соот-

ветствовать значение Upattern $3333 или $0F0F.

Аргумент Thikness определяет толщину проводимых линий (нормальная

или жирная).

Таблица 17.5 Константы, определяющие толщину линий

----------------------------------------------------------------

Название Значение Описание

----------------------------------------------------------------

norm_WIDTH 1 ширина в 1 пиксел

thick_WIDTH 3 ширина в 3 пиксела

----------------------------------------------------------------

Соседние файлы в папке Документация