여러 거리 간격띄우기 리습 (MOFFSET)

100,200,300처럼 여러 OFFSET 거리를 한 번만 입력해 기준 곡선에서 같은 방향으로 모두 생성합니다. 중복 거리와 잘못된 값은 안전하게 처리합니다.

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

서로 다른 OFFSET을 한 번에

벽체 기준선, 구조 간격, 설비 이격선처럼 한 기준에서 서로 다른 거리의 평행선을 반복 작성할 때 사용합니다.

거리 입력 규칙

  • 거리들은 쉼표로 구분하고 모두 0보다 커야 합니다.
  • 같은 거리를 여러 번 입력하면 한 번만 생성합니다.
  • 기준 객체가 잠긴 레이어에 있거나 OFFSET이 불가능하면 원본을 변경하지 않습니다.
HOW TO USE

사용 순서

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

    APPLOAD로 multiple-offset.lsp를 로드합니다.

  2. 2

    MOFFSET을 입력하고 기준 곡선을 선택합니다.

  3. 3

    100,200,300 형식으로 거리들을 입력합니다.

  4. 4

    OFFSET 방향을 지정할 점을 클릭합니다.

SOURCE

코드 전문

명령 MOFFSET

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

.lsp 다운로드
;;; ------------------------------------------------------------
;;; AutoCATS 리습 자료실
;; 명령: MOFFSET
;; 기능: 하나의 곡선을 여러 거리만큼 같은 방향으로 일괄 OFFSET
;; 출처: https://www.autocats.co.kr/lisp/multiple-offset
;; 버전: 1.0 (2026-07-23)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: *error* 핸들러 + UNDO 그룹, 잘못된 거리 및 잠긴 레이어 차단
;;; ------------------------------------------------------------

(vl-load-com)

(defun autocats-moffset-split (value / result start position)
  (setq result '() start 0)
  (while (setq position (vl-string-search "," value start))
    (setq result (append result (list (substr value (1+ start) (- position start))))
          start (1+ position)))
  (append result (list (substr value (1+ start)))))

(defun autocats-moffset-distances (value / tokens output token number invalid)
  (setq tokens (autocats-moffset-split value)
        output '()
        invalid nil)
  (foreach token tokens
    (setq token (vl-string-trim " \t" token)
          number (if (/= token "") (distof token 2) nil))
    (if (or (null number) (<= number 0.0))
      (setq invalid T)
      (if (not (member number output))
        (setq output (append output (list number))))))
  (if (or invalid (null output)) nil output))

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

(defun autocats-moffset-run (ent distances side / distance before result count)
  (setq count 0)
  (foreach distance distances
    (setq before (entlast)
          result
          (vl-catch-all-apply
            '(lambda ()
               (command "_.OFFSET" distance ent side "")
               T)))
    (if (and (not (vl-catch-all-error-p result))
             (not (equal before (entlast))))
      (setq count (1+ count))))
  count)

(defun c:MOFFSET (/ *error* doc undo-open oldecho picked ent raw distances side count)
  (defun *error* (msg)
    (if undo-open
      (progn (vla-EndUndoMark doc) (setq undo-open nil)))
    (if oldecho (setvar "CMDECHO" oldecho))
    (if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
      (princ (strcat "\n[MOFFSET] 중단: " msg)))
    (princ))

  (setq picked (entsel "\n[MOFFSET] OFFSET할 곡선을 선택하세요: ")
        ent (if picked (car picked) nil))
  (if (null ent)
    (princ "\n[MOFFSET] 곡선을 선택하지 않았습니다.")
    (if (autocats-moffset-locked-p ent)
      (princ "\n[MOFFSET] 잠긴 레이어의 객체는 수정할 수 없습니다.")
      (progn
        (setq raw (getstring T "\nOFFSET 거리들을 쉼표로 입력 <예: 100,200,300>: ")
              distances (autocats-moffset-distances raw))
        (if (null distances)
          (princ "\n[MOFFSET] 0보다 큰 숫자를 쉼표로 구분해 입력해야 합니다.")
          (progn
            (setq side (getpoint "\nOFFSET 방향을 지정할 점: "))
            (if side
              (progn
                (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
                      oldecho (getvar "CMDECHO"))
                (setvar "CMDECHO" 0)
                (vla-StartUndoMark doc)
                (setq undo-open T
                      count (autocats-moffset-run ent distances side))
                (vla-EndUndoMark doc)
                (setq undo-open nil)
                (setvar "CMDECHO" oldecho)
                (setq oldecho nil)
                (princ (strcat "\n[MOFFSET] " (itoa count)
                               "개 OFFSET 생성 완료. (중복 거리는 한 번만 처리)")))))))))
  (princ))

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

호환 CAD

AutoCAD 2021AutoCAD 2026

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

ONE-CLICK ALTERNATIVE

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

MOF / CATS_MOFCATS Pro에서는 거리 설정과 반복 작업을 더 빠르게 관리합니다.

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

WORKS WELL WITH

함께 쓰면 좋은 CATS 명령

전체 명령 보기
MOF / CATS_MOFCATS Pro에서 여러 간격의 OFFSET을 실행합니다. ROF / CATS_ROF동일 간격을 반복해 OFFSET합니다.
FAQ

자주 묻는 질문

음수 거리를 입력할 수 있나요?

아닙니다. 방향은 마지막 클릭으로 지정하므로 거리는 0보다 큰 값만 입력합니다.

100,100,200을 입력하면 몇 개가 생성되나요?

중복 100은 한 번만 처리되어 최대 2개가 생성됩니다.

WORKFLOW PRODUCTS

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

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

FREE LISP + FREE ADD-IN

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

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