TW-CAD
    Что такое TestWard
    Технология
    Заказать тест
    Регистрация
    FAQ
    Статьи
  Проектирование
    Информация
    Вирт. лаборатория
  Учебный процесс
    1-й курс
      Лекции
      Ликбез
      Сессия
    5-й курс
      Литература
      Практикум
      Сессия
    Консультации
  Информация
    Как с нами связатся
    О нас

 

 

 

Графика в MS-Фортране и ”C “

Графика в MS-Фортране и ”C “

Обзор графики и систематизация имен графических функций для DOS,  WINDOWS

   Большая часть информации идет через глаза, вот почему так популярны: IBM-PC с дисп­леем и WINDOWS с графическим интерфейсом (в DOS-текстовый режим).

Чем мельче точки и чем чаще они расположены, тем качественнее изображение в ряду дисплеев TV, CGA, EGA, VGA, SVGA.. Цветную точку изображения называют
"пиксель" =  pixel  =  pic + cel = picture cell.

   Раскраска миллиона точек экрана – это кропотливое  занятие; оно облегчается паке­том низкоуровневой графики MS. Изображение строится не только из пик­селей, но и из более круп­ных элементов. Библиотека графики годится для "C" и для Фортрана, для ДОС и для WINDOWS, она снабжена интер­фейсами для этих языков.

 

DOS

WINDOWS

Библиотека функций графики

graphics.lib

LLibfew.lib

 

Интерфейсы графики подключают пер­вым оператором …
include 'Fgraph.fi'
интерфейсы графики

 

Описания и определения графики -первый оператор после заго­ловка ПЕ

include 'Fgraph.fd'

Use MSFlib
модуль графики для любой ПЕ
тут же и интерфейсы графики

 

 

следует выбирать тип проекта Quick Win.

 

Библиотека графики содержит около сотни функций, имеющих пугающе длин­ные имена. Секрет прост - имена состоят из 2-3 английских слов, образующих пре­д­ложение в повелительном наклонении. Это предложение дает команду, по­ясняя выполняемое действие, например, 
call
SetTextPosition(..)  или  менее выразительно call settextposition(..)

озна­чает "установить текстовую позицию". Первое слово - это действие, а по­следнее - дополнение, поясняющие назначение подпрограммы. Второе сло­во, ес­ли оно есть, является определением к дополнению, а, если его нет, то это что-то под­ра­зу­ме­ва­емое по умолчанию. Имена некоторых функций могут содержать окон­чание "_W" - от английского world, указывающего на использование миро­вых ко­ор­динат. Пе­ре­чис­ленные ниже функции классифицированы по действи­ям, оп­ре­де­лениям, на­зна­чению и окончанию. Если в колонке перечислено нес­ко­ль­ко слов, то воз­можно любое сочетание с другими колонками. Это упрощает по­ни­ма­ние назна­чение функций графики, так как в помощи по Форт­рану выпол­нена лишь клас­си­фи­кация полных имен. Параметры функций, испо­ль­зуемые ко­н­с­та­н­ты (тоже с длин­ными именами, поясняющее их смысл), возвращаемое значе­ние, исполь­зуемые структуры - все это поясняется в помо­щи для DOS, вызываемой по QH или рези­де­н­тно по "H". Помощь в Windows в FPS4.0 – обычная: либо контекстная, либо по оглавлению, либо через поиск.

Конфигурация, режимы и фонты

Конфигурация определяется не только дисплеем, но и адаптером, установ­ленным внутри  системного блока. Тип адаптера CGA, EGA, VGA, SVGA  - это набор предельных возможностей аппаратуры: по числу пикселей в строке и столбце, по числу символов в строке и столбце, по числу цветов, по объему видеопамяти, по числу сменяемых видеостраниц.

Работа с экраном принципиально различается в DOS и WINDOWS. Все начинается с того, что в  DOS основной режим - текстовый, а в WINDOWS основной режим – графический.Задавая режим, аппаратуру переключают на работу только с символами (текстовый режим) или на работу с пикселями и символами (графический режим). Внутри каждой из двух групп режимов есть много вариантов, регу­лирующих использование цветов, высоту символов текста, число страниц виде­о­памяти и т.д. Весь набор возможностей задается одной константой, а полученная конфигурация может быть опрошена и записана в структуру /VDC/.

   

