닫힌 경량 폴리라인만 합산
선택한 LWPOLYLINE의 닫힘 플래그를 확인한 뒤 면적을 읽도록 구성했습니다. 열린 폴리라인과 면적을 읽을 수 없는 객체는 제외 개수로 표시합니다. 기존 해치 면적 합계 HAREA와는 대상 객체가 다릅니다.
합계 해석과 선택 범위
- 결과는 도면 단위의 제곱값입니다. mm 도면에서 ㎡로 환산하려면 1,000,000으로 나눕니다.
- 겹친 영역도 각 객체 면적을 그대로 더합니다. 합집합 계산이나 내부 구멍 빼기를 하지 않습니다.
- 자가 교차·중복 경계는 입력에서 제외하고 별도로 점검하세요.
- 구형 POLYLINE, 3D 폴리라인, 해치, 블록·외부참조 내부 객체는 대상에서 제외합니다.
- 원본 객체를 수정하거나 결과 문자를 만들지 않는 명령행 조회용 리습입니다.
실제 CAD 실행 결과
10×10과 10×20 닫힌 경량 폴리라인, 열린 폴리라인을 함께 선택한 결과입니다. 명령행에서 면적 합계 300, 합산 2개, 제외 1개를 확인했습니다. 시험 도면은 mm 단위로 준비했으므로 합계는 300 mm²입니다.
AutoCAD 2021·2026 Core Console 수치 검사는 각각 7개를 통과했습니다. 아래 화면의 CAD 제품·버전은 확인되지 않았으며, 다른 CAD 호환성이나 취소·호 구간·자가 교차 결과를 보장하지 않습니다.
사용 순서
- 1
복사한 시험 도면에서 APPLOAD로 polyline-area-sum.lsp를 로드합니다.
- 2
PLASUM을 입력하고 합산할 경량 폴리라인을 선택합니다.
- 3
Enter 후 면적 합계와 합산·제외 개수를 확인합니다.
- 4
특성 창의 개별 면적과 대조하고 도면 단위를 확인한 뒤 필요한 단위로 환산합니다.
코드 전문
다운로드 파일은 아래 코드와 100% 동일합니다. 붙여넣기보다 파일 다운로드 후 APPLOAD 로드를 권장합니다.
;;; AutoCATS - draft, not a public download.
;; 명령: PLASUM
;; 출처: AutoCATS 자체 작성 (공개 전 초안)
;; 버전: 0.1 (2026-10-22)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; Read-only sum of closed LWPOLYLINE areas; no union or hole subtraction.
;; API reference: Autodesk AutoLISP vlax-curve-getArea.
(vl-load-com)
(defun autocats-plasum-value (ent / data result)
(setq data (entget ent))
(if (and (= "LWPOLYLINE" (cdr (assoc 0 data)))
(= 1 (logand 1 (cdr (assoc 70 data)))))
(progn
(setq result
(vl-catch-all-apply 'vlax-curve-getArea
(list ent)))
(if (and (not (vl-catch-all-error-p result)) (numberp result))
(abs result)))))
(defun autocats-plasum-total (ss / idx value total counted skipped)
(setq idx 0 total 0.0 counted 0 skipped 0)
(if ss
(repeat (sslength ss)
(setq value (autocats-plasum-value (ssname ss idx)))
(if value
(setq total (+ total value) counted (1+ counted))
(setq skipped (1+ skipped)))
(setq idx (1+ idx))))
(list total counted skipped))
(defun c:PLASUM (/ *error* ss result)
(defun *error* (msg)
(if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
(princ (strcat "\n[PLASUM] 중단: " msg)))
(princ))
(princ "\n[PLASUM] 면적을 합산할 경량 폴리라인을 선택하세요.")
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(if ss
(progn
(setq result (autocats-plasum-total ss))
(princ (strcat "\n[PLASUM] 면적 합계: " (rtos (car result) 2 6)
" (합산 " (itoa (cadr result)) "개 / 제외 " (itoa (caddr result))
"개, 도면 단위의 제곱값)")))
(princ "\n[PLASUM] 선택된 경량 폴리라인이 없습니다."))
(princ))
(princ)
검증 환경
자동 수치 검사와 실제 실행 결과의 확인 범위는 위 설명을 참고하세요. CAD 제품·버전별 대화형 호환성 목록은 아직 확정하지 않았습니다.
함께 쓰면 좋은 CATS 명령
자주 묻는 질문
열린 폴리라인도 자동으로 닫나요?
닫지 않습니다. 닫힘 플래그가 없는 경량 폴리라인은 제외합니다.
해치나 겹친 영역의 순면적도 계산하나요?
해치는 HAREA 안내를 확인하세요. PLASUM은 개별 경량 폴리라인 면적의 단순 합이며 겹침이나 구멍을 보정하지 않습니다.