首页 > 文章中心 > 正文

鉴于ACAD给排水制图过程

鉴于ACAD给排水制图过程

摘要:目前,专业给排水设计软件包很多,但在具体使用过程中,会遇到设计习惯不同、使用烦琐等问题。笔者在AUTOCAD平台上,用LISP语言编写了一系列程序,大大简化了设计、制图,并且提高了出图效率和设计的准确性。

关键词:计算机绘图程序给排水设计

目前,几乎所有的设计院都配备了给排水设计软件包,但是设计人员在使用软件过程中,常常会遇到诸多不便之处。如建筑外框不认,初始化数据输入不直观,数据输入不当时出错,修改不便等等。设计人员或是用鼠标,或是用AutoCAD“硬画”。这种方式出图效率很低,而且图面质量难以保证。

1程序设计目的

针对上述软件包使用不便或适应性不强等问题,笔者几年来在这一方面做了一些探索,用AutoLisp成功地开发一套比较完善且易学实用的系列化小程序。此程序的特点在于遵循传统绘图习惯,进行平面化设计的思路,按照传统绘图方式,灵活运用各个程序段,加强人机对话,力求机器的自动生成。

2主要程序介绍

本程序组中包含程序段40余条,分为工具类与专业类,其中主要程序段有:

TK•LSP&TK•DCL:图库管理程序。

XX•LSP:由平面图生成系统图程序(原图)。

GG•LSP:标注给水管道管径并进行分层处理程序。

PG.LSP:标注排水管道管径并进行分层处理程序。

GB•LSP:对给水管管径及管段长度计算统计程序。

PB•LSP:对排水管管径及管段长度计算统计程序。

ZT•LSP:对总体排水管道管径及管段长度进行计算并标注程序。

GDPM•LSP:自动生成排水管道剖面并同时标注程序。

GCL•LSP:对给排水工程量对照定额进行工程概算程序。

DE•LSP:调出事先输入的定额程序。

LB•LSP:对给排水管管径及管段长度并进行列表处理程序。

3使用方法

本程序是依托建筑或其他专业提供的平面图,按传统手工制图的方法与步骤进行平面设计。笔者把给排水的图元分为直线,多义线,图块(带属性),文字等等。

设计人员在绘制给水平面图时。用PLINE线绘制水平管,绘制给水立管时插入一个带有立管高度属性的图块。排水平面图的绘制方法与给水相同。绘制其它给排水附件如卫生设备、阀门、消火栓、水嘴等附件均采用不同图块表达,这种作图方式直观、简捷、明快。在各层图面线条完成后,应用GG•LSP、PG•LSP程序标注其管径。在标注管径的时候,程序对此进行分层分类管理。配合CAD将各层平面设计完成并确认无误后,把各层另存为相应各层系统图图名,此时设计人员可将用图块表达的系统图图元如:水嘴、存水弯、消火栓、甚至标准化的系统图元等插入图中,并将各管段安装高度给出。确认无误后,用XX•LSP程序将此图进行图形处理。使之成为具有透视效果的系统透视图,再用JL•LSP程序将作平面图时输入的立管高度属性取出,并绘制成给水立管,将此图适当处理后,最后把各层系统图组合起来便成为给水透视图。

绘制排水系统图时,先用LG•LSP程序生成排水立管,在各排水点插入各种存水弯、排水栓等,再用XX•LSP程序将平面图进行图形处理,使之成为具有透视效果的系统透视图,最后把各层支管与立管联接好,排水系统图就形成了。

最后,再用CSD命令对图面进行美化,由于采用程序绘制的图元是由PLINE,BLOCK等组成,且是分层,分类放置的。据此,可用LB•LSP程序中有关命令,取出图中的类、层、块、点、线等特性,进行归类、计算、列表并生成一个主要材料表,自动列于图中。如果调出事先输入的定额,给出工程特征参数,就可用KS•LSP程序中有关命令,计算出一个概算表。材料表、概算表都能自动生成。至于给水总图的绘制,给水图可类似绘出。排水总图绘制水比较复杂。ZT•LSP程序中包含了各管段的计算、绘制及标注等工具,并可自动生成管道剖面。其程序可节省绘图时间50%。本系列程序如果加载于其他成功软件包之上,功效更加明显。

4程序举例

限于篇幅,这里仅列其中之一以供同行们参考。

;本程序对PLKINE,BLOCK,TEXT等图元分别进

;行旋转与平移处理,达到平面图形的透视效

;果。程序对LINE,DIM,SOLID等图元进行删

;除。

