2.18. Графика

Для использования в программе графической библиотеки необходимо вклю­чить в программу операторы:

INCLUDE 'FGRAPH.FI'

INCLUDE 'FGRAPH.FD' или метакоманды

$INCLUDE:'FGRAPH.FI'

$INCLUDE:'FGRAPH.FD' для подключения файлов, содержащих описания графических процедур и функ­ций (подпрограммы INTERFACE), а также для описания констант и перемен­ных. Графический режим устанавливается функцией INTEGER*2 FUNCTION SetVideoMode (mode) INTEGER*2 mode Аргумент mode может быть, например, одной из констант: SMAXRESMODE =-3 - графический режим максимального разрешения; SMAXCOLORMODE =-2 - графический режим максимальной цветности; SDEFAULTMODE =-1 - возврат к оригинальному режиму. Функция возвращает 0 в случае неудачи. Аналогична InitGraph в языках PASCAL и C.

Получить информацию о текущем экранном режиме можно с помощью про­цедуры:

SUBROUTINE GetVideoConfig(s) STRUCTURE/videoconfig/

INTEGER*2 numxpixels   ! число пикселов по X

INTEGER*2 numypixels   ! число пикселов по Y

INTEGER*2 numtextcols ! число текстовых колонок

INTEGER*2 numtextrows ! число текстовых строк

INTEGER*2 numcolors    ! число цветов

INTEGER*2 bitsperpixel ! число битов на пиксел

INTEGER*2 numvideopages ! число доступных видеостраниц

INTEGER*2 mode        ! текущий видеорежим

INTEGER*2 adapter     ! активный адаптер дисплея

INTEGER*2 monitor     ! активный монитор

INTEGER*2 memory      ! видеопамять адаптера в килобайтах

END STRUCTURE RECORD/videoconfig/s

Процедура возвращает текущую графическую конфигурацию через структуру s. Поле mode возвращает установленный графический режим. Поле adapter воз­вращает тип графического адаптера, например, SVGA = 8 . Поле monitor возвра­щает тип монитора, например, SCOLOR или SENHCOLOR .Фоновый цвет эк­рана устанавливается функцией

INTEGER*4 FUNCTION SetBkCoIor (coIor) INTEGER*4 coIor

Подпрограмма

SUBROUTINE CIearScreen(area)

INTEGER*2 area

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

SGCLEARSCREEN - весь экран,

SGVIEWPORT       - текущий видеопорт, SGWINDOW - текущее текстовое окно.

Текущий цвет для линий и закраски устанавливает функция INTEGER*2 FUNCTION SetCoIor(coIor) INTEGER*2 coIor

Вывод пиксела на экран (с использованием текущего цвета) выполняется функ­цией

INTEGER*2 FUNCTION SetPixeI (x,y) INTEGER*2 x,y

Отрезок прямой от текущего положения графического курсора до точки с коор­динатами x,y рисует функция

INTEGER*2 FUNCTION LineTo (x,y) INTEGER*2 x,y Графический курсор перемещается процедурой SUBROUTINE MoveTo(x,y,s) INTEGER*2 x,y

STRUCTURE/xycoord/

INTEGER*2 xcoord INTEGER*2 ycoord END STRUCTURE

RECORD/xycoord/s

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

SUBROUTINE SetLineStyIe (mask)

INTEGER*2 mask

Эллиптическая дуга рисуется функцией

INTEGER*2 FUNCTION Arc(x1,y1,x2,y2,x3,y3,x4,y4) INTEGER*2 x1,y1,x2,y2,x3,y3,x4,y4

Центром эллипса является центр прямоугольника, который определяется точка­ми (x1,y1) и (x2,y2), дуга начинается в точке, (x3,y3), и заканчивается в точке (x4,y4). Эллипс рисуется функцией

INTEGER*2 FUNCTION EIIipse(controI,x1,y1,x2,y2) INTEGER*2 controI,x1,y1,x2,y2

Центром эллипса является центр ограничивающего прямоугольника, опреде­ляемого точками (x1,y1) и (x2,y2). Аргумент contro/ может быть одной из двух констант:

SGFILLINTERIOR - эллипс закрашивается, SGBORDER - эллипс не закрашивается.

Прямоугольник рисуется функцией

INTEGER*2 FUNCTION Rectangle (control,x1,y1,x2,y2) INTEGER*2 control,x1,y1,x2,y2 Замкнутая область закрашивается функцией

INTEGER*2 FUNCTION FloodFill(x,y,boundary) INTEGER*2 x,y,boundary Функция аналогична FloodFill в языках PASCAL и C. Способ закрашивания ус­танавливается процедурой

SUBROUTINE SetFillMask(mask) INTEGER*1 mask

где mask - массив из 8 элементов типа INTEGER*1, который определяет шаблон закраски области 8 на 8 пикселов. Если маска заполнения не установлена или массив нулевой, то для заполнения используется текущий цвет. Текст на графи­ческий экран выводится процедурой

SUBROUTINE OutGText(text)

CHARACTER*(*) text

Текст выводится с использованием текущего шрифта, текущей графической позиции и текущего цвета. После вывода текста сохраняется текущая графиче­ская позиция. Текст позиционируется по левому верхнему краю. Кроме того язык FORTRAN позволяет пользоваться в графическом режиме и обычными операто­рами PRINT и WRITE. Текущее положение графического курсора возвращает процедура

SUBROUTINE GetCurrentPosition (s) RECORD/xycoord/s

Ширину текста в пикселах возвращает функция INTEGER*2 FUNCTION GetGTextExtent(text) CHARACTER *(*) text

Подключение графических шрифтов осуществляет функция INTEGER*2 FUNCTION RegisterFonts (PathToFiles) CHARACTER*(*) PathToFiles

Файлы с графическими шрифтами имеют расширение fon и должны быть доступны программе. Функция возвращает положительное число, равное номеру последнего зарегистрированного шрифта при успешной регистрации. Отрица­тельное число означает : -1 - файл не найден; -2,-3 - один или несколько фай­лов ошибочны. Графические шрифты отключаются процедурой

SUBROUTINE UnRegisterFonts()

Текущий шрифт устанавливается функцией INTEGER*2 FUNCTION SetFont (options) CHARACTER *(*) options

Она устанавливает один из зарегистрированных шрифтов, который характеризу­ется параметром options. Строка options может содержать подстроки:

t'fontname' - имя шрифта;

hx - высота символа в пикселах для масштабируемых шрифтов; wx - ширина символа в пикселах для масштабируемых шрифтов; nx - номер шрифта.