利用AutoCAD的VBA实现城市给水管网绘图自动化

发表日期:2005-06-30 浏览人数: 作者:颜高锋 来源:水利工程网  评论

0 引言

目前,在给排水工程设计工作中,已经有不少城市管网的专业设计软件,但许多软件仍然存在不少问题,譬如界面使用不习惯,数据输入经常出错等等,因此,使用率不高。AutoCAD是工程界使用频率最高,同时也是最基本的绘图软件。不少设计人员通常习惯于自己利用AutoCAD的二次开发工具,编制一些实用、方便的程序。由于在城市给水管网优化计算中,绘图也是一项比较繁琐的工作,它涉及到大量数据的标注。因此,不少给排水设计工作人员都在努力开发更适合人们思维习惯的软件,减少像标注数据这样的重复性工作。本文正是着眼于这一思想,利用AutoCAD 2000中的VBA编制了一个非常实用的绘图程序,使给水管网绘图工作基本上到达自动化。

所谓VBA就是Visual Basic for Application的简称,它不仅可以执行并存取AutoCAD环境的所有资源,还可以整合其他具有VBA能力的应用程序。VBA通过AutoCAD ActiveX Automation接口把信息传送给AutoCAD,而AutoCAD VBA也允许VBA环境与AutoCAD同时执行并通过ActiveX Automation接口提供AutoCAD的程序。由于AutoCAD、ActiveX Automation与VBA的结合方式提供了功能强大的接口,不仅可以操作AutoCAD的内部对象件,更可以在其他的应用程序之间传送或接受数据[1]。文中介绍的方法是:先用Visual FORTRAN编写程序进行管网的优化计算,把计算结果生成一个数据文件,再在AutoCAD中,利用VBA编写程序,直接调用该数据文件,自动进行绘图、标注。

1 绘图

绘制管网图的方法有两种思路:一是以节点为主的绘图方法,二是以管段为主的绘图方法。

1.1以节点为主的绘图方法

由于管网的各个节点之间的关系可以用管网的基本关系矩阵环—节点矩阵表示出来。因此,可以利用环—节点矩阵绘制给水工程的管网图。如果直接利用绘制管网图,在环与环之间的公共管段处就会重复绘制。因此,必须把环—节点矩阵进行一系列数据转换,以保证公共管段不重复调用绘图和标注命令。利用环—节点矩阵,其中I表示管网的环,J表示该环的节点标号,经过转换生成一系列用于绘图的下三角矩阵:节点识别衔接矩阵、管长衔接矩阵、管径衔接矩阵、管段流量衔接矩阵和管段水头损失衔接矩阵N表示管网的节点数。

1.1 .1基本关系矩阵

基本关系矩阵表示以环号为行,以最大环的节点数为列构成的矩阵,写成计算机语言(FORTRAN)就是一个二维数组,即KL(I,J),其中M就是基本关系矩阵的行号,也即是管段所在的环号IN就是基本关系矩阵的列,即环的节点数。KL(I,J)的值就等于管网的节点号。由于环是一个封闭的环,所以各个环的首节点号等于尾节点[2][3] [4]

图1

1.1.2 数据转换

给水管网基本上都是由线段构成,通常情况下,绘制直线都是以点为基础,从直线的起点开始绘图。只要输入各点的坐标,在循环语句中调用VBA中的绘制直线命令就可以自动绘图。因此,绘制管网图的思路是:输入各点的坐标,根据各节点之间的衔接关系,自动绘制管网图。要保证绘图时各管段,特别是公共管段做到不重不漏,关键就是要保证节点识别衔接矩阵完全正确,衔接矩阵不仅在绘图时使用,而且在计算标注优化计算结果的起点坐标、旋转角度时都需要用到。

由基本关系矩阵自动生成节点识别衔接矩阵的方法是:先由基本关系矩阵生成一个过渡矩阵,再由生成一个下三角矩阵衔接矩阵(也可以生成一个上三角衔接矩阵,其它的衔接矩阵一定也要是上三角矩阵) 。其具体做法是先假设,这样,节点K,L就表示相邻的两个节点,再令,若节点K,L不相邻,令,这样就得到一个对称矩阵,对角线元素全部等于0。再由生成一个下三角节点识别衔接矩阵(本文介绍的都是生成的下三角矩阵)[5][6]。以图1为例,如下所示:

   

例如:B(1,1)=0,就表示节点1,B(1,2)=1,表示节点1,2为相邻节点,1—2管段需要绘制。B(1,3)=0,表示1,3节点不相邻,就不需要绘制。2—1管段与1—2管段表示同一管段,在绘图时只能绘一根管段。为了排除多余的一根管段,就必须用一个下三角(或上三角)矩阵来识别节点是否为相邻节点。图1 的下三角节点识别衔接矩阵各元素的值等于矩阵对角线以下对应的各元素的值,矩阵的值如上所示。

用同样的方法,将管段的管长、管径、管段流量、管段水头损失转换为下三角矩阵。这里限于篇幅,管长衔接矩阵、管径衔接矩阵、管段流量衔接矩阵和管段水头损失衔接矩阵就不再列出。判断这些衔接矩阵不为0时,将它们分别按同样的顺序,只输出一列到一个数据文件里,在标注时调用。数据的转换既可以在优化程序里完成,也可以在VBA绘图程序里完成。但在VBA绘图程序里,还需要将二维数组转换为一维数组,不如在优化程序里简捷方便,因为如果在优化程序里完成这步工作,在VBA的绘图程序中只需设置一维数组,直接读入这些数据就可以了。

1.2 以管段为主的绘图方法

