10949-1 (607670), страница 2

Файл №607670 10949-1 (Графическое программирование на Ms Fortran) 2 страница10949-1 (607670) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Оконные координаты.

Оконные координаты используются для масштабирования изображения. Они устанавливаются для текущего порта просмотра. Все функции работы с окнами оканчиваются символом “-w”. Значение оконных координат имеют не целочисленный тип Integer (как обычно), а вещественный тип Real*8.

Пример:

dum = SetWindow (.TRUE.,-200.,-56,3.,500.,400.) – установка оконных координат в текущем “порту просмотра”

.TRUE. – увеличение по оси ординат снизу вверх

.FALSE. – увеличение по оси ординат сверху вниз

На рисунке в круглых скобках ( ) показаны физические координаты, в квадратных [ ] оконные координаты. На каждый физический пиксель по ОХ приходится оконных пикселя и по OY 1.91.

При нулевых размерах окна функция не выполняется. При успешном выполнении функция setwindow возвращает ненулевое значение.

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

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

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

interface to function getch()

integer getch[C,alias:’_getch’]

end

program graph_examples

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

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

integer getch[EXTERN]

include 'fgraph.fd' ! Объявление типов графических функций

dum=setvideomode($MAXRESMODE) ! Установить видеорежим с максимальным разрешением

call graph_win()

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

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

end

subroutine graph_win()

include 'fgraph.fd'

integer*2 dum

! DOUBLE PRECISION dg,dv,maxdim,xcen,ycen

real*4 dg,dv,maxdim,xcen,ycen

record /xycoord/xy

record /videoconfig/vc

! Перемещение начала координат в точку (50,100)

call setvieworg(50,100,xy)

! Рисование диагональной линии

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

dum=setcolor(2)

call moveto(-50,-100,xy)

dum=lineto(vc.numxpixels-50,vc.numypixels-100)

read*

call setviewport(100,100,200,200) ! окно просмотра, координаты - физические

dum=floodfill(1,1,3) ! заполнение области (окна просмотра) текущим цветом

! при отсутствии окна просмотра заполняется весь экран

read*

! Рисование и масштабирование эллипса в квадратном окне просмотра

call clearscreen($gclearscreen)

write(5,*)'Введите диаметры эллипса по горизонтали и вертикали'

read(5,*)dg,dv

call setviewport(100,100,300,300) ! окно просмотра, координаты - физические

dum=rectangle($gborder,1,1,199,199) !рамка окна

maxdim=max(dg,dv) ! Максимальный габарит рисунка

dum=setwindow(.false.,0.,0.,maxdim,maxdim)

if(dum.eq.0) write(5,*)'Ошибка установки окна'

! Рисование, масштабирование эллипса и его центровка

xcen=0.5*(maxdim-dg)

ycen=0.5*(maxdim-dv)

dum=ellipse_w($gfillinterior,xcen,ycen,xcen+dg,ycen+dv)

end

На рисунке в круглых скобках ( ) показаны физические координаты, в квадратных [ ] координаты порта просмотра, в фигурных { } оконные координаты.

3.4. Установка атрибутов фигур.

Под атрибутами рисования понимается:

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

установка текущего цвета рисования

установка текущего способа изображения линии (типа)

установка текущей маски заполнения цветом (штриховки)

Установка цвета фона с индексом 2:

dum = setbcolor (2). По умолчанию индекс 2 соответствует зеленому цвету.

Аналогично dum = SetBkColor ($green). $green – символическая константа, указанная в файле fgraph.fd.

Toже цвета рисования.

dum = setcolor (2)

В случае неуспешного выполнения возвращается значение -1.

Установка шаблона для рисования линии

Call SetLineStyle (center), где center – имя 16-ти битной переменной. Бит 1 указывает на рисование соответствующего пиксела текущим цветом, 0 на отсутствие изменений цвета соответствующего пиксела. Шаблон повторяется по всей длине линий.

Пример задания переменной center.

$NODEBUG

integer*2 center /2#1111111100011000/ ! штрихпунктирная линия –

$DEBUG

Установка шаблона штриховки.

Call SetFillMask (shad), где shad – 64-х битный массив 8*8 бит, где каждый бит представляет собой пиксел.

Пример задания shad:

$NODEBUG

integer*1 shading (8)/
> 2#00000001,
> 2#00000010,
> 2#00000100,
> 2#00001000,
> 2#00010000,
> 2#00100000,
> 2#01000000,
> 2#10000000/

$DEBUG

Создание и управление графическими объектами

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:

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

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

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

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

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

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

Характеристики

Тип файла
Документ
Размер
394,91 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7029
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее