栏目搜索
 
 
 
 
 

给排水专业CAD软件开发方法探讨

作者:不详  来源:不详  发布人:admin  发布时间:2005-10-16 2:37:00

 【摘】本文从扩展数据在实体中存贮方式、扩展实体数据插入和查询以及应用扩展实体数据实现管配件插入、图形删除及修改等方面,介绍了应用扩展实体数据库进行给排水工程CAD绘制方法和技巧,并给出几个通过实际工程验证实用小程序,提出工程设计人员在工程图绘制过程中,自行编写小程序可以扩充商业软件功能,提高绘图效率结论。 

1概述 

在计算机迅速普及今天,CAD已不再是新鲜名词。尤其是在工程设计领域,手工画图已逐渐被CAD软件所代替。在国应用最广泛、最普及CAD工具是AutoCAD软件包,该软件包以其界面友、使用方便、功能强特点,被广工程设计人员所接受。在给水排水工程领域,由于各设计单位设计标准和设计方法不同,造成各软件公司所开发CAD软件不能被设计单位所广泛接受。尤其是软件公司软件开发人员,在多是计算机应用比较熟练非专业人员或实际工作经验很少专业技术人员,由于他们专业知识和工作经历限制,造成所开发专业软件存在这样或那样不足,从而限制了专业软件实用性。因此,尽管市场上商业专用软件很多,但能够切实满足工程设计需软件并不多,甚至许多单位购置软件根本就不能发挥其应有作用。通过多年CAD软件开发经验,作者认为,工程设计人员掌握一定CAD技术处理技巧,可以在直接应用AutoCAD软件或其它商业软件进行工程设计同时,自行编写一些实用小程序,不但可以提高工程设计效率,而且还可以通过日积月累,使所编写小程序在本单位内应用。 

在给水排水工程领域,最常处理图形就是管线。管线是连接水源到水厂、水厂到用户、各构筑物间有向图,一根管线变动,必然引起其它设施改变。同样,各构筑物采用平、立、剖三视图进行工程图表达,一个视图改变,也引起其它视图相应改变。以前们都是通过单个图形分别修改方法来实现,不但效率低,而且容易产生错误。本人通过在WDOC软件开发中应用,认为扩展实体数据库应用,可以有效地解决这些问题,并且能够提高绘图效率。 

2扩展实体数据插入与查询 

2.1扩展数据在实体中存贮方式 

假设一条管线,起点号是8,坐标是(5.05.00.0),终点号是18,坐标是(10.010.00.0),管段号是1,这条管线图形数据库为: 

((-1<Entityname:1f92f48>)(0″LINE″)(5.″519″)(100.″AcDbEntity″)(67.0)(8.″0″)(100.″AcDbLine″)(105.05.00.0)(1110.010.00.0)(2100.00.01.0)(-3(″PIPE1″(1002.″{″)(1000.″8,18″)(1002.″}″))) 

其中扩展数据为:(-3(″PIPEI″(1002.″{″)(1000.″8,18″)(1002.″}″))),″PIPEI″表示以PIPE为前导管线,管线号为1;″8,18″表示管线起点号为8,终点号为18。 

扩展实体数据内容在实体数据库中是以-3码为前导一个表项。在一个实体中可以加入扩展实体数据小为16383节。用于描述非图形数据扩展实体数据库有关组码为: 

组码 意义  
1000 
1001 
1002 
1003 
1004 
1005 
1010 
1011 
1012 
1013 
1040 
1041 
1042 
1070 
1071 ASCII码串,长度小于255个符位 
已登记应用名,长度小于31个符位 
控制串 
层名 
节,长度小于127符 
实体索引名 
点位 
3D地坪空间位置 
3D地坪空间位移 
3D地坪空间方向 
浮点数 
距离值 
比例系数;
16位整数 
32位整数  

2.2扩展实体数据插入 

使用扩展实体数据,必须用AutoLISP程序实施对实体数据库访问和修改。首先自行定义扩展实体数据库信息表,然后再加入到指定实体中。此处只是给出扩展实体数据库插入AutoLISP程序主内容,有兴趣读者可以自行加入所需信息表,以把这一程序功能进行扩展。 

对最后画一个实体加入扩展实体数据表AutoLISP程序为: 

(defunexadd(nametyp/sselnel);name:扩展实体数据登记名,typ:扩展实体数据内容。 

(setqss(cons-3(list(consname(cons(cons1002″{″)(cons(cons1000typ)(list(cons1002″}″)))))));定义扩展实体数据库el(entget(entlast));提取最近画一个实体图形数据库 

nel(consssel);把扩展实体数据信息加入到实体数据库中)(regappname)(entmodnel)) 

果对上述函数修改一下,可适用于对任意所选择实体加入扩展实体数据信息: 

(defunexaddl(nametyped/sselnel);ed:所选择实体,把上述程序el(entget(entlast))改为el(entgeted)即可。) 

利用上述二个小程序,就可以实现对所画最后一个实体或任一所选择图形实体加入扩展实体数据,其特点是比用属性建立非图形信息速度更快、更灵活、更小数据体积,而且可以进行图形索引。 

2.3扩展实体数据查询 

在对图形实体插入扩展实体数据后,还对所插入数据信息进行查询、修改和应用。此处只给出扩展实体数据查询和数据提取AutoLISP程序。 

查找扩展数据登记名程序:(defunexname(ed/cxl)(setqcxl(cdr(assoc-3(entgeted`(″*″)))))(ifcxl(car(nth0cxl)))) 

本程序应用,就可以对任何一个所选择实体,找出它扩展实体数据登记名。管段号、节点号等。 

对任意选择实体,提取扩展实体数据程序: 

(defunexsub(edname/sstypnamecxlcncalctcbl)(setqtyp(cons1"不是所选择实体");果选择实体与所指定扩展数据名不一致,则提示错误。 

name(strcasename)cxl(cdr(assoc-3(entgeted`(″*″)))))(ifcxl(progn(setqcn0)(while(setqcal(nthcncxl)) 

(if(=name(carcal)) 

(progn(setqct0cal(cdrcal)) 

(while(setqcbl(nthctcal)) 

(if(=(carcbl)1000)(setqtypcblct10000cn10000)) 

(setqct(+ct1)))))(setqcn(+cn1)))))(cdrtyp)) 

上述两个程序应用,就可以实现对所绘实体扩展数据信息进行提取。 

们知道,AutoLISP是嵌入AutoCAD中功能扩展程序,同使用AutoCAD函数一样,易易用。应用AutoCAD进行工程设计技术人员,应该会用AutoLISP编写简单程序,以方便工程图形绘制。从上述程序中也可以看出AutoLISP编写完成某一功能程序,小到一至二句,多到十几句,即可实现所完成工作。 

3扩展实体数据在给排水CAD中应用 

3.1管配件插入: 

一条已经画管线,管径为DN100,使插入管配件也具有DN100特性。假设管配件是阀门,为已经做图块。们可以在插入过程中不需关心管径是多少,直接插入阀门信息,从而提高绘图效率。应用扩展实体数据库程序为: 

(defunc:inval(/sspededanametypp1p2ang) 

setqss(entsel)p(car(cdrss))ed(carss)eda(entgeted) 

name(exnameed);提取扩展实体数据名称 

typ(exsubedname);提取扩展实体数据信息,即管径信息 

p1(cdr(assoc10eda);管线起点坐标 

p2(cdr(assoc11eda);管线终点坐标 

ang(anglep1p2);管线角度 

) 

(command″break″p″F″(polarpangBL)(polarp(+piang)BL);断开线距离 

″insert″″阀门″p(*2BL)″″ang);插入阀门(exaddnametyp);对插入阀门加入扩展实体数据,即管径。 

) 

这一小程序在加载以后,同AutoCAD函数一样,只在命令状态下运行inval,系统提示选择实体时,在插入阀门位置上点取管线,就会自动把管线先断开,再插入阀门,并且所插入阀门具有DN100特牲。 

3.2管线删除 

对于上面所插入阀门管线,由于阀门插入而变为二条线,三个实体(二条线加一个阀门),果由于各种原因需删除,按照AutoCAD命令,则需分别对这三个实体加以删除。对于工程图,由于图形复杂,经常会产生误操作或漏操作问题,给工程设计人员带来许多困难。而扩展实体数据库应用,可以为工程图绘制带来许多方便。 

(defunc:deled() 

(setqss(entsel)ed(carss)s(ssget"x")n0name(exnameed)typ(exsubedname)) 

(while(setqes(ssnamens))(setqname1(exnamees)) 

(if(=namename1)(progn(setqtyp1 

(exsubesname))(if(=typ1typ)(entdeles)))) 

(setqn(+n1)))) 

这一小程序在加载后,运行deled,按照提示选择删除实体,即可删除与这一实体具有相同扩展数据所有实体,快速而准确。 

3.3扩展实体数据修改 

给水管图是由管线、节点、水泵、水塔、阀门等组成,所有设施之间并不是相互独立,而是有机联系在一起。某一设施修改,必然带动其它与之有关联设施和变动。例,对于给水管水力计算成果图,当节点号修改时,影响与之相连所有管线起止节点号变动、管线上水流方向扩展实体数据变动以及节点标注信息变动。一般情况下,一个节点号变化,引起几个甚至几十个图形实体变化。采用扩展实体数据绘图,这一变化可以通过程序方便地实现。此处只给出修改一个扩展实体数据小程序,读者可以扩充这一小程序,以通过遍历整个图形数据库方式,分别查找修改实体,并加以修改。 

(defunchent(edstyp/sbcxlss); 

(setqsb(entgeteds′(″*″))cxl(cdr(assoc-3sb)) 

ss(cons(cons1002″{″)(cons(cons1000typ)(list(cons1002"}")))) 

ss(list(cons(exnameeds)ss)))(netmod(subst(cons-3ss)) 

(cons-0cxl)sb))(entupdeds)) 

从上述介绍可以看出,应用扩展实体数据,可以弥补仅以AutoCAD绘图函数绘图不足,从而使所绘工程图有速度更快、更准确特点。 

4结论 

以上仅是作者在给水管优化设计计算与非稳定状态水力模拟软件-WDOC开发过程中采用几个小技巧,在应用中发现有极实用价值,不仅提高了绘图速度,而且还可使互不相关实体之间建立相互联系。在绘图过程中,可以实现对一个实体绘制及修改,自动实现与之相关其它实体绘制及修改。工程设计人员果是有心人,可以在完成实际工程过程中,对一些图形复杂、关联性强实体,自行通过编写几句或十几句AutoLISP程序来加以实现,日积月累,把编写小程序集成起来,不但可以解决商业软件与工程实用化相脱节矛盾,而且还可以提高制图效率。 

作者在给水排水工程CAD软件开发和使用中,通过多年积累,也编写了一些小程序,相当实用。有兴趣读者可以与作者联系,相互交流,扩实用小程序应用范围 .

 
 
  信息栏