首页 > 范文大全 > 正文

运用VB.NET开发公路投标施工总平面图绘制软件

开篇:润墨网以专业的文秘视角,为您筛选了一篇运用VB.NET开发公路投标施工总平面图绘制软件范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

0 引言

对于公路工程投标人员而言,准确并快速地制作出标书始终是尽力追求的目标。施工总平面图是公路工程投标文件施工组织设计的重要组成部分,而且施工总平面图和标书的文字、表格之间有着密切的关联。按照目前的现状,施工总平面图和相关表格都是手工制作,这样不但效率低,而且容易出现不一致的现象,无法满足公路标书制作“准确、快速、美观”的要求。如果能开发出一个程序,只需输入必要的数据,就可以一次性生成标书所需的施工总平面图和相关的文字、表格,则可以大大减轻投标人员的工作负担,加快编标速度并减少出错几率。

1 程序设计思路

1.1 程序设计目标

按照《公路工程标准施工招标文件》(2009年版)的规定,“施工总平面图”的内容为:绘出现场临时设施布置图并附文字说明,说明施工营地、料场、临时设施、加工车间、现场办公、设备及仓储、供电、供水、卫生、生活、道路、消防等设施的情况和布置。另外,“临时占地计划表”与施工总平面图有密切关系。

根据公路为线形建筑物的特点,先由用户设定好必要的参数(路线起讫点桩号、路基宽度等),程序根据参数对主线进行处理,然后围绕主线进行现场临时设施布置。同时,提供“导出文字说明和表格”功能,能自动生成与施工总平面图有关的文字说明和表格。

1.2 选择开发工具

根据当今软件业的现状和编制公路投标文件的要求,利用Autodesk公司的AutoCAD绘图软件进行二次开发是合理的选择。

传统的AutoCAD二次开发工具为AutoLISP、C++ObjectARX和基于微软ActiveX技术的Visual Basic。在当今微软的.NET架构成为主流的情况下,Autodesk公司适时为AutoCAD的开发增加了.NET API(Application Programming Interface,应用程序编程接口)。.NET API提供了一系列托管的外包类(Managed Wrapper Class),使开发人员可以在.NET框架下,使用、C#等语言对AutoCAD进行二次开发。.NET API既拥有与C++相近的强大功能,又比C++简单易用,还可以享用.NET的丰富资源。程序代码被编译成为一个DLL文件,作为一个命令被AutoCAD调用,同时也能调用AutoCAD的内部函数,能真正快速的访问AutoCAD图形数据库。根据笔者测试,同样是完成绘制10000条直线的任务,用AutoCAD内置的VBA耗时为1047ms, 2008利用传统的ActiveX 自动化接口耗时达到12s,而用.NET API则仅耗时109ms。可见,.NET API是适合工程技术人员进行AutoCAD二次开发的较理想的工具。

根据目前主流微机的配置,推荐的Visual studio和AutoCAD版本组合为:Visual Basic 2008+AutoCAD 2008,调试速度较快,且能满足程序的要求。

2 程序的实现

2.1 程序模块

根据程序设计目标,本程序设置了4个模块:程序界面模块、图形绘制模块、数据存取模块和数据导出模块。

2.2 程序界面设计

启动 2008,新建一个类库项目,添加一个Windows窗体,作为程序的主界面。

程序主界面应该尽可能简洁明了,符合工程技术人员的操作习惯。为此,本程序设计成“一键式”操作,输入必要的数据后,只要点击一个按键即可完成施工总平面图及其文字说明的制作。窗体需要用到的控件包括MenuStrip、PropertyGrid、DataGridView和Button等。

2.3 结合AutoCAD绘制图形

为了利用AutoCAD的.NET API,项目需要引用AutoCAD安装目录内的“acdbmgd.dll”、“acmgd.dll”两个文件。acdbmgd.dll包含ObjectDBX托管类,acmgd.dll包含AutoCAD托管类。

公路主线根据图纸中的曲线表或路线图用AutoCAD绘制,成为一条Polyline(多段线)。

程序用Editor的GetEntity方法选取此Polyline。接下来,程序要在此Polyline的基础上,按照设定的参数绘制整个路线,并按照用户的意图,在指定位置插入各种图元。

先编制若干个通用函数,分别用以完成加入图形对象、插入块、插入文字等任务,供主程序调用。以加入图形对象为例:

Public Shared Function AppendEntity(ByVal acEnt As Entity) As ObjectId

Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

Dim db As Database = HostApplicationServices.WorkingDatabase

Dim acEntId As ObjectId

Using docLock As DocumentLock = acDoc.LockDocument()

Using acTrans As Transaction = db.TransactionManager.StartTransaction()

Dim bt As BlockTable = DirectCast(acTrans.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)

Dim btr As BlockTableRecord = DirectCast(acTrans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)

acEntId = btr.AppendEntity(acEnt)

acTrans.AddNewlyCreatedDBObject(acEnt, True)

mit()

End Using

End Using

db.Dispose()

Return acEntId

End Function

如果要加入一条线段acLine,可以先定义此线段,然后调用此函数:

MSpace.AppendEntity(acLine)

可以看出,利用.NET API操作AutoCAD的过程,实际上是一个对数据库进行操作的过程。图形中的每个实体都是存在于数据库中的记录,要对数据库进行操作,首先要锁定文档,通过语句对实体进行各种编辑,然后通过Transaction的Commit将改变后的结果提交给AutoCAD,最后将文档解锁。由于此过程比较繁琐,因此自行编写函数供主程序调用,这样可以提高编程效率,并提高代码的通用性和可维护性。还可以把这些通用函数编译成dll文件,供其他程序调用,这也是提高编程效率的办法。

AutoCAD 的.NET API内置大量的方法,大大简化了开发者的编程工作,帮助开发者用较少的代码完成需要程序达到的目标。

程序绘制完成的施工总平面图基本不需人工修改便可直接在标书中使用(图略)。

2.4 数据存取

由于XML文档是.NET支持的标准文档,而且本程序需要的数据都适合采用XML格式储存,因此,本程序的数据采用XML技术进行储存和读取。VS2008为储存和读取XML文档和数据建有专门的System.Xml 命名空间,编写了xmlDoc和XmlElement等类进行文件操作,可以在本程序的数据存取中得到充分利用。

2.5 数据导出

Excel 从2003版开始,增加了对.NET的支持。因此,选择将本程序的数据导出到Excel 2003,自动生成与施工总平面图相关的表格(临时占地计划表)。

3 结论

本文主要叙述了如何利用结合AutoCAD的.NET API技术进行公路投标用施工总平面图绘制软件的开发的思路和过程。据此开发出的标书制作软件,实用性和针对性较强,对提高标书制作的准确性和速度起到了显著的作用,受到公路标书制作人员的好评。

参考文献

[1]公路工程标准施工招标文件(2009年版)[M].人民交通出版社.

[2]童爱红应用教程[M].北京交通大学出版社.

[3]Autodesk开发者中心.www.省略/adsk/servlet/index?siteID=1170359&id=10469845.