 - (defun c:CleanAll (/ lay laylist ent entlist ss doc)
- (vl-load-com)
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
-
- ; 开始事务处理
- (vla-startundomark doc)
-
- ; 方法1:尝试使用DELCONSTRAINT命令删除所有约束
- (command "._DELCONSTRAINT" "_All" "")
-
- ; 方法2:通过选择集删除可能残留的约束对象
- (setq ss (ssget "_X" '((0 . "GEOMCONSTRAINT,DIMCONSTRAINT,ACAD_TABLE,*DIMCONSTRAINT"))))
- (if ss
- (command "._ERASE" ss "")
- )
-
- ; 方法3:清除关联标注的约束
- (setq ss (ssget "_X" '((0 . "DIMENSION"))))
- (if ss
- (progn
- (command "._DIMDISASSOCIATE" ss "")
- ; 删除可能成为独立对象的约束
- (setq ss (ssget "_X" '((0 . "GEOMCONSTRAINT,DIMCONSTRAINT"))))
- (if ss
- (command "._ERASE" ss "")
- )
- )
- )
-
- ; 获取所有隐藏(关闭或冻结)的图层
- (setq laylist '())
- (vlax-for lay (vla-get-layers doc)
- (if (or (= (vla-get-layeron lay) :vlax-false)
- (= (vla-get-freeze lay) :vlax-true))
- (setq laylist (cons (vla-get-name lay) laylist))
- )
- )
-
- ; 在每个隐藏图层中选择并删除所有对象
- (foreach layname laylist
- (setq ss (ssget "_X" (list (cons 8 layname))))
- (if ss
- (progn
- (command "._ERASE" ss "")
- (princ (strcat "\n已删除图层 "" layname "" 中的 " (itoa (sslength ss)) " 个对象"))
- )
- )
- )
-
- ; 清理未使用的图层、标注样式等
- (command "._-PURGE" "_A" "*" "_N")
-
- ; 结束事务处理
- (vla-endundomark doc)
-
- (princ "\n操作完成!所有隐藏图层内容和约束已清除。")
- (princ)
- )
- ; 安全版本,带有确认提示
- (defun c:CleanAllSafe (/ resp)
- (initget "Yes No")
- (setq resp (getkword "\n警告:此操作将永久删除所有隐藏图层内容和约束,且不可撤销!确定继续?[Yes/No] <No>: "))
- (if (= resp "Yes")
- (c:CleanAll)
- (princ "\n操作已取消。")
- )
- (princ)
- )
- ; 加载提示
- (princ "\n清理程序已加载,命令: CleanAll 或 CleanAllSafe(带确认)")
- (princ)
|