您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > fortran中QuickWin绘图基础
1QuickWin绘图基础QuickWin支持以像素为基础的图形,其图形库包括了一套完整的图形函数集。1.QuickWin应用程序QuickWin图形库提供了MSFLIB.F90和MSFLIB.MOD两个文件,其中包括了访问所有图形函数的说明。文件MSFLIB.F90中包含绘图子程序的定义及接口,文件MSFLIB.MOD中包含了图形过程符号常量说明以及与绘图过程相关的结构体的定义。因此,任何使用QuickWin的程序必须包含USEMSFLIB语句以访问QuickWin的图形库,USEMSFLIB语句应出现在任何声明语句和其他模块包含语句之前。在默认情况下,QuickWin应用程序拥有一个框架主窗口和一个输出子窗口。在主窗口中,有对子窗口及其图形和文本实施操作的菜单栏,其中,File菜单中的Save命令可以把绘图结果保存成*.BMP位图文件。2.QuickWin应用程序的创建例1创建显示正弦波形的QuickWin应用程序。操作步骤如下:(1)在MicrosoftDeveloperStudio中单击File菜单下的New菜单项,在New对话框中选择ProjectWorkspace,单击OK按钮。(2)在NewProjectWorkspace对话框中,选择QuickWinApplication,将工程名称设置为My_win,单击Create按钮。(3)在MicrosoftDeveloperStudio中单击File菜单下的New菜单项,在New对话框中选择TextFile,单击OK按钮,在编辑区输入以下源程序:USEMSFLIBPARAMETER(PI=3.141593)TYPE(QWINFO)winfoTYPE(WXYCOORD)xyINTEGER(2)resultREALaREAL(8)x,yCHARACTERC*4!设置子窗口最大化winfo.type=QWIN$MAXresult=SETWSIZEQQ(0,winfo)result=SETWSIZEQQ(QWIN$FRAMEWINDOW,winfo)!设置子窗口的背景色为白色result=SETBKCOLORRGB(#FFFFFF)CALLCLEARSCREEN($GCLEARSCREEN)!设置绘图的颜色为黑色result=SETCOLORRGB(#000000)!设置视窗result=SETWINDOW(.TRUE.,-2*pi-1,1.5,2*pi+1,-1.5)!绘制坐标轴x=2*pi+0.5CALLMOVETO_W(-x,0D0,XY)result=LINETO_W(x,0D0)!横轴y=1.2CALLMOVETO_W(0D0,y,XY)RESULT=LINETO_W(0D0,-y)!纵轴!坐标轴刻度RESULT=INITIALIZEFONTS()RESULT=SETFONT('h16w12i')DOi=-360,360,90x=pi*i/180-0.5CALLMOVETO_W(x,0D0,XY)WRITE(c,(I4))iCALLOUTGTEXT(c)ENDDO!绘制正弦曲线DOa=-360,360,0.5x=pi*a/180y=SIN(x)result=SETPIXEL_W(x,y)ENDDOREAD(*,*)!按回车键结束END(4)以文件名demo.f90保存源程序,然后在MicrosoftDeveloperStudio中单击Insert菜单下的FilesintoProject菜单项,将Demo.f90文件加入到My_win工程中;(5)在MicrosoftDeveloperStudio中分别单击Build菜单下的Compile、Build、Execute菜单项,用以编译、生成并运行My_win文件。2QuickWin窗口的创建QuickWin库包含了许多创建和控制QuickWin窗口的过程。下面介绍这些过程。2.1访问窗口属性设置图形模式,可使用SETWINDOWCONFIG函数。通过给派生类WINDOWCONFIG中的分量赋值,指定当前的窗口大小等。函数调用方法如下:RESULT=SETWINDOWCONFIG(WC)其中,返回值RESULT为LOGICAL型变量,若调用成功,返回值为.TRUE.,否则为.FALSE.。WC为WINDOWCONFIG结构体类型变量,该类型在MSFLIB.MOD中定义,包含了窗口的大小、颜色、字符集等属性,其定义如下:TYPEWINDOWCONFIGINTEGER(2)NUMXPIXELS!X轴的像素个数INTEGER(2)NUMYPIXELS!Y轴的像素个数INTEGER(2)NUMTEXTCOLS!最大文本列数INTEGER(2)NUMTEXTROWS!最大文本行数INTEGER(2)NUMCOLORS!颜色索引数INTEGER(4)FONTSIZE!缺省的字体大小。CHARACTER(80)TITLE!窗口标题CHARACTE(32)EXTENDFONTNAME!系统提供的多字节字体,如中文宋体INTEGER(4)EXTENDFONTSIZE!用于设置多字节字符时的字体大小INTEGER(4)EXTENDFONTATTRIBUTES!字体属性,如粗体、斜体等INTEGER(2)BITSPERPIXEL!每像素的位数ENDTYPEWINDOWCONFIG默认的QuickWin子窗口是全屏模式,例如屏幕分辨率为1024×768,则子窗口X轴的像素个数为1024,Y轴的像素个数为768。调用SETWINDOWCONFIG函数设置图形模式,必须为每个分量指定一个确定的值。若只给出某些字段的值,将导致其他字段的值无效。如果WC中的分量的值赋值为-1,即表示该项属性由系统指定。例2设置窗口大小为800×600像素,字体大小为10×12。USEMSFLIBTYPE(WINDOWCONFIG)WCLOGICALSTATUSINTEGER(2)RESULTWC.NUMXPIXELS=800WC.NUMYPIXELS=600WC.NUMTEXTCOLS=-1WC.NUMTEXTROWS=-1WC.NUMCOLORS=-1WC.TITLE=THISISATESTCWC.FONTSIZE=#000A000C!000A、000C分别为10、12的十六进制表示STATUS=SETWINDOWCONFIG(WC)RESULT=SETTEXTCOLORRGB(#FFFFFF)IF(STATUS)THENWRITE(*,*)WC.NUMTEXTCOLS,WC.NUMTEXTROWSELSEWRITE(*,*)ERRORENDIFEND运行程序,可以看到NUMTEXTCOLS为80(800/10),NUMTEXTROWS为50(600/12)。2.2窗口操作1.打开子窗口QuickWin应用程序是一个多文档窗口,可使用OPEN语句生成子窗口,语句格式如下:OPEN(UNIT=n,FILE='USER',TITLE=wname,IOFOCUS=status)选项说明:(1)FILE='USER'用于打开一个窗口。若缺省,则弹出Windows标准的Open对话框,以供输入文件名,默认子窗口为80列×30行的文本窗口。一个QuickWin应用程序最多可以同时打开40个子窗口。通过引用子窗口的单元号,就可以将输出(文本或图形)定向到单元号所代表的子窗口中。(2)TITLE=wname指定子窗口的标题,wname为字符型常量或变量。OPEN语句打开子窗口所对应的通道,但并不立即显示该子窗口。只有当使用SETWINDOWCONFIG函数设置窗体属性、执行输入/输出语句或显示图形时才显示子窗口,并按照通道号确定为哪一个子窗口。例如:OPEN(UNIT=12,FILE='USER',TITLE='OUTPUTWINDOW')WRITE(12,*)'HELLOWORLD'用OPEN语句中的FILE='USER'打开子窗口时,其对应的其他参数必须设置为顺序文件(缺省值),其他文件格式(如随机文件、无格式文件等)则会导致运行时错误。2.激活窗口使一个子窗口成为活动的,可通过调用SETACTIVEQQ函数来实现。函数格式如下:result=SETACTIVEQQ(unit)其中,result为INTEGER(4)类型,用于返回函数执行的结果,函数执行成功返回1,否则返回0。3.控制窗口的大小和位置调用函数SETWSIZEQQ可设置窗口的大小和位置。子窗口的位置和大小以文本的行数和列数来表示;而主窗口的位置和大小以屏幕像素点为单位来表示。result=SETWSIZEQQ(unit,winfo)其中,result为INTEGER(4)类型,用于返回函数执行的结果,函数执行成功返回0,否则返回1个非0值。unit为窗口的通道号,如果没有使用OPEN语句指定启动窗口,通道号为0、5和6默认为启动窗口的通道号;winfo为结构体QWINFO类型。结构体QWINFO包含窗口的位置和大小信息,它在模块MSFLIB.MOD中的定义为:TYPEQWINFOINTEGER(2)TYPE!窗口类型INTEGER(2)X!左上角的X轴坐标INTEGER(2)Y!左上角的Y轴坐标INTEGER(2)H!窗口的高度INTEGER(2)W!窗口的宽度ENDTYPEQWINFO分量TYPE的取值如表12.2所示。表12.2TYPE的取值说明TYPE的取值说明QWIN$MIN最小化窗口QWIN$MAX最大化窗口3图形坐标系QuickWin的图形坐标分为物理坐标系、视口坐标系和视窗坐标系三种。在缺省情况下,QuickWin坐标系均为左手坐标系。其中,像素坐标系的坐标值为整数,且从0开始计数,故分辨率为640×480的屏幕,其X方向的最大像素坐标值为639,Y方向的最大像素坐标值为479。1.物理坐标绘图操作离不开所要使用的坐标系统。在其他开发环境(如VisualBasic、Delphi等)下绘图,通常采用窗口的物理坐标系,即用像素作为坐标单位,且原点(0,0)位于窗口的左上角,x轴的方向从左到右,y轴的方向从上到下,x轴和y轴的大小取决于当前窗口属性(分辨率和默认字体大小)。分辨率为640×480的窗口的物理坐标系如图12.4所示,图12.4物理坐标系2.视口坐标视口指屏幕上画图的一个矩形区域。在缺省情况下,视口与窗口一致,视口原点与物理坐标原点重合。视口坐标系中的计量单位也是像素,故其坐标也只能取整数。但视口是可以重新设定的,即调用子程序SETVIEWPORT在物理坐标系中重新设置视口边界,调用格式为:CALLSETVIEWPORT(x1,y1,x2,y2)其中,参数的类型均为INTEGER(2),且为物理坐标;(x1,y1)和(x2,y2)分别为视口的左上角和右下角,视口原点位于该视口的左上角。还可以通过SETVIEWORG将视口坐标原点设置在物理坐标点(x,y),调用格式为:CALLSETVIEWORG(x,y,t)其中(x,y)为新原点的物理坐标,t为XYCOORD结构体类型的变量,返回原视口原点的物理坐标值。XYCOORD结构体类型在MSFLIB.MOD中定义为:TYPExycoordINTEGER(2)xcoord!x坐标INTEGER(2)ycoord!y坐标ENDTYPExyc例如,如图12.5所示,将视口坐标原点设置到窗口的(50,100)处。TYPE(xycoord)originCALLSETVIEWORG(INT2(50),INT2(100),origin)?/P图12.5改变后的视口坐标系3.视窗坐标在FPS4.0的QuickWin中,用户可用实际数据直接定义类似笛卡尔坐标系的逻辑窗口坐标系。视窗坐标系是一个实数坐标系,它的设立避免了用户编程时进行实数向整数转换以适应物理坐标系和视口坐标系的麻烦。视窗的设置调用函数SETWINDOW实现,它将整个窗口映射到当前视口中,使图形产生比例变换,并自动裁剪图形。函数的调用形式如下:result=SETWINDOW(finve
本文标题:fortran中QuickWin绘图基础
链接地址:https://www.777doc.com/doc-1431247 .html