전체 외곽 사각형 작성 리습 (BBOX2D)

선·원·호·직선 경량 폴리선의 WCS XY 외곽 사각형을 그립니다.

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

이럴 때 사용하세요

선·원·호·직선 경량 폴리선 배치의 점유 폭과 높이를 확인합니다. CATS Pro BBOX의 모든 객체 지원을 재현하지 않는 기본 예제입니다.

지원 범위와 주의사항

  • LINE·WCS XY 평면 CIRCLE/ARC·벌지 없는 LWPOLYLINE을 지원하며 나머지는 제외합니다.
  • 결과는 WCS Z=0의 축 정렬 사각형입니다. 블록·문자·타원·스플라인·호 구간이 있는 폴리선은 계산하지 않습니다.
  • 굵은 선의 표시 폭·선가중치는 제외한 중심선 경계입니다. 최소 회전 사각형은 아닙니다.
  • 지원하지 않는 객체가 섞이면 전체 외곽을 보장할 수 없으므로 작성을 중단합니다. 현재 레이어가 잠김·꺼짐·동결 상태이거나 폭·높이가 0이어도 작성하지 않습니다.

코드에서 살펴볼 부분

c:BBOX2D는 입력을 받고, autocats-bbox2d-로 시작하는 함수가 실제 처리를 맡습니다. 객체 선택 조건과 입력값 검사를 먼저 확인하면 다른 도면 작업에도 응용할 수 있습니다.

각 파일은 단독으로 로드할 수 있습니다. CATS Pro 설치가 필요하지 않으며, 같은 이름의 사용자 명령이 있다면 defun c: 이름을 바꿔 사용하세요.

HOW TO USE

사용 순서

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

    autocats-bounding-box.lsp를 다운로드하고 APPLOAD로 로드합니다.

  2. 2

    BBOX2D를 입력합니다.

  3. 3

    명령행 안내에 따라 값을 입력하거나 기준 객체를 고릅니다.

  4. 4

    대상 객체를 선택하고 Enter를 누른 뒤 결과를 확인합니다.

SOURCE

코드 전문

명령 BBOX2D

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

.lsp 다운로드
;;; AutoCATS 리습 자료실
;; 명령: BBOX2D
;; 기능: 선·원·호·직선 경량 폴리선의 WCS XY 외곽 사각형을 그립니다.
;; 출처: https://www.autocats.co.kr/lisp/bounding-box
;; 버전: 1.0 (2026-10-23)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: 잠긴 레이어·외부참조 보호, 변경은 UNDO 그룹, 명령별 범위는 상세 가이드 참고

(vl-load-com)

;; Exact WCS XY extents for lines, planar circles/arcs and straight LWPolyline segments.
(defun autocats-bbox2d-points (ent / data kind center radius angles start sweep angle points)
  (setq data (entget ent) kind (cdr (assoc 0 data)))
  (cond
    ((= kind "LINE") (list (cdr (assoc 10 data)) (cdr (assoc 11 data))))
    ((not (equal '(0.0 0.0 1.0) (cdr (assoc 210 data)) 0.00000001)) nil)
    ((member kind '("CIRCLE" "ARC"))
      (setq center (cdr (assoc 10 data)) radius (cdr (assoc 40 data))
        angles (list 0.0 (/ pi 2.0) pi (* pi 1.5)))
      (if (= kind "ARC")
        (setq start (cdr (assoc 50 data)) sweep (rem (+ (* 2.0 pi) (- (cdr (assoc 51 data)) start)) (* 2.0 pi))
          angles (append (list start (cdr (assoc 51 data)))
            (vl-remove-if '(lambda (angle) (> (rem (+ (* 2.0 pi) (- angle start)) (* 2.0 pi)) sweep)) angles))))
      (foreach angle angles
        (setq points (cons (list (+ (car center) (* radius (cos angle)))
              (+ (cadr center) (* radius (sin angle))) (caddr center)) points))) points)
    ((and (= kind "LWPOLYLINE")
        (not (vl-some '(lambda (pair) (and (= 42 (car pair)) (/= 0.0 (cdr pair)))) data)))
      (foreach pair data (if (= 10 (car pair)) (setq points (cons (list (cadr pair) (caddr pair) 0.0) points)))) points)))

(defun autocats-bbox2d-bounds (ss / index points minpt maxpt point unsupported)
  (setq index 0)
  (repeat (sslength ss)
    (setq points (autocats-bbox2d-points (ssname ss index)))
    (if (null points) (setq unsupported T))
    (foreach point points
      (setq minpt (if minpt (mapcar 'min minpt point) point)
        maxpt (if maxpt (mapcar 'max maxpt point) point)))
    (setq index (1+ index)))
  (if (and minpt (not unsupported)) (list minpt maxpt)))

(defun autocats-bbox2d-draw (bounds / a b row)
  (setq row (tblsearch "LAYER" (getvar "CLAYER")))
  (if (and bounds row (> (cdr (assoc 62 row)) 0) (= 0 (logand 5 (cdr (assoc 70 row))))
      (< (caar bounds) (caadr bounds)) (< (cadar bounds) (cadadr bounds)))
    (progn
      (setq a (car bounds) b (cadr bounds))
      (entmakex (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity")
          (cons 8 (getvar "CLAYER")) '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1) '(38 . 0.0)
          (cons 10 (list (car a) (cadr a))) (cons 10 (list (car b) (cadr a)))
          (cons 10 (list (car b) (cadr b))) (cons 10 (list (car a) (cadr b))))))))

(defun c:BBOX2D (/ *error* undo-open bounds selection)
  (defun *error* (msg)
    (if undo-open (progn (command-s "_.UNDO" "_End") (setq undo-open nil)))
    (if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
      (princ (strcat "\n[BBOX2D] 중단: " msg)))
    (princ))

  (setq selection (ssget))
  (if selection (progn
      (setq bounds (autocats-bbox2d-bounds selection))
      (command "_.UNDO" "_Begin")
      (setq undo-open T)
      (if (autocats-bbox2d-draw bounds) (princ "\n외곽선 작성 완료") (princ "\n경계 또는 현재 레이어를 확인하세요."))
      (command "_.UNDO" "_End") (setq undo-open nil)))

  (princ))

(princ "\n[AutoCATS] BBOX2D 로드 완료")
(princ)
COMPATIBILITY

호환 CAD

AutoCAD 2021AutoCAD 2026

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

WORKS WELL WITH

함께 쓰면 좋은 CATS 명령

전체 명령 보기
PG_BBOX / CATS_PG_BBOXCATS Pro의 PG_BBOX 관련 작업을 명령 탐색기에서 확인할 수 있습니다. 아래 리습은 설명된 범위의 독립 예제입니다.
FAQ

자주 묻는 질문

CATS Pro와 기능이 완전히 같은가요?

CATS Pro의 PG_BBOX 관련 작업을 명령 탐색기에서 확인할 수 있습니다. 아래 리습은 설명된 범위의 독립 예제입니다.

변경을 되돌릴 수 있나요?

도면을 변경하는 명령은 한 UNDO 그룹으로 묶습니다. 완료 후 U로 되돌릴 수 있습니다. 집계·조회 명령은 도면을 변경하지 않습니다. 작업 전 복사본에서 결과를 확인하세요.

WORKFLOW PRODUCTS

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

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

FREE LISP + FREE ADD-IN

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

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