3.3.3 Координаты порта просмотра
“Порт просмотра” (“viewport”) – прямоугольная область экрана в которой осуществляется рисование. “Порт просмотра” устанавливается процедурой setviewport. Действие этой процедуры аналогично процедуре setcliprgn, но с переносом начала координат в левый верхний угол области. При использовании “оконных” координат необходимо создать "порт просмотра”.
Пример:
Call SetViewPort(20,20,200,200)
Аналогично:
Call SetClipRgn(20,20,200,200)
Call SetViewOrg(20,20)
Оконные координаты.
Оконные координаты используются для масштабирования изображения. Они устанавливаются для текущего порта просмотра. Все функции работы с окнами оканчиваются символом “-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
Создание и управление графическими объектами
... набор процедур и функций языков программирования Basic и Pascal, позволяют управлять графическим режимом работы экрана, создавать разнооборазные графические изображения и выводить на экран текстовые надписи. ГЛАВА 2. ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ ЯЗЫКА ПРОГРАММИРОВАНИЯ В КУРСЕ ИНФОРМАТИКИ БАЗОВОЙ ШКОЛЫ (НА ПРИМЕРЕ BASIC И PASCAL) 2.1 Разработка мультимедиа курса «Графические возможности языков ...
... ООП. Сейчас язык С++ является языком публикаций по вопросам ООП. Практикум на С/С++:Фактически С++ содержит 2 языка: Полностью включает низкоуровневый Си, поддерживающий конструкции СП, и, собственно, С++ (Си с классами) – язык объектно-ориентированного программирования (ООП). Мы находимся сейчас на технологической ступени структурного программирования, поэтому начинаем с Си: Знакомство с С, ...
... # будет тесно интегрирован с языком XML[1]. 2.2 Паскаль Паскаль [PASCAL - акроним с французского - Program Applique a la Selection et la Compilation Automatique de la Litterature] - Процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского ...
... проекта считается частично завершенной. Далее необходимо средствами той или иной визуальной системы программирования выполнить компиляцию, откладку и тестирование приложения. Прикладное программное обеспечение Прикладная программа или приложение — программа, предназначенная для выполнения определенных пользовательских задач и рассчитана на непосредственное взаимодействие с пользователем. ...
0 комментариев