http://bbs.mjtd.com/thread-193996-1-1.html 此帖以经有位坛友生成了清除所有隐藏图层内容和所有标约束的lsp
可以在此Lsp的基础上增加删除所有的用户变量吗,谢谢
代码如下:
-------------------------------------------------------------------
(defun c:aq (/ 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)
-----------------------------------------------------------------------
网友答: 本帖最后由 qifeifei 于 2025-11-25 13:55 编辑
这个是干嘛的
这样对吗
---
AQ - 执行完整清理(隐藏图层+约束+用户变量)
CleanAllSafe - 带确认提示的安全版本
DelUserVars - 仅删除用户变量
网友答:
谢谢,试了一下用户变量还在呢没有删除网友答: 我在swamp上问过如何获取这些参数,可以参考帖子
https://www.theswamp.org/index.php?topic=60402.0网友答:
看不懂英文
网友答:
就差一步了,没老大帮我解决吗
网友答:
本帖最后由 kozmosovia 于 2025-11-27 15:57 编辑
用户参数不是单一图元,有很复杂的“不可见管理图元”关联关系,可以获取到用户参数图元,但是不能乱修改,也不能简单删除,简单删除是能干掉参数图元本身,但相关的关联“不可见管理图元”都还在,这种操作只会把原有管理链条数据库弄乱。
在模型和布局,可以用-parameters命令删除附加在模型和布局上的用户参数,但是在块编辑器内,CAD没有提供-parameters命令行的删除方式,所以只能从用户界面上手动操作删除才安全。
推测原因是模型和布局只有唯一拷贝,但是块可以有N多插入参照。
图片:简单删除参数图元后,会在参数管理器上留下残留入口,且不可手动来删除掉。
可以在此Lsp的基础上增加删除所有的用户变量吗,谢谢
代码如下:
-------------------------------------------------------------------
(defun c:aq (/ 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)
-----------------------------------------------------------------------
网友答: 本帖最后由 qifeifei 于 2025-11-25 13:55 编辑
这个是干嘛的
这样对吗
---
AQ - 执行完整清理(隐藏图层+约束+用户变量)
CleanAllSafe - 带确认提示的安全版本
DelUserVars - 仅删除用户变量
网友答:
qifeifei 发表于 2025-11-25 12:08
这个是干嘛的
这样对吗
谢谢,试了一下用户变量还在呢没有删除网友答: 我在swamp上问过如何获取这些参数,可以参考帖子
https://www.theswamp.org/index.php?topic=60402.0网友答:
kozmosovia 发表于 2025-11-25 15:16
我在swamp上问过如何获取这些参数,可以参考帖子
https://www.theswamp.org/index.php?topic=60402.0
看不懂英文
网友答:
就差一步了,没老大帮我解决吗
网友答:
本帖最后由 kozmosovia 于 2025-11-27 15:57 编辑 用户参数不是单一图元,有很复杂的“不可见管理图元”关联关系,可以获取到用户参数图元,但是不能乱修改,也不能简单删除,简单删除是能干掉参数图元本身,但相关的关联“不可见管理图元”都还在,这种操作只会把原有管理链条数据库弄乱。
在模型和布局,可以用-parameters命令删除附加在模型和布局上的用户参数,但是在块编辑器内,CAD没有提供-parameters命令行的删除方式,所以只能从用户界面上手动操作删除才安全。
推测原因是模型和布局只有唯一拷贝,但是块可以有N多插入参照。
图片:简单删除参数图元后,会在参数管理器上留下残留入口,且不可手动来删除掉。