두 레이어 객체 교환 리습 (LAYERSWAP)

선택 범위에서 레이어 A 객체는 B로, 레이어 B 객체는 A로 한 번에 교환합니다.

코드 전문 공개 · 다운로드 파일과 100% 동일 · 출처 표기 후 자유 사용

두 레이어를 양방향으로 교환

잘못 분류된 두 도면 요소의 레이어를 선택 범위 안에서 서로 맞바꿉니다.

선택 범위 밖은 그대로

  • 입력한 두 레이어에 속한 선택 객체만 이동합니다.
  • 다른 레이어의 객체는 변경하지 않습니다.
  • 잠긴 레이어 객체는 건너뛰고 전체 작업은 한 번에 되돌릴 수 있습니다.
HOW TO USE

사용 순서

리습 로드가 처음이라면
  1. 1

    APPLOAD로 layer-swap.lsp를 로드합니다.

  2. 2

    LAYERSWAP을 입력합니다.

  3. 3

    서로 교환할 기존 레이어 이름 두 개를 입력합니다.

  4. 4

    교환할 객체 범위를 선택합니다.

SOURCE

코드 전문

명령 LAYERSWAP

다운로드 파일은 아래 코드와 100% 동일합니다. 붙여넣기보다 파일 다운로드 후 APPLOAD 로드를 권장합니다.

.lsp 다운로드
;;; ------------------------------------------------------------
;;; AutoCATS 리습 자료실
;; 명령: LAYERSWAP
;; 기능: 선택 범위에서 두 레이어의 객체를 서로 교환
;; 출처: https://www.autocats.co.kr/lisp/layer-swap
;; 버전: 1.0 (2026-07-27)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: *error* 핸들러 + UNDO 그룹, 잠긴 레이어 객체 건너뜀
;;; ------------------------------------------------------------

(vl-load-com)

(defun autocats-layerswap-locked-p (ent / row)
  (setq row (tblsearch "LAYER" (cdr (assoc 8 (entget ent)))))
  (and row (= 4 (logand 4 (cdr (assoc 70 row))))))

(defun autocats-layerswap-name (value / row)
  (if (setq row (tblsearch "LAYER" value))
    (cdr (assoc 2 row))
    nil))

(defun autocats-layerswap-apply (ent layer-a layer-b / data current target updated)
  (setq data (entget ent)
        current (cdr (assoc 8 data)))
  (cond
    ((= (strcase current) (strcase layer-a)) (setq target layer-b))
    ((= (strcase current) (strcase layer-b)) (setq target layer-a))
    (T (setq target nil)))
  (if target
    (progn
      (setq updated (entmod (subst (cons 8 target) (assoc 8 data) data)))
      (if updated (progn (entupd ent) T) nil))
    'unchanged))

(defun c:LAYERSWAP (/ *error* doc undo-open raw-a raw-b layer-a layer-b ss idx ent
                       result moved unchanged skipped)
  (defun *error* (msg)
    (if undo-open
      (progn (vla-EndUndoMark doc) (setq undo-open nil)))
    (if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
      (princ (strcat "\n[LAYERSWAP] 중단: " msg)))
    (princ))

  (setq raw-a (getstring T "\n[LAYERSWAP] 첫 번째 레이어 이름: ")
        raw-b (getstring T "\n[LAYERSWAP] 두 번째 레이어 이름: ")
        layer-a (autocats-layerswap-name raw-a)
        layer-b (autocats-layerswap-name raw-b))
  (if (or (null layer-a) (null layer-b)
          (= (strcase layer-a) (strcase layer-b)))
    (princ "\n[LAYERSWAP] 서로 다른 기존 레이어 두 개를 입력해야 합니다.")
    (progn
      (princ "\n[LAYERSWAP] 두 레이어를 교환할 대상 범위를 선택하세요.")
      (setq ss (ssget))
      (if ss
        (progn
          (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
                idx 0 moved 0 unchanged 0 skipped 0)
          (vla-StartUndoMark doc)
          (setq undo-open T)
          (while (< idx (sslength ss))
            (setq ent (ssname ss idx))
            (if (autocats-layerswap-locked-p ent)
              (setq skipped (1+ skipped))
              (progn
                (setq result (autocats-layerswap-apply ent layer-a layer-b))
                (cond
                  ((eq result 'unchanged) (setq unchanged (1+ unchanged)))
                  (result (setq moved (1+ moved)))
                  (T (setq skipped (1+ skipped))))))
            (setq idx (1+ idx)))
          (vla-EndUndoMark doc)
          (setq undo-open nil)
          (princ (strcat "\n[LAYERSWAP] 완료: " (itoa moved)
                         "개 교환 / " (itoa unchanged) "개 대상 아님 / "
                         (itoa skipped) "개 건너뜀")))
        (princ "\n[LAYERSWAP] 선택된 객체가 없습니다."))))
  (princ))

(princ "\n[AutoCATS] LAYERSWAP 로드 완료 - 명령행에 LAYERSWAP 를 입력하세요.")
(princ)
COMPATIBILITY

호환 CAD

AutoCAD 2021AutoCAD 2026

위 환경에서 확인했습니다. 목록에 없는 CAD는 샘플 도면에서 먼저 결과를 대조한 뒤, CAD 종류·버전과 함께 네이버 카페에 알려주세요.

ONE-CLICK ALTERNATIVE

이 기능, CATS Pro에는 버튼으로 있습니다

PG_LAYERSWAP / CATS_PG_LAYERSWAPCATS Pro에서는 레이어 패널과 연결된 흐름으로 교환 결과를 빠르게 검토합니다.

CATS Pro는 계속 무료입니다. 리습 로드 없이 버튼 클릭으로 같은 작업을 처리할 수 있습니다.

WORKS WELL WITH

함께 쓰면 좋은 CATS 명령

전체 명령 보기
PG_LAYERSWAP / CATS_PG_LAYERSWAPCATS Pro에서 선택 범위의 두 레이어 객체를 양방향 이동합니다.
FAQ

자주 묻는 질문

선택하지 않은 객체도 바뀌나요?

아니요. 사용자가 선택한 범위 안의 객체만 검사하고 교환합니다.

한쪽 레이어가 잠겨 있으면 어떻게 되나요?

잠긴 레이어에 있는 객체는 건너뛰며 처리 통계에 표시합니다.

WORKFLOW PRODUCTS

업무 분야에 맞는 전용 자동화도 확인해 보세요.

공통 CAD 작업은 CATS Pro로, 분야별 도면과 산출 업무는 전용 제품으로 이어갈 수 있습니다.

FREE LISP + FREE ADD-IN

리습과 CATS Pro를 함께 쓰세요.

리습은 가볍게, 반복 작업은 CATS Pro 버튼으로. 둘 다 무료입니다.