用AutoLISP实现AutoCAD实体编辑

用AutoLISP实现AutoCAD实体编辑

ID:38238109

大小:106.71 KB

页数:5页

时间:2019-05-28

用AutoLISP实现AutoCAD实体编辑_第1页
用AutoLISP实现AutoCAD实体编辑_第2页
用AutoLISP实现AutoCAD实体编辑_第3页
用AutoLISP实现AutoCAD实体编辑_第4页
用AutoLISP实现AutoCAD实体编辑_第5页
资源描述:

《用AutoLISP实现AutoCAD实体编辑》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用AutoLISP实现AutoCAD实体编辑曹金文摘要AutoCAD环境下的实体编辑可以用AutoCAD命令,但有时对大量实体的编辑用AutoCAD命令是很繁琐的。通过AutoLISP获得实体的DXF组码,笔者通过对DXF组码的分析,给出了在AutoCAD环境下用AutoLISP实现AutoCAD环境下的实体编辑方法。关键词:AutoLISPDXF组码实体编辑一、引言在用AutoCAD绘图过程中,我们又经常遇到例如改变某一种颜色的实体的线型、层,使某一宽度的多义线变为另一宽度,改变文字的字型等,这

2、些操作如用AutoCAD命令做,那要一个实体一个实体的选择,这是很麻烦的,有时用鼠标选了半天,还是有的实体漏选或错选。此时,如用AutoLISP来做,将是很方便的。二、实现方法假如,在AutoCAD环境下,我们碰到这样一个问题,要求我们把所有宽度为0.5的多义线改为宽度为1。当然我们可用AutoCAD命令“PEDIT”,但是美中不足的是我们必须一个实体一个实体地选,有时用鼠标选了半天,还是有的实体漏选或错选。有没有更简便的办法呢?办法肯定是有的。那就是用AutoLISP,编一段很短的AutoLIS

3、P代码,问题就解决了。请看下面这段AutoLISP代码:TYPEEDWIDTH.LSP;作者东台游子E-mail:caojinwen@yahoo.com.cn(defunC:EDWIDTH()(setvar"cmdecho"0)(setqw(getreal"原宽度:"))(setqw2(getreal"新宽度:"))(setqsslist(ssget"X"(list(cons0"POLYLINE"))))(while(ssnamesslist0)(setqsname(ssnamesslis

4、t0))(setqa(entgetsname))(setqa1(cdr(assoc40a)))(if(=a1w)(command"pedit"sname"w"w2""))(setqsslist(ssdelsnamesslist)));while);defun在上面这段程序中,我们首先要用户输入多义线的原始宽度和更新后的宽度,并把它分别赋给变量w、w2,也就是告诉系统把宽度为w的多义线改为宽度为w2接下来,我们构造了一个选择集sslist,这个选择集为所有宽度为w的多义线的集合。然后,我们构造了一个

5、循环,对选择集s中实体逐个处理,当对选择集中所有实体都处理过后,循环终止。在这个循环中(setqsname(ssnamesslist0))将选择集sslist中第一个实体的名赋给变量sname;用(setqa(entgetsname))得到选择集sslist中第一个实体的信息,并把它赋给变量a,它是一个包含DXF组码的一个表,对于AutoCADRelease14.0下的过点(10,10)、(0,0),宽度为0.5的“LWPOLYLINE”实体,它的格式如下:((-1.

6、0528>)(0."LWPOLYLINE")(5."4D")(100."AcDbEntity")(67.0)(8."0")(100."AcDbPolyline")(90.2)(70.0)(43.0.48)(38.0.0)(39.0.0)(100.00.0)(40.0.5)(41.0.5)(42.0.0)(1010.010.0)(40.0.48)(41.0.48)(42.0.0)(2100.00.01.0))DXF组码的最新变动及详细信息,见AutoCAD最新版本。接下来,我们可用(cdr(asso

7、cna)),对数据表a进行处理,从中取得我们所要的值。n为数据表a中的组码代码,对于多义线,40代表起始宽度,41代表终止宽度。如我们用(cdr(assoc40a)),将得到该多义线的起始宽度,(cdr(assoc0a))将得到“LWPOLYLINE”,它表示该实体为多义线。接下来,用一个条件语句,对选择集s中实体逐个判别,如果它的起始宽度为w,就执行(command"pedit"sname"w"w2""),这是调用AutoCAD的“PEDIT”命令,修改多义线的宽度,如不是就跳过去。这样就完成了

8、对选择集s中第一个实体的运算;用(setqsslist(ssdelsnamesslist))从选择集sslist中减去第一个实体并把它赋给sslist,这样程序又开始对新选择集中第一个实体进行处理,这样一直循环下去,直到选择集中没有实体了,也就是对选择集中所有实体都处理过了,循环终止。三、结语在AutoCAD中,(entget实体名)是一个很有用的函数,通过它我们可以得到一个实体信息表,再通过(cdr(assocna)),可以得到我们想要的实体数据。这样我们就可以对它进行各种处理了

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。