4.1. Рисование графических примитивов

Рисование эллиптических дуг.

Функция аrc использует систему координат “порта просмотра”, функция arc_w использует систему ”оконных” координат. Центр дуги есть центр ограниченного прямоугольника.

Dum = arc (x1, y1, x2, y2, x3, y3, x4, y4).

Очистка экрана.

П/п ClearScreen очищает область, заполняя ее текущим цветом фона.

Пример:

Call ClearScreen ($GCLEARSCREEN) – очистка всего экрана (заполнение его текущим цветом фона)

При символической константе $GVIEWPORT – очистка текущей области просмотра; $GWINDOW – очистка текущего окна.

Рисование эллипса

dum = ellipse ($GFILLINTERIOR, x1, y1, x2, y2) – рисование эллипса, закрашенного текущей маской заполнения.

При использовании символической константы $GBORDER – рисуется контур эллипса, ellipse_w – тоже в “оконных” координатах.

Закрашивание замкнутой области.

dum = FloodFill (x, y, bnd) – закрашивание замкнутой области с точки (х,у) (не лежащей на контуре) текущим цветом. Bnd – индекс цвета ограничивающего контура. При достижении цвета bnd закрашивание в данном направлении заканчивается. При неуспешном выполнении возвращается нулевое значение.

Рисование линии.

Функция LineTo рисует линию с текущей позиции до заданной точки (х, y) в координатах порта просмотра. После успешного выполнения (возвращено ненулевое значение) текущая позиция устанавливается в точку (х, у). dum = LineTo (x, y)

Перемещение текущей позиции графического вывода в заданную точку (х1, у1)

Calll MoveTo (x1, y1, xy) – xy – локальное имя структуры xycoord, возвращающей координаты предыдущей позиции.

Рисование прямоугольника.

dum = Rectangle ($GFILLINGTERIOR, x1, y1, x2, y2)

При использовании $GBORDER рисуется только контур прямоугольника. Возвращается 0 только при возникновении ошибки.

Рисование точки.

dum = SetPixel (x, y), в случае ошибки возвращается – 1.

Пример см. на рисунке стр. 5

4.2. Отображение текста

Шрифты делятся на:

битовые – отображаются поточечно ‑ символ состоит из набора точек. Битовые шрифты имеют фиксированный размер и не масштабируются.

векторные – символ состоит из последовательных линий и дуг, его образующих. Векторные шрифты масштабируемы.

Данная ситуация аналогична форматам изображения.

точечному (растровому), состоящему из разноцветных точек (bmp).

