找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1358|回复: 8

[LISP程序]:删除指定图层中的图元!

[复制链接]
发表于 2003-12-10 23:53:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一个功能简单的程序,但挺实用!
  (defun c:delent();删除指定图层上的图元
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)

;;;(setq s (ssget "X" '((0 . "TEXT"))))
    (setq lay_name (getstring "\n请输入图层名:"))
    (if (= lay_name "all")
      (setq s (ssget "X"))
      (setq s (ssget "X" (list (cons 8 lay_name))))
      )


  (setq n (sslength s))
  (setq n ( - n 1))
  (while (>= n 0)
    (setq n1 (ssname s n))
;;;    (if (= (cdr (assoc 8 (entget n1))) "LSY")
      (command "ERASE" n1 "")
;;;      )
    (setq n (- n 1))
    )
  (setvar "cmdecho" 1)
  (setvar "blipmode" 1)
    )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-12-11 04:22:50 | 显示全部楼层
不用那么复za吧? 简化一下:

(defun c:delent();删除指定图层上的图元
  (setq lay_name (getstring "\n请输入图层名:"))
    (setq s (ssget "X" '((8 . lay_name))))
    (command "ERASE" s "")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-11 08:41:39 | 显示全部楼层
將程序改為圖面選取圖元(代表圖層)代替輸入更佳
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-12-11 12:17:04 | 显示全部楼层
确实简单多了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-13 22:13:04 | 显示全部楼层
最初由 f5612140 发布
[B]將程序改為圖面選取圖元(代表圖層)代替輸入更佳 [/B]

借花献佛
(defun c:delent();删除指定图层上的图元
(setq lay (assoc 8 (entget (car (entsel "\n请选择图层实体:"))))
         ss (ssget "X" (list lay)))
(command "ERASE" ss "")
)

或者
(defun c:dellay ()
(vl-cmdf "_.erase" (ssget "x" (list (assoc 8 (entget (car (entsel)))))) "")
)



;;注:用'((8 . lay_name)) 是8行地,为什么?自己想想
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-14 05:25:26 | 显示全部楼层
简化不仅是程序文字行的简化. 这里关键是用SS取代了WHILE循环, 因而缩短了运行时间.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-14 19:27:31 | 显示全部楼层
说的对,你的方法简化了程序,提高了效率.只不过,你在2楼的程序是不能正常运行的.
错误就出在我指出的那个语句上
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-14 20:55:09 | 显示全部楼层
在EICAD中有个批量修改实体命令,功能更完善,不仅能删除同一图层实体,而且能修改某一类实体,如直线、文字,某一颜色等。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-15 03:24:13 | 显示全部楼层
最初由 陌生人 发布
[B]说的对,你的方法简化了程序...[/B]


COPY 1楼的程序修改后也没有试. 看这个:
(defun c:test()
(setq lay_name (getstring "\nlayer:"))
(setq s (ssget "X" (list (cons 8 lay_name))))
(command "ERASE" s "")
)
谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-20 17:55 , Processed in 0.181368 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表