CADXChange

全部 LISP 指令

CXPURGE清理版本 1.0.0已在 AutoCAD 中測試

反覆清理圖形,直到沒有可清的內容

重複執行清理,直到再也清不掉東西,因為沒用的專案常常藏在別的沒用的專案裡。最後報告清掉了什麼。

如何使用

  1. 輸入 CXPURGE。
  2. 等幾輪清理結束。
  3. 檢視清除了多少圖塊、圖層、線型和樣式。

請注意

  • 仍在使用的內容會保留。輸入 U 可撤銷清理。

在 AutoCAD 中載入

  1. 把檔案存在任意位置。
  2. 輸入 APPLOAD,選擇檔案,按「載入」。
  3. 輸入指令名稱:CXPURGE。

想每次啟動都可用,在同一個對話方塊中加入「啟動套件」,或用選用的載入器一次載入整個資料夾。 關於選用的載入器

已在 AutoCAD(完整版)中測試。其他能執行 AutoLISP 的軟體也許可用,但未經測試。

程式碼

純文字,沒有任何隱藏內容。複製後存成名為 cxpurge.lsp 的檔案,或直接下載。

;;; ============================================================================
;;; CXPURGE - Purge the drawing until nothing more goes
;;; Version 1.0.0
;;; CADXChange LISP tools - https://cadxchange.net/resources/lisp/cxpurge
;;; Tested in: AutoCAD (full version). Other programs that run AutoLISP may work but are not tested.
;;; Copyright (c) CADXChange. Free for personal and commercial use; do not resell or
;;; republish it as a collection. Terms: https://cadxchange.net/legal/lisp-terms
;;; ============================================================================

;; How many entries the tables that PURGE touches hold: (blocks layers linetypes styles dimstyles).
(defun cx:purge-counts ( / out r)
  (foreach tbl '("BLOCK" "LAYER" "LTYPE" "STYLE" "DIMSTYLE")
    (setq r (tblnext tbl T) out (cons 0 out))
    (while r
      (setq out (cons (1+ (car out)) (cdr out)) r (tblnext tbl))))
  (reverse out))

;; Purge unused blocks, layers, linetypes, styles and the like until nothing more goes. Nested definitions need
;; several rounds. Returns the entries removed per table, in the order of cx:purge-counts.
(defun cx:purge-run ( / before after)
  (setq before (cx:purge-counts))
  (repeat 4
    (command "_.-PURGE" "_A" "*" "_N"))
  (setq after (cx:purge-counts))
  (mapcar '- before after))

(defun c:CXPURGE ( / *error* cx:sv r)
  (setq *error* cx:err)
  (cx:start '(("CMDECHO" . 0)))
  (setq r (cx:purge-run))
  (cx:end)
  (princ (strcat "\nRemoved: " (itoa (nth 0 r)) " blocks, " (itoa (nth 1 r)) " layers, " (itoa (nth 2 r)) " linetypes, "
                 (itoa (nth 3 r)) " text styles, " (itoa (nth 4 r)) " dimension styles."))
  (princ))


;;; ---- Shared helpers (used by the command above; identical in every CADXChange tool) ----

;; Close the undo step and put the system variables back.
(defun cx:end ()
  (foreach v cx:sv (setvar (car v) (cdr v)))
  (command "_.UNDO" "_End")
  (setq cx:sv nil)
  (princ))

;; Error handler: restores everything, stays quiet on Esc.
(defun cx:err (msg)
  (if (> (getvar "CMDACTIVE") 0) (command))
  (cx:end)
  (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")))
    (princ (strcat "\nError: " msg)))
  (princ))

;; Save the system variables in VARS ((name . value) ...), set them, and open one undo step.
;; The caller declares cx:sv as a local so the saved values live exactly as long as the command.
(defun cx:start (vars)
  (setq cx:sv (mapcar (function (lambda (v) (cons (car v) (getvar (car v))))) vars))
  (command "_.UNDO" "_Begin")
  (foreach v vars (setvar (car v) (cdr v)))
  (princ))

(princ "\nCXPURGE loaded. Type CXPURGE to start.")
(princ)

版本紀錄

版本 1.0.0 · 2026年10月27日

首個版本。

更多指令:清理