Фонт-это набор маленьких прямоугольных картинок, по одной на каж­дый си­м­­­­­вол. Каждый фонт хранится в виде отдельного файла. Фонты разли­чаются не то­ль­ко по высоте, но и по стилю написания букв. Для текстовых фонтов вы­­со­та картинки фиксируется при задании ре­жи­­ма, а для графических - может гибко из­ме­няться. При выводе сим­волы адре­су­ют­­ся в матрице символов

  • при выводе на­д­­писей текстовыми фонтами по call OutText('надпись') надписи позицио­нируются с точностью до символа в строке и колонке
  • при выводе надписей графи­ческими фон­тами по call OutGText( 'надпись' )  - надписи позицио­нируются с точностью до пикселя.

 

дейст­вие

по определению и назна­чению

Пояснения

d2=get =>

d2=set=>

Video Config (.. )

опрос видеоконфигурации

установка видеоконфигурации

call get=>

d2=set=>

Video Mode ( .. )

опрос видеорежима

установка видеорежима

D2=register=>

Fonts ( .. )

регистрация группы фонтов

d2=set =>

call get=>

Font ( .. )

 

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

опрос фонта

call get=>

d2=set=>

Visual Page( .. )

Active Page( .. )

видимая страница

активная страница

 

Системы координат

      Экран предостав­ляется программисту в двух видах:

- как прямоугольная матрица из цветных символов, адресуемых по номеру строки и номеру столбца, начиная с (1,1);

- в графическом режиме как прямоугольная матрица из пикселей, адресуемых по номеру строки и номеру столбца, начиная с (0,0); и как матрица сим­волов подобно текстовому режиму.   

   Размеры матриц при работе в DOS увеличиваются в порядке перечисления  адаптеров CGA, EGA, VGA, SVGA-их можно опросить и установить по режиму, за­да­ва­емому константой из 'Fgraph.FD. В отличие от этого при работе в WINDOWS программист сам устанавливает любые виртуаль­ные размеры мат­ри­цы только в связи с размерностью задачи. В WINDOWS автоматически обеспечиваются полосы прокрутки, чего нет в DOS.  

В зависимости от режима и потребностей задачи для адресации отдельных элементов можно использовать 4 системы координат.

 

Физические

портовые

мировые

Текстовые

 Тексто­вый режим

Нет

нет

нет

Да

Графический ре­жим

Да

да

да

Да

 

что адресуем и точка отсчета

координаты пи­кселей, с (0,0) -ве­рх­ний ле­вый угол эк­рана

координа­ты пик­се­лей, с (0,0) - верх­ний левый угол порта

обычные де­ка­р­­товы коо­р­­ди­­­наты точек по заданному размаху

Координаты cимволов, с (1,1) - верх­ний ле­вый угол эк­рана

Structure и ее поля

Xcoord и yCoord

/pxyCoord/ integer*2

/xyCoord/ integer*2

/wxyCoord/ real*8

/rcCoord/ integer*2 row,col

Абсолютные или относи­тельные

Абсолютные

относи­­тельные

относи­­те­льные

Абсолютные

 

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

 


По дейст­виям

по опре­де­­ле­нию и назна­чению

по окончанию

Пояснения

d2=set

WINDOW(.. )

 

Размах мировых координат

call set

View Port ( .. )

 

порт вывода внутри эк­ра­­на

( до этого - весь эк­ран)

call get

 

 

ViewCoord (..)

PhysCoord (..)

WindowCoord (..)

_w мировые

поумолч.-фи­­зи­­че­с­кие от­но­сит.

Преобразование коор­ди­нат из ука­занной на­зна­чением и око­н­­ча­ни­ем в указанные опре­делением

call сlear

Screen(..)

 

Параметр $GсlearScreen $GViewPort ( и пр.) - что стирать

 

Атрибуты изображения

   К основным атрибутам элемента изображения относят: цвет, фон и позицию, заданную в одной из 4 возможных систем координат. Для элементов, более сложных, чем отдельный пиксель, адресуют левый верхний угол описанного прямоугольника. Атрибуты текстового и графического изображения независимы.

Дейст­вие

по опреде­­лениям

по назна­чению

