CAD · Automation
노즐배치도 자동 채번·치수 — 플랜트 도면 자동화
손으로 하던 노즐 번호·용접 번호·치수 기입을 AutoCAD에서 자동화한 크로스스택 도면 자동화 엔진 (LISP · C# · Python · Revit)
- 소속
- BSF엔지니어링
- 기간
- 2026 – 현재
- 역할
- 단독 설계·개발 (엔진 · 앱 · 배포)
- 기여도
- 100%
AutoLISPC# / ObjectARX (.NET)Python (COM · Tkinter)pyRevit / IronPythonNamed Pipe IPCWin32 COM
01
Overview
플랜트 배관 설계에서 도면마다 수작업으로 기입하던 노즐 번호·용접 번호·사이즈 콜아웃·EW/모듈 태그와 2단 체인 치수를, 실행 중인 AutoCAD에 붙어 자동으로 생성하는 도면 자동화 엔진입니다. 랙 단위 일괄 처리까지 지원하며 현업에서 실전 검증했습니다.
02
Background
드래프터는 랙 하나에 수십 개의 노즐 번호·치수를 손으로 채우고 타이틀블록을 여러 시트에 복제합니다. 반복적이고 실수가 잦아, 사람이 한 번만 "가르치면" 나머지를 자동화하는 도구가 필요했습니다.
03
Problem
① 노즐/플랜지/캡을 색·이름·형상이 섞인 상태에서 식별하고, ② 대상 파일이 Fasoo DRM으로 잠겨 있어 디스크의 DWG를 외부에서 직접 수정할 수 없으며, ③ 여러 AutoCAD 인스턴스 중 특정 도면에 정확히 결합해야 했습니다.
04
My Role
- AutoLISP 자동 채번·2단 치수 엔진(~10k라인) 및 랙 일괄 처리 파이프라인 구현
- C#/ObjectARX 플러그인으로 네이티브 속도의 지오메트리 연산(MLEADER 등) 보강
- Python(COM) 앱·런처와 서버 기반 최신 코드 자동 배포 체계 구축
05
Architecture
DRM이 디스크 훅은 막지만 LISP "반입(load)"은 허용하는 점을 이용해, Python 앱이 실행 중인 AutoCAD에 COM으로 붙어 임시 .lsp를 주입하고 결과는 디스크를 거치지 않는 Named Pipe로 되돌려받습니다. 식별은 Revit 원본(A)·CAD 교육 정보(B)·자동 생성(C) 3계층으로 분리했고, 텍스트 스타일은 현업 도면에서 직접 샘플링합니다.
Revit Export (좌표·단위 가드)→Python 앱 (COM · ROT 인스턴스 결합)→LISP 주입 (DRM 우회 load)→자동 채번·치수 엔진 (AutoLISP + C#)→Named Pipe로 결과 회신
06
Key Features
- ▸노즐·용접·사이즈·EW/모듈 태그 자동 채번
- ▸노즐 체인 + 모듈 합계 2단 자동 치수
- ▸랙 1..K 완전 자동 일괄 처리 및 타이틀블록 복제
- ▸현업 도면에서 스타일 자동 수집(하드코딩 제거)
07
Technical Decisions
DRM 환경에서 파일 수정 대신 LISP 주입 + Named Pipe
왜 → DRM이 디스크 훅을 막아, 허용된 load 경로로 코드를 넣고 커널 IPC로 결과를 받아 우회했습니다.
식별을 A·B·C 3계층으로 분리
왜 → 색·이름·형상이 섞인 식별을 계층화하고, Revit이 남긴 XDATA로 단일 기준에 수렴시키는 방향을 잡았습니다.
08
Troubleshooting
문제 · 뷰포트 스케일을 채번 후 바꾸면 종이공간 태그가 전부 어긋남
해결 · "채번 전 카메라 고정" 규칙을 코드에 못박아 실사고 재발 방지.
문제 · 오프셋된 밸브 핸들이 배관 소속 판정을 속임
해결 · 중심 거리 대신 바운딩박스가 배관선을 가로지르는지로 소속을 판정.
09
Result
- 랙 3개 배치·치수 66개 자동 생성 실전 검증 통과
- 실사고 기반 방어 가드(오배율·좌표 이탈 등)를 코드에 내재화
10
What I Learned
- 도메인을 코드 수준까지 역설계해 자동화로 옮기는 과정
- DRM·COM·IPC 등 제약 많은 환경을 시스템 설계로 우회하는 법