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就是基本关系矩阵的行号,也即是管段所在的环号I,N就是基本关系矩阵的列,即环的节点数。KL(I,J)的值就等于管网的节点号。由于环是一个封闭的环,所以各个环的首节点号等于尾节点[2][3] [4]。

图1
1.1.2 数据转换
给水管网基本上都是由线段构成,通常情况下,绘制直线都是以点为基础,从直线的起点开始绘图。只要输入各点的坐标,在循环语句中调用VBA中的绘制直线命令就可以自动绘图。因此,绘制管网图的思路是:输入各点的坐标,根据各节点之间的衔接关系,自动绘制管网图。要保证绘图时各管段,特别是公共管段做到不重不漏,关键就是要保证节点识别衔接矩阵
完全正确,衔接矩阵
不仅在绘图时使用,而且在计算标注优化计算结果的起点坐标、旋转角度时都需要用到。
由基本关系矩阵
自动生成节点识别衔接矩阵
的方法是:先由基本关系矩阵生成一个过渡矩阵
,再由
生成一个下三角矩阵衔接矩阵(也可以生成一个上三角衔接矩阵,其它的衔接矩阵一定也要是上三角矩阵)
。其具体做法是先假设
,这样,节点K,L就表示相邻的两个节点,再令
,若节点K,L不相邻,令
,这样就得到一个对称矩阵
,对角线元素全部等于0。再由
如下所示:

例如: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),其中
表示y轴方向的坐标值,
表示z轴方向的坐标值。
定义同
一样。在这里,我们把所有节点的x轴坐标定义为一个一维数组
,y轴坐标定义为一个一维数组
,z轴坐标定义为一个一维数组
,
表示管网的节点。绘图坐标赋值时,设置一个循环语句,直接把x轴的坐标赋给
(1),z轴的坐标赋给
(2),这里把z轴的坐标全部赋为0就可以了。然后再根据节点识别衔接矩阵
,在
时,调用VBA中的
,这样,在插入块或外部参照时,才能准确地插入到指定点的位置。
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---),江苏太仓人, 合肥工业大学副教授,硕士研究生导师.
