- 积分
- 17
- 注册时间
- 2005-6-15
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2005-10-5 19:37:41
|
显示全部楼层
来自 上海
Re:【讨论】Fortran 与 C
MS FORTRAN 图形功能介绍 源于同上
FORTRAN 语言是国际上非常流行的一种适用于数值计算的语言。MS FORTRAN 从5.0版本开始开发出了图形功能,FORTRAN语言高效的数值计算和图形功能相结合,使其具有非常广阔的应用前景。本文根据软件提供的帮助文件和参考其它有关资料[1],结合自己的实践体会,将 FORTRAN 的图形功能主要部分作介绍,供有关人员参考使用。
1 FORTRAN 图形库应用环境
MS FORTRAN 图形库的全名为graphics.lib,它包括了一套完整的图形函数集。图开库既可以从MS FORTRAN 中调用,也可以从支持 FORTRAN 调用约定的其它MS语言中进行访问。图形库支持 IBM EGA (及兼容机)、CGA、MCGA和VGA硬件配置的某些方式和AT&T个人微机上的Olivetti视频方工,该库还支持Hercules图形卡、Graphics Card Plus、Incolor卡(及兼容卡)。
2 图形函数调用说明
在调用图形库的函数时,都必须对该函数进行说明。MS FORTRAN提供了fgraph.fi和fgraph.fd两个文件。文件fgraph.fi中包含了interface语句段中的过程说明;文件fgraph.fd则包含了图形过程符号常量说明以及external语句,还定义了videoconfig、xycoord、wxycoord、rccoord和fontinfo五个结构。总之,这两个包含文件包括了访问所有图形函数的必需说明。因此,在调用图形函数时应在程序的开头用include语句引用这两个包含文件。
3 图形函数
MS FORTRAN图形库函数包括外部函数和子程序两种过程。每个外部函数都有一个返回值,返回值均为整型的数。子程序在应用程序中由call调用,无返回值。在下面的介绍中,凡属子程序的都将加以注明。
3.1 显示方式
在FORTRAN图形库中包含了许多定义文本和图形显示方式的函数,它们用来确定图形的环境特征和操作方式等。
displaycursor(toggle)
指定在执行每个图形函数之后显示或隐去光标。当参量toggle设置为?GCURSORON值时显示光标,为?GCURSOROFF值时则隐去光标。
getvideoconfig(s)
子程序,将当前图形环境信息返回到videomode结构参量s中,这些信息可供其它函数使用。
setvideomode(mode)
为特定硬件和显示器配置选择一种屏幕方式(如颜色数和分辨率)。参理mode的取值定义在fgraph.fd中,当mode取?MAXRESMODE和?MAXCOLORMODE 时,分别选择分辨率最高和颜色最多的图形方式,mode取?DEFAULTMODE值时,将屏幕恢复为正常方式。
settextrows(rows)
指定文本方式所用的文本行数。
setvideomoderows(mode,rows)
为特定硬件和显示器组合选择一种屏幕方式。setvideomoderows、settextrows和setvideomode函数若调用成功,均返回设置的文本行数,若出错,则返回O。
3.2 图形坐标
MS FORTRAN 图形库提供的描述屏幕象素位置的坐标系有三种,即物理坐标系、视口坐标系和窗口坐标系。所谓物理坐标系,其原点(0,0)总是位于屏幕的左上角,x轴的方向从左到右,y轴的方向从上到下,x轴和y轴的尺寸取决于配置函数和当前屏幕方式。使用图形库提供的函数,物理坐标系可以实现向视口坐标系转换,视口坐标系又可向窗口坐标系转换。
所有使用窗口坐标的函数均以下划线和字母W结尾,即-W。凡是引用物理坐标和视口坐标的函数都是接收整型参数,而使用窗口坐标的函数则接收双精度型参数。
setvieworg(x、y、s)
子程序,将视口坐标原点(0,0)设置在物理坐标点(x,y)。xycoord结构变量s返回原视口原点的物理坐标值。
setcliprgn(x1,y1,x2,y2)
子程序,定义图形字形的矩形显示区域(称为剪裁区)。物理坐标(x1,y1)和(x2,y2)是定义该区域矩形的左上角和右下角。setcliprgn不改变当前视口坐标系。
setviewport(x1,y1,x2,y2)
子程序,重新设置图形视口,其定义剪裁区的方法和setcliprgn相同,视口坐标的原点设置在点(x1,y1)。
setwindow(finvert,wx1,wy1,wx2,wy2)
将当前视口坐标系转换为窗口坐标系。参量(wx1,wy1)和(wx2,wy2)分别指定窗口的左上角和右下角。参量finvert指定坐标的方向,当取TRUE值时,y轴方向自下向上(笛卡尔坐标);取FALSE值时,y轴方向自上向下(屏幕坐标)。若调用成功,返回非零值;若调用失败,则返回0。
getphyscoord(x,y,s)
子程序,将视口坐标(x,y)转换为物理坐标,并在xycoord结构s中返回物理坐标。
getvtiewcoord(x,y,s)
子程序,将物理坐标(x,y)转换成视口坐标,并将该坐标返回到xycoord结构s中。
getviewcoord-w(wx,wy,s)
子程序,将窗口坐标(wx,wy)转换为视口坐标,并将该坐标返回到wxycoord结构参量s中。
getwindowcoord(x,y,s)
子程序,将视口坐标(x,y)转换为窗口坐标,并在wxycoord结构s中返回窗口坐标。
getcurrentposion(s)
getcurentposion-w(s)
子程序,在xycoord或wxycoord结构参量s中返回当前图形输出位置的坐标。
3.3 调色板和颜色
屏幕上的每种颜色都是用一个相应的“颜色索引”值来表示,“调色板”即是颜色索引值和实际显示色之前的映射(关联)。大多数方式仅支持一个调色板。标准色(缺省值)有16种(0~15),参见fgraph.fd。
remappalette(index,color)
将一个颜色索引index重新映射到颜色值color中。若调用成功,返回原颜色值;若调用失败,则返回-1。
selectpapette(number)
选择调色板。本函数仅适用于视频方式?MRES4 COLOR和?MRESNOCOLOR。
getbkclolor ()
返回当前背景色的值。
setbkcolor(color)
将当前背景色设置为颜色索引(或颜色值)。在彩色文本方式下,setbkcolor接收一个颜色索引,如setbkcolor(2);在彩色图形文式下,setbkcolor接收一个颜色值,如setbkcolor(GREEN)。
getcolor\-()
返回当前前景的颜色索引。
setcolor(color)
设置前景色。color是一个颜色索引。
gettextcolor
返回当前文本色的颜色索引。
settextcolor(index)
为outtext函数输出的文本设置颜色。在彩色文本方式下,index值的范围可以指定为0~31。0~15是标准色,而16~31颜色同0~15,但文本将出现闪烁。
3.4 图形的显示
MS FORTRAN 的图形库允许用指定的坐标系来画出几何图形,它们使用当前背景色、前景色、线型和填充模式。
getlinestyle ()
返回当前线型模式数。线型是一个16位数,其中每位对应一个象素。若位值为零,则象素保持当前背景色,若位值为1,则象素被置为当前色。缺省线型模式是#FFFF(实线)。
setlinestyle(mask)
子程序,设置当前线型。
getfillmask(mask)
子程序,返回当前填充模式。填充模式是一个8×8位的数组,每位表示一个象素。若位值为零,则象素保持不变,若位值为1,则象素被赋值为当前色。
setfillmask(mask)
子程序,设置当前填充模式。
clearscreen(area)
子程序,用于清屏。参量area取得值有:?GCLEARSCREEN、?GVIEWPORT、?WINDOWS。
rectangle(control,x1,y1,x2,y2)
rectangle-w(control,wx1,wy1,wx2,wy2)
画矩形,边界由左上角和右下角坐标定义。当参量control设置为?GFILLINTERIOR值时,矩形用当前颜色和填充模式填充,为?GBORDER值时则不填充。
ellipse(control,x1,y1,x2,y2)
ellipse-w(control,wx1,wy1,wx2,wy2)
画椭圆。椭圆的中心是由左上角和右下角坐标定义的边界矩形的中心,大小则由矩形边界确定。control的意义见rectangle。
polygon(control,lppoints,cpoints)
polygon-w(control,lppoints,cpoints)
画多边形。多边形的各个角点的坐标在xycoord或wxycoord结构数组lppoints中返回参量cpoints为多边形的角点的个数。
lineto(x,y)
lineto-w(wx,xy)
从当前位置到指定点位置画一条直线。
floodfill(x,y,boundary)
floodfill-w(wx,wy,boundary)
从指定坐标点开始使用当前颜色和填充模式对一个区域进行填充。参量boundary为定义区域边界线的颜色索引。
moveto(x,y,s)
moveto-w(wx,wy,s)
子程序,将当前位置移动到指定点。
getpixel(x,y)
getpixel-w(wx,wy)
返回一个指定点的颜色索引值。
setpixel(x,y)
setpixel-w(wx,xy)
将指定点设置为当前色,相当于画点。
3.5 字形的显示
registerfonts(filename)
对字形文件进行“注册”,即读入指定的.fon文件,并将字形的头部信息装入内存中。参量filename是合法.fon文件的路径说明和文件名。MS FORTRAN共提供了六个.fon文件,分别保存Courier、Helv、Tms Rmn、Modern、Script和Roman六种字体的数据。本函数若调用成功,则返回注册的字形个数,若失败则返回一个负值。
setfont(options)
从已注册的字形集中找出一种字形作为当前字形。本函数若调用失败将返回一个负值。当前字形特征由字符型参量options指定,其选项代码有:
t′fontname′ 选择字体
wx 字符宽度,x为象素个数
hy 字符高度,y为象素个数
f(或p) 仅选择一种固定(或比例)间距的字形
v(或r) 仅选择一种向量(或光栅)映射字形
b 自动选择最佳匹配字形
nx 选择字形号x(单独使用)
gefontinfo(fi)
将当前字形特征返回到fontinfo结构fi中。本函数若调用成功则返回0。
getgtextextent(text)
确定字符串text以当前字形输出时的宽度。
setgtextvector(x,y)
子程序,指定字符串的输出方向。参量(x,y)的取值有:
(1,0),缺省值,水平向右输出;
(0,1),反时针旋转90度输出;
(-1,0),反时针旋转180度输出;
(0,-1),反时针旋转270度输出。
outgtext(text)
子程序,将字符串text输出到屏幕,包括尾部的空格。
unregisterfonts
子程序,释放由registenfonts函数分配和使用的内存空间。
3.6 文本的显示
MS FORTRAN 图形库允许屏幕在文本方式和图形方式下可以显示文本。
gettextposition(s)
子程序,将当前文本位置返回到rccoord结构s中。
settextposition(row,colummn,s)
子程序,设置当前文本输出位置于(row,column)处,原文位置返回到rccoord结构s中。
settextwindow(r1,c1,r2,c2)
子程序,用行和列坐标重新定义文本输出窗口。
outtext(text)
子程序,将字串text以文本形式输出到屏幕,包括尾部的空格。
3.7 转换图象
MS FORTRAN 图形库允许在内存和屏幕之间转换图象。利用这一功能可以在屏幕上绘出动画图。
imagesize(x1,y1,x2,y2)
imagesize-w(wx1,wy1,wx2,wy2)
计算由边界矩形定义的图象所占内存字节数。
getimage(x1,y1,x2,y2,image)
getimage-w(wx1,wy1,wx2,wy2,image)
子程序,把由指定边界矩形定义的图象保存在image指向的缓冲区中。
putimage(x,y,image,action)
putimage-w(wx,wy,image,action)
子程序,将存贮在image中图象传送到屏幕。参量action取得?GPSET、?GPRESET、?GAND、?GOR、?XOR值之一。
4 说明
(1)在编制图形应用程序时,开始可调用getvideoconfig检查系统的当前视频配置,以选择设置一种最合适的屏幕方式。而在退出应用程序前,应将屏幕设置为正常方式,以避免其它程序设置屏幕方式时产生潜在冲突。
(2)MS FORTRAN 的图形库设置了三种图形坐标系。对于大多数应用程序(如气象资料的统计分析)而言,使用窗口坐标系,可以很方便地对数据进行比例变换,以便适应于屏幕的大小,直到取得满意、直观的图形效果。
(3)许多图形函数如setivdeomode等,仅能在某种硬件或某种图形方式下有效,若使用非法硬件环境,则返回一错误代码。因此在调用时应注意检查返回值。 |
|