1、1计算机开发技术在公路工程中的运用摘要:本文围绕图形编辑软件 AutoCAD 与外部程序 Visual Basic及 Excel三者之间的衔接,从编程的角度阐述了数据信息交换的手段与软件功能深层开发的方法,并对如何应用于公路施工中进行数据处理和图形绘制作了具体介绍,充分地把计算机技术应用于工程中,极大地提高了工作效率。 关键词:AutoCAD、Visual Basic、Excel VBA 、编程、公路工程、开发 Abstract:This paper focused On the joins Of the graphics editing software AutoCAD and the ex
2、ternal program software Visual Basic and ExcelAnd this paper elaborated the means Of the data information exchange and the methods Of deep-seated development Of software from the view Of the programming,which also was used to dispose data and draw graph in highway constructionCalculation technology
3、was fully applied to the engineering,which could greatly enhance the working efficiency Key words:AutoCAD;Visual Basic;Excel VBA;program;highway engineering;development 中图分类号: G623.58 文献标识码: A 文章编号: 2如今,计算机技术越来越广泛地应用于公路领域里的工程建设规划、勘测设计、招投标、工程施工、竣工资料整理等各个方面。然而,有相当一部分的工程技术人员,特别是施工技术人员,他们往往对施工技术了解熟悉,但在工
4、程软件方面应用却显得较为薄弱。即使有应用,也仅局限于使用 WORD编写文档,用 EXCEL填写报表,进行简单的数据计算,用 AutoCAD画进行简单工程图绘制。尽管能满足工作的基本需要,但却忽视了这些软件丰富的开发潜力,不能够把计算机技术很好地植入工程建设之中,造成重复劳动量较多,工作效率低下。 现有的公路工程专业软件很多,涉及到公路到各个领域,但是这些软件绝大多数存在一定的局限性,套用的一般是三级公路以上的技术标准及规范。而相当一部分单位,如一些中小型企业和一些县级交通主管部门,受经济发展水平及管理范围的限制,主要承担通县乡公路、村通村公路的建设与养护,如果运用这些专业软件进行项目管理,使用
5、的可能只是一小部分功能,价格昂贵的软件不能得到有效运用,使用起来既不方便也没有必要。工程人员掌握一些市面上常见软件像OFFICE、AutoCAD、Visual Basic的深层次开发并应用于公路工程领域,对提高自身专业素质无疑是一个好的途径,也给单位节约不小的费用。 一、几个常见软件的介绍 Visual Basic 是在原有的 Basic语言基础上发展起来的,Visual 指的是“可视” ,是开发图形用户界面的方法,Basic 指的是广为流行的BASIC计算机语言。Visual Basic具有简单易学的特性,只要稍有计算3机基础的人就能掌握的编程语言。现在工程技术人员大部分具有中专以上学历,在
6、在校期间对这门语言或多或少有所了解或学习过,因此通过学习和掌握这门编程语言并不是难事。Visual Basic功能强大,其可视化用户设计功能,会使用户在编程设计时就像积木游戏一样轻松,把编程视为一种享受,开发出功能强大的应用程序。 Excel 是微软公司提供的一个强大的电子表格软件,它是微软公司Microsoft Office套装办公软件的一个重要组成部分。在这套办公软件中有一个十分重要的组件就是 VBA组件,这个组件可以与一些外部程序衔接,实现数据、信息的交换和互动,利用这一功能,用户可以使许多繁琐、机械的日常工作得以自动实现,并通过各种精美的界面和实用控件将用户创建的应用程序封装起来,从而
7、极大地提高用户的工作效率以及应用程序的实用性。 AutoCAD 是目前流行的计算机辅助软件,它提供了图形输入、图像编辑、图形输出的一个完整的工作环境,被广泛地应用于机械、土建等众多行业中。它具有开放的体系结构,允许用户和开发者采用 AutoDesk公司提供的工具与接口对其进行扩充和修改,即二次开发接口,能最大限度地满足用户的特殊要求,方便开发人员针对某行业或专业,在 AutoCAD平台上开发出各种不同行业的软件,从而极大地提高了工作效率。 二、AutoCAD 二次开发接口 AutoCAD 现行的开发语言及工具,主要有 Visual LISP、0bjectARX以及 ActiveX Automa
8、tion等,各种工具都具有自身的特点。 Visual LISP是以其易用性而著称,它使用 LISP语言,完全兼容4Auto LISP,并且加入了对事件的响应等功能,使用非常方便。但 Visual LISP并不是一个完全独立的编程语言,它虽然不受 AutoCAD版本的限制,但它作为 AutoCAD的内嵌语言,是无法开发完整的大型 Windows应用程序的。 ObiectARX 是一种强大的开发接口,它以 VisualC+为开发平台,采用先进的面向对象的编程原理,提供可与 AutoCAD直接交互的开发环境,能够方便快捷地开发出高效简洁的 AutoCAD应用程序,甚至可以认为它可以实现 AutoCA
9、D中所有的功能。但是 ObjectARX只能应用在 VisualC+的平台上,而 VisualC+对于工程软件的开发人员来说又是比较难以掌握的。用 VisualC+开发软件过程中制作程序界面十分困难的,而且在AutoCAD的环境下,指针的运用是比较危险的,很容易造成 AutoCAD的崩溃,从而给开发者带来了不小的难度。 ActiveX Automation是一种可通过编程控制另外一个或几个程序的技术,其中作为控制方的程序叫做 Automation客户或控制器,被控制方的程序叫做 Automation服务器。这里所开发的应用程序就是客户程序,而 AutoCAD程序就是服务器程序。ActiveX
10、Automation是面向对象的编程接口,它使用了 OLE的 Automation技术,用户可以访问 AutoCAD所有的绘图对象和非绘图对象。需要强调的是,ActiveX Automation是可以应用在所有支持此项功能的开发平台上,比如现在比较流行的VC、VB、C+Builder、Delphi、VBA 以及 Java等,从而使开发人员可以选择自己喜爱的开发平台进行工作,充分利用先进的开发工具,更加方便地建立优秀应用程序。 5图 1 外部程序通过 ActiveX Automation访问 AutoCAD示意 三、Visual Basic 与 AutoCAD 在公路绘图方面的应用 AutoCA
11、D 从 R14开始提供 ActiveX Automation技术。一个应用程序支持的对象、方法和属性通常在应用程序的对象库中定义。类型库是一个文件或文件的一部分,它描述一个或多个对象的接口。在使用 AutoCAD的 ActiveX Automation对象之前,必须在 Visual Basic中引用该对象库 acad.tlb。通过 Visual Basic的对象浏览器,可以观察到对象的方法、属性及全局公有变量和常量定义等。理解 AutoCAD的对象模型是对其编程的基础。AutoCAD 以层次结构组织对象,在顶层是 Application对象(即 AutoCAD本身),其它对象均为 Applic
12、ation对象的子对象。在Application对象下面是 Preferences和 Documents对象。Preferences对象可以对 AutoCADPreferences菜单项中的几乎每一个选项进行访问和修改,以获取或改变 AutoCAD的优先设置。Documents 对象是控制AutoCAD图形文件的直接对象,它代表某一个装入的 CAD图形文件。Document对象里面有 Model Space和 PaperSpace对象及Blocks、Layers、Plot、Selectionsets、 ViCWS、utility 等一系列对象(集合),其含义与 AutoCAD中相似。 下面,笔
13、者就绘制一条道路纵断面的实例,来说明如何通过Visual Basic对 AutoCAD操作进行工程图的绘制。 6首先说明一下:所用的开发平台 Windows XP,编程软件是 Visual Basic 6.0,AutoCAD 平台是 AutoCAD 2004 版本的。 编程的步骤: (1)通过 Visual Basic 6.0建立一 Windows应用程序,取名为“纵断面绘制” 。 (2)在“工程”中右击“引用” 标签,在弹出的菜单中选择“添加引用” ,在“添加 引用”对话框中选择“com“选项卡下的下拉列表框中的“AutoCAD 2004 Type Library”项(不同版本 CAD有区别
14、),单击右边的“选择”按钮,最后单击下面的“确定”按钮,这样就能使 VB建立与AutoCAD联接的“桥梁” 。 图 2在 VB中引用 AutoCAD库 (3)在窗体中加入几个标签和文本框,用于说明和指示数据文件路径,再添加一个菜单,用于编写代码进行数据计算和图形绘制。 图 3 程序的界面布置 界面分为两个部分,数据输入部分用于标明数据文件和要素文件的文件路径,数据文件和要素文件都采用 TXT文本文件,在数据文件中按固定格式依次存放中桩桩号、地面线高程、设计面高程;在要素文件中按固定格式依次存放竖曲线的起始位置、变坡点高程、变坡点桩号、竖7曲线半径等参数,程序通过对上述两个文件中数据进行读取,为
15、数据计算和图形绘制提供基础数据。 图纸布置部分主要功能是设置图纸布局、比例等参数和工程名称和图号等。 (4)下面进入程序最核心的部分,即程序代码部分。 点击“文件”菜单中的“绘图”子菜单,在这里添加下列代码: Public acadapp As Object 变量声明定义 set acadapp = GetObject(, “autocad.application“) 获取AutoCAD库 If Err Then Err.Clear Set acadapp = CreateObject(“autocad.application“) 建立Application对象 If Err Then Dim
16、 sos sos = MsgBox(“无法连接 CAD,请再次运行本软件,或先启动Autocad!“, 0 + 48, “信息提示“) End End If acadapp.Visible = True显示 AutoCAD界面 Set acadutil = acaddoc.Utility 8End If Set acaddoc = acadapp.ActiveDocument 建立 Document(文档)对象 Set mospace = acaddoc.ModelSpace建立 ModelSpace(模型空间)对象 Set paspace = acaddoc.PaperSpace 建立 Pa
17、perSpace(图纸空间)对象 Set thisdrawing = acadapp.ActiveDocument激活当前文档 上述代码实现在 VB程序中启动 AutoCAD的功能,接下来就是数据读取和计算以及图形绘制过程,因篇幅限制不能详细列出,下面介绍图像绘制的几个重要命令: 在 ModelSpace中用 AddSpline(绘制样条曲线)命令绘制地面线和设计线,特别强调一下,这里不能用 AddLine命令,因为地面线和设计线都是平滑曲线,AddLine 只能绘制直线。用 AddText命令绘制文字注释和说明,用 Rotation属性对对象进行旋转操作。 下面这段代码就是在图形上添加桩号并
18、旋转 90模块中一部分: textstr = zhx(xx) Set textobj = mospace.AddText(textstr, textP, texthgt) textobj.Color = acRed textobj.Rotation = 0.5 * 3.1415926535 9 程序编写完成后,单击“文件”菜单里的“绘图”子菜单就能自动完成图形的绘制。下面是该工程的纵断面 cad图中的一张: 图 4 绘制的纵断面图 四、EXCEL 与 AutoCAD 在公路绘图方面的应用 如前面所述 EXCEL中与 AutoCAD能够良好地衔接,大多数文献资料虽然对此有所介绍,但涉及公路领域较
19、少,也没有较为完整详细的代码,让初学者感到很茫然。通常采用的方法多是利用 AutoCad VBA二次开发功能,Excel 表格进行数据输入存储,读取 Excel表数据后,在 AutoCad中绘制图形。本人将通过对横断面图的绘制来说明 EXCEL VBA与 AutoCad如何进行有机联接,采用的方法是:在 Excel表储存数据,利用 EXCEL的 VBA 二次开发功能调用 AutoCAD进行图形绘制。这样做优点有以下: 减少了文件数量,只需要一个文件就能实现数据存储和绘图功能,而不需要另外增加数据文件,减小文件丢失的风险。 保密性、安全性加强,可以在在 EXCELVBA 中设置密码,避免用户在使
20、用过程中因操作失误而损坏或随意更改代码。 3、维护简单、移植性好,程序编写完成后,可以很容易地运用到其他工程,只需把数据表中的数据做相应的修改即可。 程序编写的过程: 10打开 EXCEL,选择“工具”菜单,选择“宏”下面的“Visual Basic编辑器” ,进入 VBA编辑界面,引用 AutoCAD库。在“工程资源管理器” ,建立数据输入和操作界面。 图 5 程序的界面设计 界面完成后,单击“连接 CAD”按钮,输入启动 AutoCAD代码,代码可以完全借用 VB启动 AutoCAD代码,因为它们核心都是 BASIC语言,调用的又是相同的对象。 实现在 EXCEL中启动 AutoCAD的功
21、能后,接下来就是数据读取和计算及图形绘制过程,EXCEL 有很强大的数据存储、处理功能,利用这一点能给我们的工作带来很大的便利,VBA 访问单元格里的数据可用 Cells对象,其格式为 Cells(i,j) ,i 代表单元格所在的行,j 代表单元格所在的列,通过 for循环,就能读取用户输入的数据了。接下里就是绘图过程函数和横断面面积计算过程,计算断面面积的过程是本程序的核心部分,在这部分里调用“boundary”命令,使设计线和地面线包围起来的部分生成一个封闭的区域,再使用“Area”方法,就能查询出面积,绘图过程使用的方法和函数与 VB调用 AutoCAD里的函数类似,这里不再重复。 图 6绘制的横断面