도면을 작성하다보면 레이어, 블럭 등 사용하지 않는 데이터가 존재할 경우 도면이 무거워 집니다.

Command 명령을 이용하여 Purge 기능을 이용하여 불필요한 Block을 삭제하는 Lisp을 만들어 보겠습니다.

;;; 블록 제거 프로그램
;;; -------------------------------------------------------------------

;;; c:PurgeUnusedBlocks 명령 정의
(defun c:PurgeUnusedBlocks ()
  (vl-load-com) ; COM 기능을 사용하지 않아도 습관적으로 Load

  (princ "\n사용하지 않는 블록들을 도면에서 제거합니다.")

  ;; AutoCAD의 -PURGE 명령을 비대화형으로 실행
  ;; "B"는 Blocks (블록) 유형을 의미합니다.
  ;; "*"는 모든 블록 이름을 의미합니다.
  ;; "N"은 각각의 항목을 확인할지 묻는 질문에 "아니오"를 의미합니다 (비대화형).
  (command "-PURGE" "B" "*" "N")

  (princ "\n사용하지 않는 블록 제거가 완료하였습니다.")
  (princ) ; 마지막 값 출력 방지
)

;;; 프로그램 로드 시 메시지
(princ "\n'PurgeUnusedBlocks' 명령어가 로드되었습니다.")
(princ)


가.사용 방법

  1. 파일 저장: 위 코드를 복사해서 purgeblocks.lsp 같은 이름으로 저장해주세요. 
  2. 오토캐드에서 로드:
    • 오토캐드를 실행하세요.
    • 명령 프롬프트에 APPLOAD를 입력하고 Enter를 누르세요.
      (또는 '응용프로그램 로드' 메뉴를 찾으세요.)
    • '응용프로그램 로드/언로드' 대화 상자가 뜨면, 저장해둔 purgeblocks.lsp 파일을 찾아서 선택한 다음 '로드(Load)' 버튼을 클릭하세요.
    • 성공적으로 로드되면, 명령 프롬프트에 "사용하지 않는 블록 제거 프로그램이 로드되었어요! " 같은 메시지가 뜰 거예요.
  3. 명령어 사용:
    • 명령 프롬프트에 PurgeUnusedBlocks를 입력하고 Enter를 누르세요.
    • 그러면 프로그램이 자동으로 도면 내에서 사용되지 않는 블록들을 찾아 제거합니다.

참고:

  • _PURGE 명령은 대화형으로 실행되지만, _-PURGE (하이픈이 앞에 붙으면) 명령은 명령 프롬프트를 통해 옵션을 입력받는 비대화형으로 실행된답니다. AutoLISP에서는 주로 비대화형 명령을 사용해서 사용자 입력 없이 작업을 자동화해요.
  • 이 코드는 블록만 제거하지만, PURGE 명령은 레이어, 스타일 등 다양한 객체도 제거할 수 있어요. 필요하다면 옵션을 바꿔서 다른 종류의 미사용 객체도 제거할 수 있도록 확장할 수 있답니다!