明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 923|回复: 12

[基础] 想请老大们做一个一键清除所有隐藏图层内容和所有约束的快捷键

[复制链接]
发表于 2025-11-14 14:05:44 | 显示全部楼层 |阅读模式
就是隐藏图层和约束连在一起清除的快捷方式,谢谢!
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

 楼主| 发表于 2025-11-15 10:07:24 | 显示全部楼层
rouka23 发表于 2025-11-14 17:13
不怎么用约束管理器,不是很理解

这里有用户变量的测试文件,能帮我再加上去吗?

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2025-11-14 16:02:58 | 显示全部楼层
277283904 发表于 2025-11-14 15:29
......................谢谢!
  1. (defun c:CleanAll (/ lay laylist ent entlist ss doc)
  2.   (vl-load-com)
  3.   (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  4.   
  5.   ; 开始事务处理
  6.   (vla-startundomark doc)
  7.   
  8.   ; 方法1:尝试使用DELCONSTRAINT命令删除所有约束
  9.   (command "._DELCONSTRAINT" "_All" "")
  10.   
  11.   ; 方法2:通过选择集删除可能残留的约束对象
  12.   (setq ss (ssget "_X" '((0 . "GEOMCONSTRAINT,DIMCONSTRAINT,ACAD_TABLE,*DIMCONSTRAINT"))))
  13.   (if ss
  14.     (command "._ERASE" ss "")
  15.   )
  16.   
  17.   ; 方法3:清除关联标注的约束
  18.   (setq ss (ssget "_X" '((0 . "DIMENSION"))))
  19.   (if ss
  20.     (progn
  21.       (command "._DIMDISASSOCIATE" ss "")
  22.       ; 删除可能成为独立对象的约束
  23.       (setq ss (ssget "_X" '((0 . "GEOMCONSTRAINT,DIMCONSTRAINT"))))
  24.       (if ss
  25.         (command "._ERASE" ss "")
  26.       )
  27.     )
  28.   )
  29.   
  30.   ; 获取所有隐藏(关闭或冻结)的图层
  31.   (setq laylist '())
  32.   (vlax-for lay (vla-get-layers doc)
  33.     (if (or (= (vla-get-layeron lay) :vlax-false)
  34.             (= (vla-get-freeze lay) :vlax-true))
  35.       (setq laylist (cons (vla-get-name lay) laylist))
  36.     )
  37.   )
  38.   
  39.   ; 在每个隐藏图层中选择并删除所有对象
  40.   (foreach layname laylist
  41.     (setq ss (ssget "_X" (list (cons 8 layname))))
  42.     (if ss
  43.       (progn
  44.         (command "._ERASE" ss "")
  45.         (princ (strcat "\n已删除图层 "" layname "" 中的 " (itoa (sslength ss)) " 个对象"))
  46.       )
  47.     )
  48.   )
  49.   
  50.   ; 清理未使用的图层、标注样式等
  51.   (command "._-PURGE" "_A" "*" "_N")
  52.   
  53.   ; 结束事务处理
  54.   (vla-endundomark doc)
  55.   
  56.   (princ "\n操作完成!所有隐藏图层内容和约束已清除。")
  57.   (princ)
  58. )

  59. ; 安全版本,带有确认提示
  60. (defun c:CleanAllSafe (/ resp)
  61.   (initget "Yes No")
  62.   (setq resp (getkword "\n警告:此操作将永久删除所有隐藏图层内容和约束,且不可撤销!确定继续?[Yes/No] <No>: "))
  63.   (if (= resp "Yes")
  64.     (c:CleanAll)
  65.     (princ "\n操作已取消。")
  66.   )
  67.   (princ)
  68. )

  69. ; 加载提示
  70. (princ "\n清理程序已加载,命令: CleanAll 或 CleanAllSafe(带确认)")
  71. (princ)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-14 14:46:35 | 显示全部楼层

试过了DS,3个代码都不起作用,例如如下:
lisp

(defun c:CDHL ()
  ; 保存当前系统变量
  (setq oldCmdEcho (getvar "CMDECHO"))
  (setvar "CMDECHO" 0) ; 关闭命令回显
  
  ; 1. 首先显示所有图层
  (command "LAYON")
  (command "REGEN") ; 重生成以确保所有对象可见
  
  ; 2. 删除所有约束
  (command "DELCON" "all" "")
  
  ; 3. 删除隐藏图层(关闭或冻结的图层)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq layers (vla-get-Layers doc))
  (setq deletedCount 0)
  
  (vlax-for layer layers
    (setq layerName (vla-get-Name layer))
   
    ; 跳过不能删除的图层(当前图层、0层、Defpoints)
    (if (and
          (not (eq layerName (getvar "CLAYER"))) ; 不是当前图层
          (not (eq layerName "0")) ; 不是0层
          (not (wcmatch layerName "*|*")) ; 不是外部参照图层
          (or
            (not (vla-get-LayerOn layer)) ; 图层关闭
            (vla-get-Freeze layer) ; 图层冻结
          )
        )
      (progn
        ; 尝试删除图层
        (if (vl-catch-all-error-p
              (vl-catch-all-apply 'vla-Delete (list layer)))
          (princ (strcat "\n无法删除图层: " layerName))
          (setq deletedCount (1+ deletedCount))
        )
      )
    )
  )
  
  ; 恢复系统变量
  (setvar "CMDECHO" oldCmdEcho)
  
  ; 显示结果
  (princ (strcat "\n已删除 " (itoa deletedCount) " 个隐藏图层和所有约束。"))
  (princ)
)
回复 支持 反对

使用道具 举报

发表于 2025-11-14 14:16:57 | 显示全部楼层
AI可以搞定
回复 支持 反对

使用道具 举报

发表于 2025-11-14 14:45:53 | 显示全部楼层
;几何约束               
(setvar "CONSTRAINTINFER" 0) ;关闭推断几何约束
(vl-cmdf "DELCONSTRAINT" "all" "")  ;删除所有约束
回复 支持 反对

使用道具 举报

发表于 2025-11-14 15:14:53 | 显示全部楼层
277283904 发表于 2025-11-14 14:46
试过了DS,3个代码都不起作用,例如如下:
lisp

麻烦上个测试文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-14 15:29:55 | 显示全部楼层
本帖最后由 277283904 于 2025-11-14 15:40 编辑
rouka23 发表于 2025-11-14 15:14
麻烦上个测试文件

......................谢谢!

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-14 15:44:00 | 显示全部楼层
G〆h 发表于 2025-11-14 14:45
;几何约束               
(setvar "CONSTRAINTINFER" 0) ;关闭推断几何约束
(vl-cmdf "DELCONSTRAINT" "all" "")  ;删 ...

怎么使用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-14 16:12:28 | 显示全部楼层

谢谢!,可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-14 16:20:22 | 显示全部楼层

可以增加用户变量一起删除吗?谢谢!

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 06:26 , Processed in 0.164813 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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