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 - 仅删除用户变量



网友答:
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多插入参照。

图片:简单删除参数图元后,会在参数管理器上留下残留入口,且不可手动来删除掉。

  • 上一篇:批量换图框块
  • 下一篇:没有了