векторному, состоящему из набора графических примитивов (wmf, dwg). Конвертация из растрового формата в векторный более сложна, чем наоборот, но возможна (например, с помощью программы RasterVect (htttp://www.rastervect.com))

Шрифты в MS Fortran:

Тип шрифта Отображение Размеры

Courier

Helv

Tms Rmn

Modern

Roman

Битовый

Битовый

Битовый

Векторный

Векторный

10*8; 12*9; 15*12

10*5; 12*7; 15*8; 18*9; 22*12; 28*16

10*5; 12*6; 15*8; 16*9; 29*12; 26*16

масштабируемый

масштабируемый

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

выбор (регистрация) шрифта

установка текущего шрифта из регистра

отображение текста текущим шрифтом

выгрузка шрифтов из памяти

4.2.1. Выбор шрифта

Процесс регистрации шрифта представляет собой загрузку в ОЗУ соответствующего .fon файла

Синтаксис: dum = RegisterFonts (filename), где: filename – имя fon файла с необязательным указанием пути доступа. Возможно использование подстановочных символов * и ?.

Пример:

Dum = RegisterFonts (‘C:\MSLIB\FONT\*.fon‘)

Вывести текст шрифтом может только функция outgtext. В случае ошибки возвращается следующее значения:

- 1 нет заданного файла или каталога

- 2 один или более FON файлов является двоичными

- 3 один или более FON файлов испорчены.

4.2.2. Установка шрифта

Установка шрифта производится функцией SetFont

Пример:

Dum = SetFont (“t‘Roman’h18”)

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

Параметр Значение

t’fontname’

hy

wx

f

p

v

r

b

Имя шрифта. В апострофах указывается одно из следующих: courier, helv, tms rmn, modern, script, roman, helv Cyrillic

Высота символов пикселях (у)

Ширина символов пикселях (х)

Выбор фиксированного шрифта

Выбор пропорционального шрифта

Выбор векторного шрифта

Выбор битового шрифта

Выбор наиболее подходящего шрифта

Функция setfont при успешном выполнении возвращает 0, иначе – 1.

Приоритет параметров при выборе шрифта

высота

начертание (f/p)

ширина

разрядка (v/r).

Отображение текста.

Для написания текста текущим шрифтом необходимо:

установить координату вывода текста п/п move to – см. выше

передать текст на экран с помощью процедуры OutGText.

Пример:

Call MoveTo (50,60,xy)

Call OutGText (‘Minsk, 2001’)

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

Character *12 val

……………………

call moveto (xdin + 5, posy, xy)

call outgtext (‘E=’)

write (val,’(f12.2\)’)E

call outgtext (val) ! вывод значения

call outgtext (' MPa')

Определение параметров установленного шрифта можно осуществить функцией GetFontInfo, которая возвращает характеристики шрифта в виде структуры fontinfo, определенной в файле fgraph.fd.

Пример:

RECORD /fontinfo/fi

………………………

dum = GetFontInfo (fi)

write (5,*)’ Путь к файлу шрифта –‘,fi.filename

Элементы структуры fontinfo:

type – тип шрифта: 1-векторный, 0-битовый

ascent – размещение от верхней базовой линии пиксела

Integer*2 pixwidth –ширина символов в пикселях (0-пропорциональный шрифт)

pixheight - высота символов в пикселях (0-пропорциональный шрифт)

avgvidth – средняя ширина символов в пикселях

filename – имя файла с путем доступа

Character facename – имя шрифта.

Выгрузка шрифта.

Выгрузка зарегистрированных шрифтов из памяти осуществляется п/п UnRegisterFonts ()

Пример программы деления экрана на 4 области.

! File: geomshar.for

$DEBUG ! Производит дополнительные проверки при компиляции

$STORAGE:2 ! Переменные и константы целого типа:2-х байтовые (integer*2)

$DECLARE ! Генерация предупреждающих сообщений для необъявленных переменных

include 'fgraph.fi' ! Включение интерфейсов графических функций в начале каждого файла

interface to function getch() ! Объявление ф-ции getch, ее

integer getch [C, alias:'_getch'] ! атрибутов, типов формальных

end ! параметров

program Demonstr_devide_screen ! Объявление головной программы

implicit NONE ! Запретить неявное объявление типов

integer *2 i2 ! Фиктивная переменная

integer getch [EXTERN]

include 'fgraph.fd' ! Объявление типов графических функций, объявление и задание параметров, определение структур (STRUCTURE) в каждой графической п/п

i2=setvideomode($MAXRESMODE) ! Установить видеорежим с max разрешением

call devide_graph_area()

i2=getch()  ! Задержка до нажатия клавиши

i2=setvideomode($DEFAULTMODE) ! Установить предыдущий видеорежим

end

 ! п/п деления экрана на 4 области

subroutine devide_graph_area()

include 'fgraph.fd'

integer*2 i2

integer*2 nx,ny ! Max кол-во пиксел по X и Y

integer*2 xdin,ydin ! Координаты общей точки областей

! integer*2 nr,nc ! Max кол-во строк и столбцов

real kx,ky

record /videoconfig/ vc ! Подключ. структуры videoconfig

!  record /rcCOORD/ rc ! и rccoord, определенных в файле fgraph.fd

record /xyCOORD/ xy ! xy - образец типа xycoord

call clearscreen($GCLEARSCREEN)! Очистка экрана

call getvideoconfig(vc) ! Определение видеоконфигурации

kx=75.0 ! Коэф-ты в %, определяющие положе-

ky=80.0 ! ние общей точки областей

nx=vc.numxpixels ! см. файл fgraph.fd

ny=vc.numypixels ! см. файл fgraph.fd

xdin=int2(kx*nx/100)

ydin=int2(ky*ny/100)

i2 = setbkcolor($GRAY) ! Установка цвета фона

i2=setcolor(6) ! Цвет красный

i2=rectangle($GBORDER,1,1,nx-1,ny-1) ! Рамка всей области экрана

i2=rectangle($GBORDER,2,2,xdin,ydin) ! Рамка области чертежа

i2=rectangle($GBORDER,2,ydin+1,xdin,ny-2)! Рамка области ввода

i2=rectangle($GBORDER,xdin+1,2,nx-2,ydin)!Рамка информац. области

i2=rectangle($GBORDER,xdin+1,ydin+1,nx-2,ny-2)! Область автора

i2=setcolor(12) ! Цвет светлокрасный

 ! Оформление области автора

if (registerfonts('D:\MSLIB\*.fon').LT.0) then ! инициализация

i2=registerfonts('C:\MSLIB\*.fon') ! шрифтов

end if ! библиотеки

i2=setfont("t'Helv Cyrillic'h18w8b"C) !Установка шрифта

! i2=settextcolor(2) ! Установка цвета текста

! nr=vc.numtextrows

! nc=vc.numtextcols

call moveto(xdin+40,ydin+10, xy)

call outgtext (' ¦ ¦ + +') ! Вывод текста в текущ. позицию

call moveto(xdin+30,ydin+30, xy)

call outgtext ('+ГЕбМГ +.+.')

call moveto(xdin+50,ydin+50, xy)

call outgtext (' 1998')

end

Пример использования функции Getch, возвращающей код нажатой клавиши.

! Программа печати кода нажатой клавиши

$debug

interface to function getch()

integer*2 getch [C, alias:'_getch'] ! Интерфейс Си функции

end

integer *2 getch [EXTERN]

integer *2 scod

integer i

do i=1,26 ! Отступ в 26 строк

print*

enddo


Информация о работе «Графическое программирование на Ms Fortran»
Раздел: Информатика, программирование
Количество знаков с пробелами: 36404
Количество таблиц: 5
Количество изображений: 4

Похожие работы

Скачать
110612
10
19

... набор процедур и функций языков программирования Basic и Pascal, позволяют управлять графическим режимом работы экрана, создавать разнооборазные графические изображения и выводить на экран текстовые надписи. ГЛАВА 2. ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ ЯЗЫКА ПРОГРАММИРОВАНИЯ В КУРСЕ ИНФОРМАТИКИ БАЗОВОЙ ШКОЛЫ (НА ПРИМЕРЕ BASIC И PASCAL)   2.1 Разработка мультимедиа курса «Графические возможности языков ...

Скачать
34318
0
0

... ООП. Сейчас язык С++ является языком публикаций по вопросам ООП. Практикум на С/С++:Фактически С++ содержит 2 языка: Полностью включает низкоуровневый Си, поддерживающий конструкции СП, и, собственно, С++ (Си с классами) – язык объектно-ориентированного программирования (ООП). Мы находимся сейчас на технологической ступени структурного программирования, поэтому начинаем с Си: Знакомство с С, ...

Скачать
35650
0
0

... # будет тесно интегрирован с языком XML[1]. 2.2 Паскаль Паскаль [PASCAL - акроним с французского - Program Applique a la Selection et la Compilation Automatique de la Litterature] - Процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского ...

Скачать
50713
0
1

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

0 комментариев


Наверх