欢迎来到山村网

使用Autolisp删除Autocad指定图层内的实体

2019-03-02 11:25:04浏览:870 来源:山村网   
核心摘要:  如何用autolisp获取cad图形文件中直线和多义线的图层名?  用(cdr(assoc 8 (entget (car (entsel)))))就可以得到直

  如何用autolisp获取cad图形文件中直线和多义线的图层名?

  用(cdr(assoc 8 (entget (car (entsel)))))就可以得到直线和其他实体的图层名。

  想要的程序是:点取一条直线,得到该直线的层名,然后将该层所有直线的线宽改为某个值。我现在想要的是“点取直线,获得层名”这一步。

  (setq lyname (cdr(assoc 8 (entget (car (entsel)))))) that's it!, What else d

  (setq lyname (cdr(assoc 8 (entget (car (entsel)))))) that's it!, What else do you want?

  绘图过程中经常会碰到这种情况:某个图层已被“清空”,但却无法将其删除,究竟是什么回事?其实,图层中还可能含有不可见的实体。例如,使用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)

  )

  ;程序结束

(责任编辑:豆豆)
下一篇:

AJAX跳转路径代码

上一篇:

C#操作摄像头实现拍照监控录像功能

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com