По окончанию

Пояснения

d2=get

d2=set

Text

по умолч.- гра­фическ.

Color (.. )

 

 

Цвет

d2=get

d2=set

Bk

 

Color (.. )

 

цвет фона для текста

d2=get

d2=set

гра­фическ.

Pixel(..)

_w -  мировые

по умолч.-фи­­зи­­чес­кие от­но­си­т.

цвет отдельного пикселя

call get

d2=set

Text

 

Position(..)

 

 

опрос текстовой позиции

установка позиции

call get

 

Current - гра­­­фическ.

Position(..)

_w -  мировые

по умолч.-фи­­зи­­чес­кие от­но­си­т.

опрос текущей гра­­­фи­че­с­кой позиции

   Упомянем о том, что контроля параметров, к сожалению, нет !

 

Рисование линий и фигур, заполнение внутренности замкнутых фигур

    До установки масок идет рисование линий и заполнение внутренностей сплошь. Можно установить маску для пунктирных линий по  call Set Line Style(..) Можно установить маску заполнения внут­рен­но­с­ти (типа зебра, шахматы..) по    call setFillMask(..)  В параметрах функции верхний левый и нижний правый углы опи­сан­­ного прямо­угольника указывают место и размер фигуры, а управляющий параметр задает режим рисования бор­дюра фигуры либо их заполнение.

 



 По дейст­вию

по окончанию

 управляющий параметр

Пояснения

Call Move to(..)

 

 

_W миро­вые

по умолч.-фи­зи­чес­кие

 

перемещение в указанную позицию без рисования

d2=Line to ( .. )

_W мировые

по умолч.-фи­­зи­чес­кие

 

рисовать отрезок прямой линии до ука­занной позиции

d2=Rectangle(..)

_W мировые

по умолч.-фи­­зи­чес­кие

$gBorder- бор­дюр

$gFilliterior   -

заполнение внутри фигуры

рисовать прямо­гольник в ука­зан­ной пози­ции

d2=Ellipse(..)

_W мировые

по умолч.-фи­­зи­чес­кие

$gBorder -бор­дюр

$gFillinterior   -

заполнение внутри фигуры

рисовать эллипс в указанной позиции

d2=Pie(..)

_W мировые

по умолч.-фи­­зи­чес­кие

$gBorder -бор­дюр

$gFillinterior   -

за­п­ол­не­ние внутри фигуры

рисовать сектор в указанной позиции

 

d2=Imageize(..)

call getImage(..)

call putImage(..)

_W мировые

по умолч.-фи­­зи­чес­кие

 

оценить размер

получить образ

скопировать образ

d2=FloodFill(..)

 

 

за­п­ол­не­ние внутрен­ности замкнутой фигу­ры от точки внутри нее

      В каталогах Фортрана  \SOURCE\SAMPLES имеется много небольших поучи­тельных примеров, иллюстрирующих применение графики. Примеры хорошо про­ком­ментированы; их можно скомпилировать и наглядно увидеть результат выполнения.


Пример -  График функции  sin(x)  в отраженных зеркалах

Проиллюстрируем применение пакета, рисуя график функции  sin(x)   в окне все меньшего и меньшего размера.

 

include ' FGRAPH.FI '     !  интерфейсы  для графики ДОС – нет для Windows

program PROsinus

 

Use MSFlib

!  все описания структур, констант и типов для графики для Windows

include 'FGRAPH.FD'  !  все описания структур, констант и типов для графики для ДОС

 

       real *8 PI,wx,wy

        parameter (PI=3.14159)

         record   /videoconfig/ vdc

          record   /xycoord/ xy2

           record    /wxycoord/ wxy8

            record    /rccoord/ cursor

             integer*2 color, d2, m, kst, km

open(3,file='print.out')

 

!  для Windows основной режим уже графический

!– весь пролог, что мелким шрифтом можно опустить

                !  для dos основной режим текстовый, а потому
            !
