明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 789|回复: 8

打开/关闭特定图层,支持通配符

[复制链接]
发表于 2025-9-20 23:10:38 | 显示全部楼层 |阅读模式
  1. ;;;;;;;;;;;;;;;;关闭图层

  2. (defun c:xf () (bb_layon&off_multiple '("dote*" "DOTE*")) (princ "关闭/打开:轴线图层") (princ))  ;;;关闭轴线图层

  3. (defun c:xff () (bb_layon&off_multiple '("0-PM-固定家具")) (princ "关闭/打开:0-PM-固定家具") (princ))  ;;;0-PM-固定家具

  4. (defun c:xdd () (bb_layon&off_multiple '("0-TF*" "0-DM*")) (princ "关闭/打开:天花图层,地面图层") (princ))  ;;;天花图层,地面图层

  5. (defun c:xxf () (bb_layon&off_multiple '("0-PM-建筑面积计算" "面积全算" "面积半算" "面积扣除")) (princ "关闭/打开:0-PM-建筑面积计算,面积全算,面积半算,面积扣除图层") (princ))  ;;;0-PM-建筑面积计算

  6. (defun c:sd () (bb_layon&off_multiple '("Defpoints" "PUB_VWPRT" "layer3")) (princ "关闭/打开:Defpoints,PUB_VWPRT图层") (princ))  ;;;0-PM-建筑面积计算

  7. ;;; 新函数:支持多个图层和通配符
  8. (defun bb_layon&off_multiple (patterns / doc layers layer layname matched)
  9.   (vl-load-com)
  10.   (setvar "cmdecho" 0)
  11.   (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  12.   (setq layers (vla-get-layers doc))
  13.   
  14.   ;; 遍历所有图层
  15.   (vlax-for layer layers
  16.     (setq layname (vla-get-name layer))
  17.     (setq matched nil)
  18.    
  19.     ;; 检查图层是否匹配任一模式
  20.     (foreach pattern patterns
  21.       (if (wcmatch layname pattern)
  22.         (setq matched t)
  23.       )
  24.     )
  25.    
  26.     ;; 如果匹配,则切换图层状态
  27.     (if matched
  28.       (if (= (vla-get-layeron layer) :vlax-true)
  29.         (command "_.layer" "_off" layname "")
  30.         (command "_.layer" "_on" layname "")
  31.       )
  32.     )
  33.   )
  34.   (setvar "cmdecho" 1)
  35.   (princ)
  36. )

  37. ;;; 保留原函数以便向后兼容
  38. (defun bb_layon&off (pattern)
  39.   (bb_layon&off_multiple (list pattern))
  40. )


回复

使用道具 举报

发表于 2025-9-21 00:09:50 | 显示全部楼层
谢谢分享,顶楼主。
回复 支持 反对

使用道具 举报

发表于 2025-9-21 02:38:43 | 显示全部楼层
感谢大佬分享
回复 支持 反对

使用道具 举报

发表于 2025-9-21 09:58:13 | 显示全部楼层

感谢大佬分享
回复 支持 反对

使用道具 举报

发表于 2025-9-21 12:20:09 | 显示全部楼层

感谢大佬分享
回复 支持 反对

使用道具 举报

发表于 2025-9-22 01:42:33 | 显示全部楼层

感谢大佬无私奉献
回复 支持 反对

使用道具 举报

发表于 2025-9-22 02:14:58 | 显示全部楼层
代码写的不错,但系统自带三个命令也不错的
"layiso"  ;孤立图层
"layoff" ;隐藏选择定图层   
"layon" ;显示所有图层
回复 支持 反对

使用道具 举报

发表于 2025-9-22 09:42:55 | 显示全部楼层
感谢大佬的分享
回复 支持 反对

使用道具 举报

发表于 2025-9-23 07:21:20 来自手机 | 显示全部楼层
本帖最后由 pxt2001 于 2025-9-23 07:22 编辑

把图层写死了,不灵活。可能用图层组过滤器,属性过滤器,图层状态过滤器更好。当然可以用lisp而不是纯CAD来处理。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-10-6 01:38 , Processed in 0.293319 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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