CADXChange

모든 LISP 명령

CXPURGE정리버전 1.0.0AutoCAD에서 테스트함

더 지울 것이 없을 때까지 도면 정리

정리를 반복해 더 이상 지울 것이 없을 때까지 실행합니다. 사용하지 않는 항목은 다른 미사용 항목 안에 숨어 있는 경우가 많기 때문입니다. 무엇이 지워졌는지도 보고합니다.

사용 방법

  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일

첫 번째 릴리스.

다른 명령: 정리