扩展实体数据在给排水工程CAD中的应用
(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管线删除  《扩展实体数据在给排水工程CAD中的应用(第2页)》