打开/关闭特定图层,支持通配符
;;;;;;;;;;;;;;;;关闭图层(defun c:xf () (bb_layon&off_multiple '("dote*" "DOTE*")) (princ "关闭/打开:轴线图层") (princ));;;关闭轴线图层
(defun c:xff () (bb_layon&off_multiple '("0-PM-固定家具")) (princ "关闭/打开:0-PM-固定家具") (princ));;;0-PM-固定家具
(defun c:xdd () (bb_layon&off_multiple '("0-TF*" "0-DM*")) (princ "关闭/打开:天花图层,地面图层") (princ));;;天花图层,地面图层
(defun c:xxf () (bb_layon&off_multiple '("0-PM-建筑面积计算" "面积全算" "面积半算" "面积扣除")) (princ "关闭/打开:0-PM-建筑面积计算,面积全算,面积半算,面积扣除图层") (princ));;;0-PM-建筑面积计算
(defun c:sd () (bb_layon&off_multiple '("Defpoints" "PUB_VWPRT" "layer3")) (princ "关闭/打开:Defpoints,PUB_VWPRT图层") (princ));;;0-PM-建筑面积计算
;;; 新函数:支持多个图层和通配符
(defun bb_layon&off_multiple (patterns / doc layers layer layname matched)
(vl-load-com)
(setvar "cmdecho" 0)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq layers (vla-get-layers doc))
;; 遍历所有图层
(vlax-for layer layers
(setq layname (vla-get-name layer))
(setq matched nil)
;; 检查图层是否匹配任一模式
(foreach pattern patterns
(if (wcmatch layname pattern)
(setq matched t)
)
)
;; 如果匹配,则切换图层状态
(if matched
(if (= (vla-get-layeron layer) :vlax-true)
(command "_.layer" "_off" layname "")
(command "_.layer" "_on" layname "")
)
)
)
(setvar "cmdecho" 1)
(princ)
)
;;; 保留原函数以便向后兼容
(defun bb_layon&off (pattern)
(bb_layon&off_multiple (list pattern))
)
谢谢分享,顶楼主。 感谢大佬分享
感谢大佬分享
感谢大佬分享
感谢大佬无私奉献 代码写的不错,但系统自带三个命令也不错的
"layiso";孤立图层
"layoff" ;隐藏选择定图层
"layon" ;显示所有图层 感谢大佬的分享 本帖最后由 pxt2001 于 2025-9-23 07:22 编辑
把图层写死了,不灵活。可能用图层组过滤器,属性过滤器,图层状态过滤器更好。当然可以用lisp而不是纯CAD来处理。
页:
[1]