весь пролог мелким шрифтом, обязательно нужен

                call getvideoconfig(vdc)   ! опрос адаптера

                 write(3,*) ' START: adapter '

                 write(3,*) 'vdc.adapter =', vdc.adapter

                 write(3,*) 'vdc.numtextrows =', vdc.numtextrows

                 write(3,*) 'vdc.numtextcols =', vdc.numtextcols

                 select case (vdc.adapter) ! выбор графического режима для ДОС

                     case( $CGA )

                       d2=setvideomode( $MRES4COLOR )

                     case( $EGA )

                       d2=setvideomode( $ERESCOLOR )

                    case( $VGA )

                      d2=setvideomode( $VRES16COLOR )

                    case DEFAULT

                      write(3,*) ' DEFAULT: нет адаптера '

                      stop 'ОТСУТСТВУЕТ ВИДЕОРЕЖИМ'

                  end select

 

call getvideoconfig(vdc) ! еще опрос адаптера

                 write(3,*) ' SELECTED: videomode: '

                 write(3,*) 'vdc.adapter =', vdc.adapter

                 write(3,*) 'vdc.numtextrows =', vdc.numtextrows

                 write(3,*) 'vdc.numtextcols =', vdc.numtextcols

                 write(3,*) 'vdc.numXpixels =', vdc.numXpixels

                 write(3,*) 'vdc.numYpixels =', vdc.numYpixels

 

!!!  РЕГИСТРАЦИЯ графических шрифтов

77  if( registerfonts('*.fon').lt.0)stop ‘нет ШРИФТ-ФАЙЛа *.fon'

      d2 = setfont("t'Courier'h14w8b")    ! текущий шрифт

 

!- мировые координаты по размаху аргумента и функции

         d2 = setwindow(.TRUE., -PI,-1.5d0, +PI,+1.5d0 )

         d2 = setColor(3) ! голубой будет рамка

         d2 = rectangle($GBorder, 5,5,(vdc.numXpixels-100), (vdc.numYpixels-100) )

 

DO kst. =1,4        ! сколько графиков : сначала 1, потом по <Enter>  ..2, 3, 4

       km = 2**(kst-1)

 Do m=1,km     ! цикл по масштабам

    d2 = setColor(0)              ! черным будет поле синусоиды

   ! порт вывода все меньшего размера внутри экрана

    call SetViewPort( 6,6, (vdc.numXpixels-101)/km, (vdc.numYpixels-101)/km )

    call ClearScreen($GViewPort)

    d2 = setColor(14)         ! желтым будет график

    call Moveto_w(-PI,0, wxy8)   ! начало графика

    do wx= -PI,+PI, PI/8   ! ломаная линия

   wy = sin( real(wx) )

   d2 = lineto_w( wx,wy )    ! отрезок до следующей точки графика

  enddo ! wx= -PI,+PI, PI/8

 

  call GetViewCoord_w(0.d0,0.d0,xy2)  ! начало координат (0,0)

  d2=setColor(12) ! красным будет (0,0)

  d2=rectangle($GfilliInterior, xy2.Xcoord-1,xy2.Ycoord-1, xy2.Xcoord+1,xy2.Ycoord+1)

  call outGtext('(0,0)' )

 

  d2 = setColor(2)  !  оси координат - зеленые

  call Moveto_w( -PI, 0.d0, wxy8) ! ось X

  d2 = lineto_w( +PI, 0.d0 )

  call Moveto_w(0.d0,1.5d0,wxy8) ! ось Y

  d2 = lineto_w( 0.d0,-1.5d0 )

 enddo ! m=1,km  ! конец цикла по масштабам

 

   call SetTextPosition(vdc.numTextRows-3,5,cursor) ! снизу 3-я строка

   d2 = settextColor(12) ! красным будет  цвет текста

   call outtext( ' жми ENTER' )

   read(*,*)

END DO ! конец цикла по графикам

 

d2=setvideomode( $Defaultmode )  ! вернуть обычный режим ОС

end

 

     В рассмотренном примере использованы структуры, подпрограммы и функции графики, выделенные в тексте программы жирным шрифтом. Их подробное описание (как и всех дру­гих функций из пакета графики) имеется в помощи по Фортрану

  • для DOS в H и QH и в документации
  • для Windows – контекстная по F1 или графика-по содержанию

 

 

Hosted by uCoz
.

 

 Web-design Звягин В.Ф. со товарищи: Аминев Р.Ш..
197101, Россия, Санкт-Петербург, ул.Саблинская, 14
ИТМО
Hosted by uCoz