如何用autolisp获取cad图形文件中直线

 我来答
就烦条0o
2017-12-14 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46487
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
绘图过程中经常会碰到这种情况:某个图层已被“清空”,但却无法将其删除,究竟是什么回事?其实,图层中还可能含有不可见的实体。例如,使用mtext命令输入一连串空格,即产生一个不可见实体。在实际绘图中,我们当然不会特意去建立这样的实体,但无意的操作或者ACAD应用程序的运行都有可能产生“副产品”,要删除这些不可见实体,如果单靠现成的ACAD命令是难以完成的,必须借助程序来进行,下面的程序能够删除指定图层内的一切简单实体,从而能让用户进一步使用layer或purge命令来删除图层。
需要注意的是,个别图层即便使用下列程序处理后,仍可能关联其他对象(注意,对象的概念较实体广得多,包括标注样式等非实体对象)而不能被删除,除非指定的图层不再关联图块或者不含有任何用户定义的标注样式。这些图层是:
1.被块定义参照的图层,如a层含有一个图块,块内某条线属于b层;
2.名字为 DEFPOINTS 的特殊图层(为某个标注样式所用)。
程序清单如下:
(defun c:de(/ et ln lay_name ss li)
(princ '删除指定图层内的实体\n')
(setq li (entsel'\n请选择指定图层内的任何一个实体<回车直接输入层名>:'))
(if li
(progn ;选择一个实体
(setq et (entget(nth 0 li)))
(setq lay_name (cdr (assoc 8 et)))
)
(progn ;直接输入层名,理想的办法是采用列表框选择,大家可以自己试试。
(princ'输入层名:')
(while (= ln nil)
(setq lay_name (getstring))
(setq ln (cdr (assoc 2 (tblnext 'layer' t))))
(while (and ln (/= ln '%') )
(if (/= ln lay_name)
(setq ln (cdr (assoc 2 (tblnext 'layer'))))
(setq ln '%')
;如指定的图层名已存在,则设“%”标志
)
)
(if (/= ln '%') ;错误处理
(princ'指定的图层不存在,请重新输入:')
)
)
)
)
(setq ss (ssget 'X'(list(cons 8 lay_name)))) ;构造选择集
(COMMAND '-layer' 'u' lay_name '') ;图层解锁
(COMMAND 'ERASE' ss '') ;清除所有实体
(princ '\n清除完毕!')
(princ)
)
;程序结束
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式