Fortran для персонального компьютера
..pdfПроцедура moveto принимает координаты элементов изображения в качестве параметров. Эти координаты опреде ляют верхний левый угол первого символа в строке.
6.3.5Программа отображения текста
сиспользованием шрифтов
INCLUDE ’FGRAPH.FI’
INCLUDE ’FGRAPH.FD’
INTEGERS NFONTS
INTEGERS dummy, i, iend
CHARACTER*30 list
CHARACTERS fontpath
RECORD /videoconfig/ vc
RECORD /xycoord/ xy
PARAMETER( NFONTS=6)
CHARACTER* 7 TEXT(2 * NFONTS) /
‘"COURIER", "courier”, "HELV" , "helv” ,
"TMS RMN", "tms rmn", "MODERN", "modern" "SCRIPT", "script",
"ROMAN", "roman" / CHARACTER* 10 option (NFONTS) /
*"t’courier’", "t’helv'" , "t’tms rmn’", "t’modem”’ ,
*"t’seript”' , "t’roman”' /
СОпределение полных имен .FON файлов
СРегистрация шрифтов.
IF( registerfonts( ’*.FON’ ).LT. 0) THEN
WRITE (*, ’(A /)’) ’Enter directory for .FON files:’ READ (* ,’(A )’) fontpath
iend = INDEX( fontpath, ’ ’ ) fontpath(iend:iend + 5) = ’\*.FON’
IF( registerfonts( fontpath ) .LT. 0) * STOP ’Error: cannot find font files’ ENDIF
СУстановка графического режима
IF( setvideomode( $MAXRESMODE) .EQ. 0)
*STOP ’Error: cannot set graphics mode’
СОпределение видеоконфигурации
CALL getvideoconfig( vc) С Отображение текста
DO i =l , NFONTS
list = option(i) / / ’h30w24b’ IF( setfont( list) .EQ. 0) THEN
dummy = setcolor( INT4( i )) CALL moveto(0,
*(i - 1) * vc.numypixels / NFONTS, xy) CALL outgtext ( text((i - 2) - 1))
CALL moveto( vc.numxpixels/2,
*(i - 1) * vc.numxpixels / NFONTS, x y )
CALL outgtext ( text( i * 2) ELSE
dummy = setvideomode ( $DEFAULTMODE ) STOP Error: cannot set font’
END IF END DO READ (*,*>
dummy = setvideomode( $DEFAULTMODE) С Освобождение памяти
CALL unregisterfontsO END
Вэтой программе, для спецификации способа начер тания шрифтов задаются высота (30 пикселов) и ширина (24 пиксела) символа. Затем процедура moveto задает начальную точку для каждой строки текста. Процедура outgtext выводит на экран сообщение в текущем шрифте.
Вцелях обеспечения эффективности работы со шриф тами следует придерживаться рекомендаций:
—видеорежим устанавливается только один раз. Если пользователь создает графический образ и предполагает соп
роводить его текстом, не следует переустанавливать видео режим, прежде чем будут вызваны процедуры работы со шрифтами;
—функция setfont выполняет чтение заданного .FON-фай- ла для получения данных текущего шрифта. При каждом вы зове этой процедуры данные шрифта заменяются в памяти. Минимизация обращений к процедуре setfont сокращает вре мя, требуемое для выполнения операций ввода/вывода;
—после завершения работы с библиотекой шрифтов можно освободить память, которую занимал регистрационный спи сок. Для этого следует вызвать процедуру unregisterfonts.
ГЛАВА 7
ГРАФИЧЕСКИЕ ФУНКЦИИ
В данном разделе приводится детальное описание про цедур, реализованных в графической библиотеке GRAPHICS.LIB, компилятора языка ФОРТРАН фирмы Microsoft. Описания процедур даны в алфавитном порядке.
Имя каждой процедуры указывается в начале ее описания. Описание интерфейса можно найти во включаемом файле FGRAPH.FI. Приводится необходимая дополнительная информация, в частности, список процедур, взаимосвязанных сданной.
7.1Рисование эллиптических дуг. ARC,ARC_W
СИНТАКСИС
dummy = агс( xl, у1, х2, у2, хЗ, уЗ, х4, у4 )
ДЕЙСТВИЕ
Процедуры arc, arc_w выполняют рисование эллипти ческих дуг.
ЗАМЕЧАНИЕ
Процедура arc использует систему '’координат порта просмотра". Центр дуги есть центр ограничивающего прямоу гольника, определяемого точками (xLy 1) для левого верхнего угла и (х2,у2) для правого нижнего. Дуга начинается в точке ее пересечения с вектором, определяемым точкой (хЗ,уЗ) и заканчивается в точке, пересечения с вектором, определяе мым точкой (х4,у4).
Процедура arc_w использует систему "оконнных коор динат". Вызов"процедуры и описание параметров аналогичны
описанию arc.
В обоих случаях дуга рисуется с использованием теку щего цвета. Поскольку дуга не определяет замкнутую область, то она нс заполняется"цветом.
Процедуры arc и arc_w возвращают ненулевое значение, если процедура рисования дуги выполняется успешно; в про тивном случае возвращается значение 0.
СМ. ТАКЖЕ
ellipse, lineto, pie, rectangle, setcolor
7.2Очистка экрана. CLEARSCREEN
СИНТАКСИС CALLcIearscreen( area)
ДЕЙСТВИЕ
Процедура clearscreen очищает область, заполняя ее те кущим цветом фона.
ЗАМЕЧАНИЕ
Параметр area может быть одной из следующих символических констант (определенных в файле FGRAPH.FD):-
$GCLEARSCREEN — Очистка и заполнение цветом всего экрана
$GVIEWPORT — Очистка только текущей области прос мотра
$GWI NDOW — Очистка только текущего текстового окна Возвращаемое значение отсутствует.
СМ. ТАКЖЕ
getbkcolor, setbkcolor.
7.3 Включение/выключение курсора. DISPLAYCURSOR
СИНТАКСИС
dummy = displaycursor( toggle )
ДЕЙСТВИЕ При входе в каждую графическую процедуру экранный
курсор становится невидимым. Функция displaycursor опреде ляет, должен ли курсор снова стать видимым при выходе из графической процедуры.
ЗАМЕЧАНИЕ
Если параметр toggle установлен в значение $GCURSORON, то курсор при выходе из процедуры будет восстановлен* если параметр установлен в "значение $GCURSOROFF, то курсор остается невидимым.
Возвращается предыдущее значение параметра toggle.
СМ. ТАКЖЕ
gettexteursor, settexteursor.
7.4Рисование эллипса. ELLIPSE, ELLIPSE_W
СИНТАКСИС
dummy = elJipse( control, xl, yl, x2, y2 )
ДЕЙСТВИЕ
Функция ellipse выполняет процедуру рисования эллипса."
ЗАМЕЧАНИЕ Ограничивающая линия отображается текущим цветом.
Центр эллипса есть центр ограничивающего прямоугольника, определяемого точками (xl,yl) и (х2,у2) "координат порта просмотра"
Функция ellipse^w выполняет рисование эллипса в "оконных координатах'?Параметры аналогичны.
Если ограничивающий прямоугольник вырождается в
точку, вертикальную или горизонтальную линию, то фигура не изображается.
ДЕЙСТВИЕ
Процедура getimage сохраняет экранный образ, определяемый ограничивающим прямоугольником в координатах порта просмотра парами (xl,yl) и (х2,у2), в буфере.
Процедура getimage_w выполняет аналогичные действия при использовании оконных координат.
ЗАМЕЧАНИЕ
Буфер должен иметь размер, достаточный для разме щения графического образа. Размер образа определяется пу тем вызова функции imagesize во время этапа исполнения, либо путем использования формулы, приведенной в описании процедуры imagesize.
Возвращаемое значение отсутствует.
СМ. ТАКЖЕ
imagesize, putimage.
7.14 Получение маски линии. GETLINESTYLE
СИНТАКСИС
CALL getlinestvle( mask)
ДЕЙСТВИЕ Тип или способ изображения линии в графических про
цедурах может контролироваться при помощи текущей маски. Процедура getlinestyle возвращает текущий номер мас
ки.
ЗАМЕЧАНИЕ Маска представляет собой 16-и разрядный массив, в ко
тором каждый бит представляет элемент изображения в рису емой линии. Если разряд установлен в значение 1, то соответ ствующий элемент изображения устанавливается в цвет линии (текущий цвет). Если бит равен 0, элемент изобра жения остается без изменений. Маска действительна по всей длине линии. По умолчанию принимается маска #FFFF (сплошная линия). *
Если маска установлена, возвращается номер текущей маски. Если маска не установлена, процедура getlinestyle воз вращает маску, принимаемую по умолчанию.
СМ. ТАКЖЕ
lineto, pie, setlinestyle.
7.15 Преобразование координат текущей точки. GETPHYSCOORD
СИНТАКСИС
CALLgetphyscoorcK xy.xcoord, xy.ycoord, ху )
ДЕЙСТВИЕ
Процедура getphyscoord выполняет операцию приведе ния координат порта просмотра в точке (х,у) в физические координаты, возвращая их в структуру xycoord, которая опре делена в файле FuRAPH.FD.