loveboatcaptain 发表于 2022-7-6 09:10:56

Lisp帮助-删除所有对象

需要lisp删除4个不同层(ZZ-UKMAP-LANDLINE、ZZ-UKMAP-RAIL、ZZ-UKMAP-STATION、ZZ-UKMAP-STATION NAME)上的所有对象。
唯一的问题是,我有一个名为“MAP”的块,我想保留它,这个块在上面的层中有对象。
因此,希望删除四个独立层上的所有对象,但排除块“贴图”(或者更容易的话,排除所有块)。
有人能帮忙吗?我一直在尝试使用ssget来实现这一点,但无法成功编写lisp,
谢谢

Tharwat 发表于 2022-7-6 10:09:11

看看这个。。
 

(defun c:test (/ ss i sset e)
(if
   (setq ss (ssget "_x" '((8 . "ZZ-UKMAP-LANDLINE,ZZ-UKMAP-RAIL,ZZ-UKMAP-STATION,ZZ-UKMAP-STATION NAME"))))
   (repeat
   (setq i (sslength ss))
   (setq sset (ssname ss (setq i (1- i))))
   (setq e (entget sset))
   (if (not (eq (cdr (assoc 2 e))"MAP"))
       (entdel sset)
   )
   )
   (princ)
)
(princ)
)

 
塔瓦特

BlackBox 发表于 2022-7-6 10:27:26

如果“地图”块不是动态的,我会这样处理:
 

(defun c:FOO (/ ss)
(if (setq ss (ssget "_x" '((-4 . "<NOT")
                            (2 . "MAP")
                            (-4 . "NOT>")
                            (8 . "ZZ-UKMAP-LANDLINE,ZZ-UKMAP-RAIL,ZZ-UKMAP-STATION,ZZ-UKMAP-STATION NAME"))))
   (command "._erase" ss "")
   (prompt "\n** Nothing selected ** "))
(princ))

 
**未经测试,并写在我的MacBook上,我可以在上班时进行测试**
注意-应进行层检查,以确保层未首先锁定。
 
... 否则,我将使用vlax for逐步遍历选择集,有条件地使用块的有效名称进行限定。
 
HTH公司
页: [1]
查看完整版本: Lisp帮助-删除所有对象