第12章 FORTRAN图形操作
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例4 设置绘图窗口为白色,用PRINT语句输出兰色文字,用OUTGTE XT函数输出红色字符。 USE MSFLIB INTEGER(4) RESULT TYPE(XYCOORD) XY RESULT = SETBKCOLORRGB(#FFFFFF) 要使设置的背景色发生作用, 须使用CLEARSCREEN函数 CALL CLEARSCREEN ($GCLEARSCREEN) RESULT = SETTEXTCOLORRGB(#FF0000) 清空目标区域, PRINT *, "This is blue" RESULT = SETCOLORRGB(#0000FF) CALL MOVETO(20,20,XY) CALL OUTGTEXT("This is red") END
位 元 素 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 值 (十六进制) #18 #18 #00 #18 #18 #00 #18 #18 mask (8) 0 0 0 0 1 0 0 0 #08
•线型 线型(LineStyle)是点、横线和空格等按一定规律重复出现而形成的图 案,是构成直线条的基本图元。 CALL SETLINESTYLE (mask) mask是一个16位二进制数,其中每位对应线型图元的一个像素。若位值 为零,则像素保持当前背景色;若位值为1,则像素被置为当前前景色。 缺省线型模式是#FFFF(实线)。如表所示,#FF00表示长虚线型,#F0F 0表示短虚线型,缺省为实线(#FFFF)。
• 绘制形状 • 绘制直线 result = LINETO (x,y) result = LINETO_ W (wx,wy)
USE MSFLIB INTEGER(2) status TYPE (xycoord) xy status=SETCOLORRGB(#FFFFFF) CALL MOVETO(INT2(80), INT2(50), xy) status = LINETO(INT2(240), INT2(150)) CALL SETLINESTYLE (#FF00) status = LINETO(INT2(240), INT2(50Leabharlann Baidu) READ (*,*) ! 按回车键结束程序 END
• 绘制椭圆 result = ELLIPSE (control, xl, yl, x2, y2) result = ELLIPSE_W (control, wxl, wyl, wx2, wy2)
(xl, yl)、(wxl, wyl)为视口坐标系中椭圆外接矩形框左上角的坐标 (x2, y2)、( wx2, wy2)为视口坐标系中椭圆外接矩形框右下角的坐标 使外接矩形为正方形即可画圆。
•视窗坐标 :实数坐标系 result = SETWINDOW (finvert, wx1, wy1, wx2, wy2) 其中,finvert为逻辑量,其值为真,则视窗的Y 轴与视口Y轴 相反,否则与视口坐标系相同。wx1、wy1、wx2、wy2均为 双精度实型,(wx1, wy1)和(wx2, wy2)分别定义视窗的左下角 和右上角,视窗原点由(wx1, wy1)和(wx2, wy2)的值所确定。 设置了视窗坐标系,就不再需要进行数据转换工作,可调用 绘图过程在子窗口中直接绘图。
二、QuickWin窗口的创建
1.设置图形模式
RESULT = SETWINDOWCONFIG(WC)
RESULT为LOGICAL型变量,若调用成功,返回值为.TRUE.,否则为.FALSE.。WC为WIN DOWCONFIG结构体类型变量。 TYPE WINDOWCONFIG INTEGER(2) NUMXPIXELS ! X轴的像素个数 INTEGER(2) NUMYPIXELS ! Y轴的像素个数 INTEGER(2) NUMTEXTCOLS ! 最大文本列数 INTEGER(2) NUMTEXTROWS ! 最大文本行数 INTEGER(2) NUMCOLORS ! 颜色索引数 INTEGER(4) FONTSIZE ! 缺省的字体大小。 CHARACTER(80) TITLE ! 窗口标题 …… END TYPE WINDOWCONFIG
USE MSFLIB INTEGER(2) status INTEGER(1) :: style(8)/#01,#02,#04,#08,#10,#20,#40,#80/ ! 右斜线 ! 绘制红色空心椭圆 status = SETCOLORRGB(#0000FF) status = ELLIPSE( $GBORDER, 80, 50, 240, 150 ) ! 绘制白色填充斜线圆 status = SETCOLORRGB(#FFFFFF) CALL SETFILLMASK(style) status = ELLIPSE( $GFILLINTERIOR, 280, 50, 380, 150 ) END
7
6
5
4
3
2
1
0
位 元 素
7 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0
3 1 1 1 1 1 1 1
2 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
值 (十六进制)
mask (1) mask (2) mask (3) mask (4) mask (5) mask (6) mask (7) mask (8)
位 mask # FF00 # F0F0 # FFFF 15 1 1 1 14 1 1 1 13 1 1 1 12 1 1 1 11 1 0 1 10 1 0 1 9 1 0 1 8 1 0 1 7 0 1 1 6 0 1 1 5 0 1 1 4 0 1 1 3 0 0 1 2 0 0 1 1 0 0 1 0 0 0 1
• 绘制矩形
result = RECTANGLE (control, xl, yl, x2, y2) result = RECTANGLE_W(control, wxl, wyl, wx2, wy2) 说明: (1)result为INTEGER (2)型。如果绘图成功,则返回值不为 零;否则返回值为零。 (2)control为填充标志符,为INTEGER(2) 型,其值只有两 个,即: $GBORER——表示用当前图形色和当前线型绘制矩形框。 $GFILLNTEROR——表示用当前图形色和当前填充样式绘制矩 形。
•填充样式
填充样式(FillMask)是横线、竖线和斜线等按一定规律重复出现而形 成的图案,是构成填充部分的基本图元。
CALL SETFILLMASK (mask)
其中mask为INTEGER(1)型的有8个元素的一维数组,数组元素中的每 一位2进制代表填充元中的一个像素,值为1表示该像素点填充颜色,值 为0表示该像素点不填充颜色;第n个数组元素对应填充元的第n行。如 左表中所示的填充元为虚线,右表中所示的填充元为细实线。
六、图形字符操作
1.初始化字型 numfonts = INITIALIZEFONTS( ) 2.设置字型 从已注册的字形集中确定一种字形作 为当前字形。 result = SETFONT( options ) 其中,result为INTEGER(2)型,如果 函数执行成功,返回字型的索引号, 否则返回负整数。当前字形特征(如 字体、字符的高和宽等)由options指 定,其取值及意义如表所示。 取值 ‘t’ ‘fontnam e’ hx wy f p e 意义
四、图形属性
•图形颜色 RGB的色值由3字节组成,每一字节取值范围为 0~255, 分别代表蓝、绿、红三色的颜色深度,各表示成2位16进制 数字,从右往左依次为红、绿、蓝;数字越大,所对应的 颜色强度越强。
1.设置颜色 result = SETCOLORRGB (color) result = SETBKCOLORRGB (color) result = SETTEXTCOLORRGB (color) color为Integer(4)型,一般用16进制表示颜色取值。
三、图形坐标系
QuickWin坐标系均为左手坐标系。默认为像素坐标系,坐标值 为整数,从0开始计数,故分辨率为640×480的屏幕如下:
将坐标原点设置在物理坐标点(x,y) : CALL SETVIEWORG (x, y, t) 其中(x, y)为新原点的物理坐标,t为XYCOORD 结构体类型的变量。 TYPE xycoord INTEGER(2) xcoord ! x坐标 INTEGER(2) ycoord ! y坐标 END TYPE xycoord
第十二章 FORTRAN图形操作
绘图基础 QuickWin窗口的创建 图形坐标系 图形属性 基本图形函数 图形字符操作
一、QuickWin绘图基础
QuickWin支持以像素为基础的图形,其图形库包括了一 套完整的图形函数集。 1.QuickWin图形库 • MSFLIB.F90:绘图子程序的定义及接口 • MSFLIB.MOD:图形过程符号常量说明以及与绘图过程 相关的结构体的定义 2. QuickWin应用程序的创建
其中(x, y) 为INTEGER(2)型,为视口坐标系中目标像素的坐标;(wx. wy) 为 REAL(8) 型,为视窗坐标系中目标像素的坐标。 3 例12.5 绘制曲线 y sin x 。
USE MSFLIB REAL(8) x, y PARAMETER(pi=3.141593) INTEGER(2) status REAL(8):: DZ = 4.5, XJG = 0.001D0 CALL SETVIEWPORT( 49, 49, 800-50, 600-50) DO x = 0, DZ, XJG ! 画函数曲线 y = sin(x)**3 status=SETPIXELRGB_W(x, y, #FFFFFF) END DO END
• 区域填充 使用当前图形色和填充样式填充一个由特定边界颜色定义 的有界封闭区域 result =FLOODFILLRGB (x, y, color)
result = FLOODFILLRGB_ W (wx, wy, color) 如果起点位于图形内部,则图形内部区域被填充;如果起 点位于图形外部,则背景将被填充。
mask (1) mask (2) mask (3) mask (4) mask (5) mask (6) mask (7)
#08
#08 #08 #08 #08 #08 #08
五、基本图形函数
•画像素点 result = SETPIXELRGB (x, y, color) result = SETPIXELRGB_W (wx,wy, color)
• 设置绘图起点 CALL MOVETO(x, y, xy) CALL MOVETO_W (wx, wy, wxy) wx、wy均为 REAL(8)型,其意义为目标点的视窗坐标;wxy为结构体 WXYCOORD型的变量,结构体WXYCOORD类型在MSFLIB.MOD中 定义如下: TYPE wxycoord REAL(8) wx ! x坐标 REAL(8) wy ! y坐标 END TYPE wxycoord
2.窗口操作
(1) 打开子窗口 OPEN(UNIT = n, FILE = ‘USER’, TITLE = wname, IOFOCUS = status) (2) 激活窗口 result = SETACTIVEQQ(unit) (3) 控制窗口的大小和位置 result = SETWSIZEQQ(unit, winfo) winfo为结构体QWINFO类型。结构体QWINFO包含窗口的位置和大小信 息,它在模块MSFLIB.MOD中的定义为: • QWIN$MIN TYPE QWINFO • INTEGER(2) TYPE ! 窗口类型 QWIN$MAX INTEGER(2) X ! 左上角的X轴坐标 INTEGER(2) Y ! 左上角的Y轴坐标 INTEGER(2) H ! 窗口的高度 INTEGER(2) W ! 窗口的宽度 END TYPE QWINFO