本帖最后由 lingfne 于 2025-8-27 22:11 编辑
除了这个办法,这个写法,执行后跟出很多提示,本人觉得太多提示不雅观!!
网友答: 大神说了
问问AI,写个遍历数据库+vla删除
(vl-load-com)
(setq layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
(vl-catch-all-apply 'vla-delete (list (vla-item layers "图层1")))
网友答:
网友答:
(vl-load-com)
(setq layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
(if (tblobjname "LAYER" "图层1")
(progn
(setq ss (ssget "X" '((8 . "图层1"))))
(if ss
(command "._ERASE" ss "")
)
(vl-catch-all-apply 'vla-delete (list (vla-item layers "图层1")))
)
(princ "\n图层1不存在。")
)网友答:
网友答:
学习了 我也一直在寻找方法网友答:
缺少遍历字典哦网友答:
除了这个办法,这个写法,执行后跟出很多提示,本人觉得太多提示不雅观!!
(command "LAYDEL" "n" "图层1" "" "y")
有没有更好的写法?请各前辈出手指点一下或给个建议,谢谢!!
这句话的“(command "LAYDEL" "n" "图层1" "" "y")”的意思是用于,执行某一种程序后,一不用选择,二不用获取,后台自动删除指定的图层。
网友答:
问问AI,写个遍历数据库+vla删除网友答: 删除图层是删除图层上的对象,所以谨慎操作,有些图层,你想删除也删不掉,最好的办法,是与其他图层合并。网友答:
没用过AI,我只是单纯想,用 Visual LISP 去写程序,多学些知识!同时接受你的提议
网友答:
本帖最后由 lingfne 于 2025-8-27 22:10 编辑
我想在这里删除红色的线框,执行程序过后,红色的线框多余了。
除了这个办法,这个写法,执行后跟出很多提示,本人觉得太多提示不雅观!!
- (command "LAYDEL" "n" "图层1" "" "y")

网友答: 大神说了
问问AI,写个遍历数据库+vla删除
(vl-load-com)
(setq layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
(vl-catch-all-apply 'vla-delete (list (vla-item layers "图层1")))
网友答:

- (defun c:della ( / blk obj cnt dm doc )
- (setq cnt 0)(princ"\n-->按图层删除对象")
- (while (setq dm (car (entsel "要删除的图层")))
- (setq dm (Cdr(Assoc 8 (Entget dm))))
- (vlax-for blk (vla-get-Blocks (setq doc (vla-get-activedocument (vlax-get-acad-object))))
- (vlax-for obj blk
- (if (= (Vlax-Get obj 'Layer) dm)
- (progn (setq cnt (1+ cnt))(vl-Catch-All-Apply 'vla-delete (list obj)))
- )
- )
- )
- (if (> cnt 0)(princ (strcat "\n-->共删除 " (itoa cnt) " 个图层为 "dm" 的对象")))
- )
- (if (< 0 cnt)(vla-regen doc acallviewports))
- )
leecicii 发表于 2025-8-28 08:51
(command "LAYDEL" "n" "图层1" "" "y")这个办法只能删除空图层,vla可以直接删除带有元素的图层吗?
(vl-load-com)
(setq layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
(if (tblobjname "LAYER" "图层1")
(progn
(setq ss (ssget "X" '((8 . "图层1"))))
(if ss
(command "._ERASE" ss "")
)
(vl-catch-all-apply 'vla-delete (list (vla-item layers "图层1")))
)
(princ "\n图层1不存在。")
)网友答:

- (defun c:tt ()
- "选层删除"
- (while (setq s1 (car (entsel "\n选择参照图层实体<退出>: ")))
- (setq ss (ssget "x" (list (cons 8 (cdr (assoc 8 (entget s1)))))))
- (command "erase" ss "")
- )
- (princ)
- )
xyp1964 发表于 2025-8-27 20:34
缺少遍历字典哦网友答:
除了这个办法,这个写法,执行后跟出很多提示,本人觉得太多提示不雅观!!
(command "LAYDEL" "n" "图层1" "" "y")
有没有更好的写法?请各前辈出手指点一下或给个建议,谢谢!!
这句话的“(command "LAYDEL" "n" "图层1" "" "y")”的意思是用于,执行某一种程序后,一不用选择,二不用获取,后台自动删除指定的图层。
网友答:
lingfne 发表于 2025-8-27 21:23
除了这个办法,这个写法,执行后跟出很多提示,本人觉得太多提示不雅观!!
(command "LAYDEL" "n" "图层1" ...
问问AI,写个遍历数据库+vla删除网友答: 删除图层是删除图层上的对象,所以谨慎操作,有些图层,你想删除也删不掉,最好的办法,是与其他图层合并。网友答:
你有种再说一遍 发表于 2025-8-27 21:41
问问AI,写个遍历数据库+vla删除
没用过AI,我只是单纯想,用 Visual LISP 去写程序,多学些知识!同时接受你的提议
网友答:
本帖最后由 lingfne 于 2025-8-27 22:10 编辑 qazxswk 发表于 2025-8-27 21:55
删除图层是删除图层上的对象,所以谨慎操作,有些图层,你想删除也删不掉,最好的办法,是与其他图层合并。
我想在这里删除红色的线框,执行程序过后,红色的线框多余了。