(defunc:xx(/xxyk1k2k3stn)

(setqss(ssget)ang(/pi4);选择需要进行旋转与平移处理的对象(实体)

(setqy(cadr(nth1(entsel″\\\\n选择水平线″))))

;Y用户选择的旋转基准线

(setqe(ssnamess0)n0)

(setqk1(list″a″)k2(list″b″)k3(list″c″))

;初始化k1k2k3放置实

;体名的列表,并设“a”“b”“c”为结束标记

(whilee

;while语句开始,对所选项实体进行旋分类处理

(setqst(cdr(assoc0(entgete))))

(if(=st″LWPOLYLINE″)(setqk2(consek2))

;if语句开始

(if(or(=st″CILCLE″)(=ST″insert\")(=st\"TEXT);if语句开始

(setqk1(consek1))

(entdele)

);if语句结束

);if语句结束

(setqn(=1n))

(setqe(ssnamessn))

);while语句结果

(setqn0)

(if(/=(ntnk2)″b″)(setq1(entget(nthnk2))(setq1nil))

(while1;while语句开始

;对所选项的PLINE线实体进行旋转处理,角度45度

(if(/=(cdr(assoc0(entget(nthnk2))))\"ABC\")

;if语句开始对复合弧线不处理

(progn(setqz(cdr(assoc381)))

p1(assoc101)la(cdr(assoc81))

m(-(length1)(length(memberp11)))

p2(cdr(nth(+m4)1))p1(cdrp1)

;p1起点坐标,p2终点坐标

(setqx1(carp1)x2(carp2)y1(cadrp1)

y2(cadrp2)dy1(-y1y)dy2(-y2y))

(setqp3(list(+x1(*(cosang)dy1))(+y1z(*(-(sinang)1)dy1)))

p4(list(+x2(*(cosang)dy2))(=y2z(*(-(sinang)1)dy2))))

(setq1(subst(cons380.0)(assoc381)1)

;修改高度信息

1(subst(cons10p3)(nthm1)1)

;修改起点坐标信息

1(subst(cons10p4)(mthm4)1)1))

;修改终点坐标信息

(entmod1)

));if语句结束

(setqn(=1n))

(if(/=(nthnk2)″b″)(setq1(entget(nthnk2)))

(setq1nil))

);while语句结束

(setqn0)

(if(/=(ntnk1)″a″)(setq1(entget(nthnk1)))

(setq1nil))

while1;while语句开始,对所选的

;TEXT、BLOCK、ATTRIBUTE等实

;体进行旋转及平移处理,角度

;45度

if(=nil(assoc111))(setqp1(cdr(assoc101)))

;if语句开始

(if(=0.0(nth1(assoc111)))(setqp1(cdr

(assoc101)));if语句开始

(setqp1(cdr(assoc111)))

);if语句结束,本语句对文字对齐方式的判断,并提取高度和插入点信息

);if语句结束,本语句对是否为文字的判断,并提取高度和插入点信息

(setqx1(carp1)y1(cadrp1)z(nth2p1))

(setqdy1(-y1y)

(setqp3(list(=x1(*(cosang)dy1))(=y1z(*(-(sinang)1))))

(if(=nil(assoc111));if语句开始

(progn(setq1(subst(cons10p3)(assoc101)1))

(entmod1))

(if(=0.0(nth1(assoc111)));if语句开始

(progn(setq1(subst(cons10p3)(assoc101)1))

(entmod1)

);endofPROGN

(progn(setq1(subst(cons11p3)(assoc111)1))

(entmod1)

);endofPROGN

);if语名结束,本语句对文字对齐方式的判断,并修改高度和插入点信息

);if语名结束,本语句对是否为文字的判断,并修改高度和插入点信息

(setqname(cdr(assoc01)))

(if(=(cdr(assoc661))1);if语句开始,是否为带属性的块

(progn(setq11(entget(entnext(cdr(assoc-11))))

(setqp1(cdr(assoc1111)))

(setqx1(carp1)y1(cadrp1)

(setqp3(list(+x1(*(cosang)dy1))(+y1z(*(-(sinang)1)dy1))))

(setq11(subst(cons11p3)(assoc1111)11))

(entmod11)

));if语句结束,修改中属性的插入点信息

(setqang(/(cdr(assoc501))2))

(setq1(subst(cons50ang)(assoc501)1))

(entmod1);通过修改块的插入角度信息进行旋转

(setqn(+1n)

(if(/=(nthnk1)″a″)(setq1(entget(nthnk1)))(setq1nil))

);while语句结束

(setqn0)

(while(<n(sslengthss));while语句开始,对名为“ZXR-2035”的块

;进行高度平移处理

(setqstl(entget(ssnamessn)))

(setqpt1(cdr(assoc10stl)))

(if(/=″ZXR-2035″(cdr(assoc2(entget(ssnamessn)))));if语句开始

(progn

(setqpt1(list(carpt1)(cadrpot1)0))

(setqstl(subst(cons10pt1)(assoc10st1(st1))

(entmodst1)));if语句结束

(setqn(+1n))

);while语句结束

(redraw)

);defun结束

5实际运用

本程序通过笔者所在单位这几年来工程设计人员的运用,得到了逐步完善与推广,实践证明,该程序易学好用。故提炼出来与同仁商榷。