以管段为主的绘图方法就是先对管网的各个管段和节点进行编号,然后根据管网的各个管段的编号,写出由管段的起点号和终点号构成的一维矩阵表示管段的起点号,表示管段的终点号。以图1为例。的值为

        

以管段为循环单位,作为方法的两个参数。

1.3 绘图

绘图是调用VBA中的方法来绘制直线,的调用形式是,即它有两个接口参数,一个是起始点的坐标(),另一个是终止点的坐标()。因为方法只可以绘制三维线,所以它的两个参数是两个三维坐标矩阵。在VBA中,定义数组时通常写成(0 to 2),其中表示x轴方向的坐标值,表示y轴方向的坐标值,表示z轴方向的坐标值。定义同一样。在这里,我们把所有节点的x轴坐标定义为一个一维数组,y轴坐标定义为一个一维数组,z轴坐标定义为一个一维数组表示管网的节点。绘图坐标赋值时,设置一个循环语句,直接把x轴的坐标赋给(0),y轴的坐标赋给(1),z轴的坐标赋给(2),这里把z轴的坐标全部赋为0就可以了。然后再根据节点识别衔接矩阵,在时,调用VBA中的方法,绘制节点i—j之间的直线,并设置直线的线宽、颜色和图层等。表示节点流量的小箭头和标注节点流量等的小图标可以采用插入块参照或插入外部参照两种方法来完成,需要强调的是,在制作块或外部图形文件时,把小箭头和标注小图标放在地起,一定要使箭头的底部端点和小图标的底部端点的坐标值为,这样,在插入块或外部参照时,才能准确地插入到指定点的位置。

2 管段的数据标注

通常绘制管网图时,标注数据要占用三分之二以上的时间。现在利用程序设计完全可以达到自动完成标注。因为数据文件有一部分是自动生成的,如标注文字的起始点坐标、角度等等。所以标注前首先要整理、检查数据文件。

数据文件通常由以下几部分组成:一是管网的环数、节点数、管段数、最大的环的管段数,以及各个环的局部管段数,基本关系矩阵的列就等于,基本关系矩阵的列就等于。利用它可以减少输入部分不必输入的数据。二是基本关系矩阵的值。三是各个节点的三个轴向坐标值。四是各个节点的节点流量、节点的相对水压和节点的地面标高。五是优化计算的最终结果。标注文字的起始点的坐标,既可以在绘图程序中计算,也可以在优化计算程序中算出,输出到数据文件中。其中,优化计算的结果,管长、管径、管段流量和管段的水头损失在数据文件输入时,是作为字符串形式输入的。

在编制数据文件时,通常将管长和管径分为一组,按“管长—管径”的格式输出一列,将管段流量和管段水头损失分为一组,按“流量—水头损失”的格式接着在“管长—管径”的末尾输出一列。例如,1—2管段的管长为1270m,管径为300mm,管段流量为62.24/m3,水头损失为5.32m,在数据文件中的存放方式为“1270—300”,“62.24—5.32”。需要强调的是,“1270—300”在读入时是作为字符串读入的,中间不能留有空格,否则“1270—300”将不是作为一个字符串读入。“流量—水头损失”的标注同“管长—管径”的标注。为了绘图的美观,通常把它们分别标注在管段的两侧时。其中,标注管段流量和水头损失时,不考虑流向,标注的是它们的绝对值,流向单独标注[8]。流向一般用一个箭头在管段上表示,位于管段的中点,箭头指向与管段流量的方向一致。

标注数据的起始点的坐标、数据的旋转方向需要根据节点识别衔接矩阵和管段的两个节点的坐标值计算得出。节点流量标注时,起始点的坐标也是在节点坐标的基础上计算得出。同样管段的节点号、环号的标注也均自动完成。其中,标注环号时,还需要用基本关系矩阵计算出标注点的坐标,注意此时只能取基本关系矩阵 列。

绘图、标注最终结果见图2

图2

在绘图和标注完成后,局部可能有重叠的地方,再手工稍微调整即可。

3 结束语

利用上述介绍的方法,只需输入管网的基本数据后,就可以完成绘图和标注的自动化生,再作局部就可以获得满意的图形。这种方法容易掌握,编程的思路与大多数人的工作思路的一致。利用这种方法编写的程序,不仅可以大幅度提高给水工程设计人员的工作效率,还可以改善绘图的质量。

参 考 文 献

[1] 二代龙震工作室. AutoCAD程序设计实作[M]. 北京:电子工业出版社.2002,5

[2] 王国明.城镇给排水工程程序设计[M].合肥:合肥工业大学出版社.2002,125—129

[3] 王国明,颜高锋.环状给水管网计算的一种数据转换方法[J].合肥工业大学学报(自然科学版),2003,4,581—584

[4] 王国明.给水管网计算中的数据转换方法[J].工业用水与废水.Vol.33,No6,2002,44—46

[5] 严煦世,范瑾初.给水工程(上册)(第三版)[M].北京:中国建筑工业出版社.1995,49—51

[6] 彭国伦.Fortran 95 程序设计[M].北京:中国电力出版社.2002,452—458

[7] 赵洪宾 给水管网系统理论与分析[M].北京:中国建筑工业出版社.2003,136

[8] 李凤华 AutoCAD 2002/2000 VBA 开发指南[M].北京:清华大学出版社.2001,80—297

作 者 简 介

颜高锋,男,(1973,12--),重庆梁平人,硕士,重庆市自来水公司工程师.

王国明,男,(1945­---),江苏太仓人, 合肥工业大学副教授,硕士研究生导师.

[责任编辑:yeguiren]

推荐给好友评论】【收藏】【 】【打印】【关闭

用户名: *(必填) 密码:

验证码: *(必填)