길이를 하나씩 재고 있다면
배관 물량, 전선 길이, 보·기둥 부재 길이를 산출할 때 객체를 하나씩 클릭해 특성 창의 길이를 읽고 있다면, 그 시간의 대부분은 LSUM으로 없앨 수 있습니다.
LSUM은 선택한 곡선 객체(선·폴리선·호·원·스플라인·타원)의 길이를 모두 더해 합계를 보여줍니다. 폴리선은 호 구간을 포함한 실제 경로 길이로 계산합니다.
동작 방식과 주의할 점
- 합계는 현재 도면 단위 기준입니다. mm 도면이면 mm 합계이므로, m 단위 물량표에 옮길 때 단위 환산을 잊지 마세요.
- 닫힌 폴리선과 원은 둘레 길이로 계산됩니다. 둘레를 빼고 싶다면 선택에서 제외하세요.
- 치수(DIM) 객체와 블록 내부의 선은 합산 대상이 아닙니다. 블록은 분해 전 상태 그대로는 계산되지 않습니다.
- 레이어를 켜고 끄거나 빠른 선택(QSELECT)으로 대상 레이어만 남긴 뒤 드래그하면 원하는 계통만 정확히 합산할 수 있습니다.
이런 작업에 씁니다
- 설비·전기: 배관/덕트/트레이/전선 루트 총 길이 산출
- 토목: 경계석·측구·관로 연장 집계
- 건축·구조: 부재 길이 합계, 몰딩·걸레받이 물량 검토
사용 순서
- 1
APPLOAD 명령으로 내려받은 length-sum.lsp를 로드합니다.
- 2
명령행에 LSUM 을 입력합니다.
- 3
길이를 합산할 객체를 드래그로 선택하고 Enter.
- 4
명령행에서 길이 합계와 합산·건너뜀 개수를 확인합니다.
- 5
합계를 도면에 남기려면 Y 입력 후 삽입 위치를 클릭합니다.
코드 전문
다운로드 파일은 아래 코드와 100% 동일합니다. 붙여넣기보다 파일 다운로드 후 APPLOAD 로드를 권장합니다.
;;; ------------------------------------------------------------
;;; AutoCATS 리습 자료실
;; 명령: LSUM
;; 기능: 선택한 선·폴리선·호·원·스플라인의 길이 합계 계산 + 도면 기입(선택)
;; 출처: https://www.autocats.co.kr/lisp/length-sum
;; 버전: 1.0 (2026-07-20)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: *error* 핸들러 포함, 도면 저장·종료 등 파괴적 동작 없음
;;; ------------------------------------------------------------
(defun c:LSUM (/ *error* ss idx ent len res sum cnt skip pt)
(defun *error* (msg)
(if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
(princ (strcat "\n[LSUM] 중단: " msg)))
(princ))
(vl-load-com)
(princ "\n[LSUM] 길이를 합산할 객체(선·폴리선·호·원·스플라인·타원)를 선택하세요.")
(setq ss (ssget '((0 . "LINE,LWPOLYLINE,POLYLINE,ARC,CIRCLE,SPLINE,ELLIPSE"))))
(if ss
(progn
(setq idx 0 sum 0.0 cnt 0 skip 0)
(while (< idx (sslength ss))
(setq ent (ssname ss idx)
res (vl-catch-all-apply
'(lambda ()
(vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)))))
(if (or (vl-catch-all-error-p res) (null res))
(setq skip (1+ skip))
(setq sum (+ sum res) cnt (1+ cnt)))
(setq idx (1+ idx)))
(princ (strcat "\n[LSUM] 길이 합계: " (rtos sum 2 4)
" (합산 " (itoa cnt) "개 / 건너뜀 " (itoa skip) "개, 현재 도면 단위 기준)"))
(if (> cnt 0)
(progn
(initget "Y N")
(if (= (getkword "\n합계를 도면에 문자로 기입할까요? [예(Y)/아니오(N)] <N>: ") "Y")
(progn
(setq pt (getpoint "\n문자 삽입 위치 클릭: "))
(if pt
(entmake (list (cons 0 "TEXT")
(cons 10 pt)
(cons 40 (getvar "TEXTSIZE"))
(cons 1 (rtos sum 2 4))
(cons 7 (getvar "TEXTSTYLE")))))))))
)
(princ "\n[LSUM] 선택된 객체가 없습니다."))
(princ))
(princ "\n[AutoCATS] LSUM 로드 완료 - 명령행에 LSUM 을 입력하세요.")
(princ)
호환 CAD
AutoLISP을 지원하는 CAD에서 동작합니다. 문제가 있다면 네이버 카페에 CAD 종류·버전과 함께 남겨주세요.
이 기능, CATS Pro에는 버튼으로 있습니다
LNGT / CATS_LNGT레이어별·색상별 필터까지 지원하는 길이 합산이 버튼 클릭 한 번에 됩니다.CATS Pro는 계속 무료입니다. 리습 로드 없이 버튼 클릭으로 같은 작업을 처리할 수 있습니다.
함께 쓰면 좋은 CATS 명령
자주 묻는 질문
일부 객체가 건너뜀으로 표시됩니다. 왜 그런가요?
길이를 계산할 수 없는 상태의 객체(잠긴 프록시 객체 등)는 건너뜁니다. 건너뜀 개수가 표시되므로 누락 여부를 바로 알 수 있고, 해당 객체만 다시 확인하면 됩니다.
CADian에서도 동작하나요?
이 리습은 곡선 길이 계산에 ActiveX(vlax-curve) 함수를 사용합니다. AutoCAD·BricsCAD·ZWCAD·GstarCAD에서 확인되었으며, CADian은 버전에 따라 다를 수 있어 호환 목록에서 제외했습니다. 사용해 보시고 결과를 카페에 알려주시면 반영하겠습니다.