




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual Fortran 高级编程技术 Microsof 公司推出了支持32位的FORTRAN POWER STATION1.0 到FORTRAN POWER STATION4.0编译器后将其卖给了DEC公司。DEC随即推出了DVF5.0(Digital Visual FORTRAN 5.0),其工作环境与MFC5.0完全一致,最近DEC又推出了DVF.0(Digital Visual FORTRAN .0,其工作环境与MFC.0完全一致。 FORTRAN在DOS下的编程技术相信早以为大家熟悉。有关FORTRAN90方面的书籍也不少见,因此这里不再赘述。以下主要以最新的DVF5.0讲述有关FORTRAN图形编程的方法。1 DVF 概述2 QuickWin Application3 Win32 Application4 OpenGL1 DVF概述1. 1 安装1) 在安装选项中,注意选择 /Samples,这里包含了DVF的丰富例子。2) 要拷贝 /Msdn 子目录,这里包含了API及OPENGL函数的帮助。3) 可以网上下载升级。1.2 语言1) 书写格式 不受列的限制,可自由书写。 注释在任何地方由!开始。 续行在行尾加&。2) 动态数组 优点:动态数组的维界在程序执行过程中随时可按需要变化,数据需要占多少内存,就可在程序中动态地分配给数组多少内存;如果该数组以后不再使用,又可释放该数组,把该数组占用的内存归还给系统另作他用。这样可以节约使用内存,提高内存使用效率。动态数组主程序与子程序。 语句:? 属性说明语句ALLOCATABLE? 分配语句ALLOCATE(数组名1(形状描述),数组名2(形状描述),STAT=变量 名)? 释放语句DEALLOCATE(动态数组名1,动态数组名2,STAT=变量名) 例子程序1REAL(8),ALLOCATABLE:X(:),Y(:),Z(:)INTEGER(4):NODEREAD(*,*) NODEALLOCATE (X(1:NODE),Y(1:NODE),Z(1:NODE)DO I=1,NODEX(I)=1.0Y(I)=1.0Z(I)=IEND DODO I=1,NODEWRITE(*,*) X(I),Y(I),Z(I)END DODEALLOCATE(X,Y,Z)END3) 模块 优点:模块是一种在主程序单元之外独立编写的程序单元。模块程序单元内没有可执行语句,除了说明语句外,最多包含模块过程。主要作用是供其他程序单元引用,即数据的共享与模块过程的复制。包含了COMMON与INCLUDE的全部功能。 语句:a 模块的编写MODULE 模块名类型说明部分CONTAINS模块过程1模块过程NEND MODULE 模块名b 模块的引用USE 模块1,模块2,模块n 例子程序2:! 模块*MODULE MYDATAINTEGER NODE,NELEND MODULE MYDATA!*!主程序*USE MYDATANODE=100NEL=90WRITE(*,*)IN MAIN PROGRAM :WRITE(*,*)NODE=,NODEWRITE(*,*)NEL=,NELCALL SUBPROGRAM()END!*!子程序*SUBROUTINE SUBPROGRAM()USE MYDATAWRITE(*,*)IN SUBPROGRAM :WRITE(*,*)NODE=,NODEWRITE(*,*)NEL=,NELEND SUBROUTINE!*1.2 开发环境1) 建立新文件、新项目 File New Files文件类型:a 固定格式b 自由格式 File New Projects项目类型:a Win32 Console Application:基于命令行的程序(字符界面)。b Standard Graphics Application:单窗口单任务绘图应用程序,易学易用。c Quick Win Application多窗口单任务绘图应用程序,易学易用。d Win32 Application多窗口多任务应用程序,有固定的程序结构,复杂难学。2) 建立资源文件 Insert Resource资源文件类型:a 加速键b 对话框c 图象d 菜单2 Quick Win Application2.1 画图1) 例子程序3SUBROUTINE PLOT_JU()USE DFLIBTYPE (XYCOORD) POSOPEN(8,FILE=USER,TITLE=矩形)I=SETBKCOLOR(3)CALL CLEARSCREEN($GCLEARSCREEN)I=SETCOLORRGB(#FFFFFF)I=RECTANGLE($GFILLINTERIOR,100,100,300,300)END2) 注意点: 必需包含DFLIB库。 子窗口用 OPEN(窗口号,FILE=USER) 打开。 用QuickWin编写的绘图程序不能被Win32 Application引用。2.2 菜单1) 编辑菜单2) 菜单的应用例子程序4LOGICAL(4) FUNCTION INITIALSETTINGS()USE DFLIBLOGICAL(4) RESULTEXTERNAL PLOT_TYPERESULT=APPENDMENUQQ(1,$MENUENABLED,画图(&P)C,PLOT_TYPE)INITIALSETTINGS=.TRUE.END FUNCTION INITIALSETTINGS2.3 对话框1) 编辑对话框2) 对话框的应用例子程序5SUBROUTINE PLOT_TYPE(L)USE DIALOGMIMPLICIT NONEINCLUDE RESOURCE.FDLOGICAL RET,LTYPE(DIALOG)DLGEXTERNAL PLOTRET=DLGINIT(IDD_PLOT_TYPE,DLG)RET=DLGSET(DLG,IDC_PLOT_S1,图形类型:)RET=DLGSET(DLG,IDC_PLOT_L1,2,DLG_NUMITEMS)RET=DLGSET(DLG,IDC_PLOT_L1,矩形C,1)RET=DLGSET(DLG,IDC_PLOT_L1,圆C,2)RET=DLGSETSUB(DLG,IDOK,PLOT)RET=DLGMODAL(DLG)CALL DLGUNINIT(DLG)RETURNEND SUBROUTINESUBROUTINE PLOT(DLG,CONTROL_NAME,CALLBACKTYPE )USE DFLOGMINCLUDE RESOURCE.FDTYPE (DIALOG) DLGINTEGER CONTROL_NAME,CALLBACKTYPE,LOCAL_CALLBACKTYPEINTEGER VALUELOGICAL RETLOCAL_CALLBACKTYPE = CALLBACKTYPERET=DLGGET(DLG,IDC_PLOT_L1,VALUE,1)SELECT CASE (VALUE)CASE(1) CALL PLOT_JU()CASE(2) CALL PLOT_YUAN() CASE DEFAULTEND SELECTCALL DLGEXIT(DLG)END SUBROUTINE3 Win32 Application3.1 概念1) 窗口是Windows应用程序基本的操作单元,是应用程序与用户之间交互的接口环境,也是系统管理应用程序的基本单位。2) 事件驱动Windows程序设计围绕事件或消息的产生驱动运行处理函数。3) 消息Windows应用程序通过发送和接收统一格式的消息与其他应用程序和Windows系统进行信息交换。4) 对象与句柄Windows系统通过句柄标识不同的对象和同类对象中不同的实例。3.2 程序结构1) WinMain函数 WinMain函数是应用程序的入口函数,其功能是完成一系列的定义和初始 化工作,并产生消息循环。 例子程序62) 窗口函数 定义了应用程序对接收到的不同消息的响应,是消息处理分支控制语句的 集合。 例子程序73.3 菜单例子程序83.4 对话框例子程序9INTEGER*4 FUNCTION FILE_INPUT(HWND, MESSAGE, WPARAM, LPARAM)!DEC$ IF DEFINED(_X86_)!DEC$ ATTRIBUTES STDCALL, ALIAS : _FILE_INPUT16 :FILE_INPUT!DEC$ ELSE!DEC$ ATTRIBUTES STDCALL, ALIAS : FILE_INPUT :FILE_INPUT!DEC$ ENDIFUSE DFWINAUSE MYDATAINTEGER*4 HWND, MESSAGE, WPARAM, LPARAM,HLOGICAL BRETCHARACTER*30 STR SELECT CASE (MESSAGE)CASE (WM_INITDIALOG)STR=对话框实例 H=GETDLGITEM(HWND,1201) I=SENDMESSAGE(H,CB_ADDSTRING ,0,LOC(STR(1:10) RETURNCASE (WM_COMMAND)SELECT CASE (LOWORD(WPARAM)CASE (IDCANCEL)I = ENDDIALOG (HWND, 1) FILE_INPUT=TRUERETURNCASE (IDOK) I = ENDDIALOG (HWND, 1) FILE_INPUT=TRUERETURN END SELECT END SELECTFILE_INPUT= FALSERETURNEND3.5 GDI绘图例子程序10SUBROUTINE PLOT(HDC)USE DFWINAUSE MYDATAUSE DFWININTEGER HDC,HFONTLOGICAL BRETID_PLOT=1IF (PLOT_TYPE=1) THENBRET= SELECTOBJECT(HDC, HPEN(1)BRET=ARC(HDC,300,200,700,600,300,200,300,200)BRET=SETTEXTCOLOR(HDC,RGB(0,0,0)BRET=SETBKCOLOR(HDC,RGB(255,255,255)H=65LINE_W=50CALL FONT(H,LINE_W,HFONT)BRET=SELECTOBJECT(HDC,HFONT)BRET=TEXTOUT(HDC,320,400,GDI画图例子1,12)BRET=DELETEOBJECT(HFONT)ELSEBRET= SELECTOBJECT(HDC, HPEN(2)BRET=ARC(HDC,300,200,700,600,300,200,300,200)BRET=SETTEXTCOLOR(HDC,RGB(255,100,0)BRET=SETBKCOLOR(HDC,RGB(255,255,255)H=65LINE_W=50CALL FONT(H,LINE_W,HFONT)BRET=SELECTOBJECT(HDC,HFONT)BRET=TEXTOUT(HDC,320,400,GDI画图例子2,12)BRET=DELETEOBJECT(HFONT)END IFEND SUBROUTINESUBROUTINE FONT(H,LINE_W,HFONT)USE DFWINAINTEGER HFONTHFONT=CREATEFONT(H,0,0,0,LINE_W,0,0,0,ANSI_CHARSET, &OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, &DEFAULT_PITCHIFF_DONTCARE,大号字)ENDSUBROUTINE PEN()USE DFWINA USE MYDATA HPEN(1)=CREATEPEN(PS_SOLID,7,RGB(255,0,0) HPEN(2)=CREATEPEN(PS_SOLOD,7,RGB(0,255,0)END3.6 未解决的问题 工具栏的使用。4 三维计算机图形库OpenGL4.1 概述1) Quick Win、GDI、OpenGL 比较Quick Win GDI OpenGL类型 平面 平面 三维速度 慢 慢 快程度 简单 较复杂 复杂2) 注意点 QuickWin Application和 Win32 Application都能用OpenGL绘图。 要连接 opengl32.lib glu32.lib glaux.lib 。3) 编写OpenGL程序的基本步骤建模设置视点设置光照绘制场景屏幕窗口4.2 OpenGL 实现的功能 基本几何要素。例子程序11.integer retCALL READDATA()call fauxinitdisplaymode(IOR(IOR(AUX_SINGLE,AUX_INDEX),AUX_DEPTH)call fauxinitposition(0,0,700,700)ret=fauxinitwindow(曲面c)call myinit()call fauxreshapefunc(LOC(myreshape)call fauxmainloop(loc(display)end!*subroutine myreshape(w,h)!重新计算 模型,取景变换,投影变换!DEC$ IF DEFINED(_X86_)!DEC$ ATTRIBUTES STDCALL, ALIAS : _myReshape8 : myReshape!DEC$ ELSE!DEC$ ATTRIBUTES STDCALL, ALIAS : myReshape : myReshape!DEC$ ENDIFuse dfopngluse mydatainteger(4) w,hcall fglViewPort(0, 0, W,H)call fglmatrixmode(GL_PROJECTION)call fglloadidentity() callfgluperspective(BIAO_APH+10.,DBLE(w)/DBLE(h),BIAO_S- BIAO_R*1.01,BIAO_S+BIAO_R)call fglmatrixmode(GL_MODELVIEW)call fglloadidentity() CALL FGLTRANSLATEF(X_EYE,Y_EYE,Z_EYE)end subroutine!*subroutine myinit()!明暗处理方式!DEC$ IF DEFINED(_X86_)!DEC$ ATTRIBUTES STDCALL, ALIAS : _myinit0 : myinit!DEC$ ELSE!DEC$ ATTRIBUTES STDCALL, ALIAS : myinit : myinit!DEC$ ENDIFuse dfopngluse mydataA=252./255.B=22./255.C=16./255.CALL FAUXSETONECOLOR(30,A,B,C)CALL FAUXSETONECOLOR(59,A,B,C)CALL FGLCLEARINDEX(REAL(29)CALL FGLSHADEMODEL(GL_SMOOTH)call fgldepthfunc(GL_LEQUAL)call fglenable(GL_DEPTH_TEST)CALL FGLDISABLE(GL_DITHER)end subroutine!*subroutine display()!DEC$ IF DEFINED(_X86_)!DEC$ ATTRIBUTES STDCALL, ALIAS : _display0 : display!DEC$ ELSE!DEC$ ATTRIBUTES STDCALL, ALIAS : display : display!DEC$ ENDIFuse dfopngluse mydataexternal drawmyobjectscall fglclear(GL_COLOR_BUFFER_BIT)!清除视见区的缓冲区call fglclear(GL_DEPTH_BUFFER_BIT)call fglRotatef(-55, 1.0, 0.0, 0.0)call fglRotatef(-45, 0.0, 0.0, 1.0)call drawmyobjects()CALL FGLEND()end subroutine!*subroutine drawmyobjects()use dfopngluse mydataDO I=1,NODEcall fglbegin(GL_POLYGON)CALL FGLINDEXI(59-(Z_NODE(1,I)+400)/30.-2) call fglvertex3f(x_NODE(1,I),y_NODE(1,I),z_NODE(1,I)CALL FGLINDEXI(59-(Z_NODE(2,I)+400)/30.-2) call fglvertex3f(x_NODE(2,I),y_NODE(2,I),z_NODE(2,I)CALL FGLINDEXI(59-(Z_NODE(3,I)+400)/30.-2) call fglvertex3f(x_NODE(3,I),y_NODE(3,I),z_NODE(3,I)CALL FGLINDEXI(59-(Z_NODE(4,I)+400)/30.-2) call fglvertex3f(x_NODE(4,I),y_NODE(4,I),z_NODE(4,I)call fglend()END DOend subroutine 材质、光照处理。例子程序12real(4): ambient(4)real(4): diffuse(4)real(4): position(4)real(4): mat_ambient1(4)real(4): mat_diffuse1(4)REAL(4):SPOT_DIR(3)data ambient/0.0,0.0,0.0,1.0/data diffuse/1.0,1.0,1.0,1.0/data position/-30.,30.0,30.,1.0/data mat_ambient1/0.0,0.5,1.0,1.0/data mat_diffuse1/0.0,0.5,1.0,1.0/DATA SPOT_DIR/1.0,-1.0,-1.0/call fglenable(GL_DEPTH_TEST)call fgldepthfunc(GL_LESS)call fgllightfv(GL_LIGHT0,GL_AMBIENT,loc(ambient)call fgllightfv(GL_LIGHT0,GL_DIFFUSE,loc(diffuse)call fgllightfv(GL_LIGHT0,GL_POSITION,loc(position)CALL FGLLIGHTF(GL_LIGHT0,GL_SPOT_CUTOFF,APHADD)CALL FGLLIGHTFV(G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药店药膏知识培训课件
- 2025年电商平台售后服务团队激励与客户满意度提升研究报告
- 2025年绿色食品可持续发展目标(SDGs)实践与食品添加剂安全报告
- 2025年文化旅游小镇旅游产业链优化与升级报告
- 装饰公司安全培训课件
- 消防高空装备课件
- 消防队装备车辆授课课件
- 消防队培训知识点总结课件
- N-3-Indolylacetyl-glycine-13C2-15N-生命科学试剂-MCE
- 消防装备介绍课件
- IT设备维修申请表
- 郑州市第四中学新初一分班(摸底)语文模拟试题(5套带答案)
- 2-第二章-各向异性材料的应力-应变关系
- 医院防爆反恐应急预案
- 云南省安全员C证考试题库及答案
- 死亡待遇申请表
- 集中供热管网系统一次网的调节方法
- 无线充电技术在汽车上的应用
- 马工程《刑法学(下册)》教学课件 第17章 危害国家安全罪
- 11科室临床路径、单病种管理目录
- 《廉洁从业》企业文化培训课件
评论
0/150
提交评论