🔗 독립 도구
Revit 없이 독립 실행되는 도구 (Navisworks · AutoCAD 연동)
NWD 합치기 (Navisworks Merge)
여러 NWC 파일을 선택해 하나의 NWD 파일로 자동 합치기
🖱 쓰는 법
- 바탕화면 또는 탐색기에서
07_nwd_merge.bat더블클릭 - 파일 선택 창이 뜨면 합칠 NWC 파일들을 선택
- Shift+클릭으로 범위 선택 지원
- 저장 경로 지정 (최종
.nwd파일 저장 위치) - 실행 클릭 → Navisworks가 자동으로 열려 합치기 + 저장 진행
💡 이럴 때 쓰세요
- 매일 분야별 NWC 파일들(건축·구조·MEP)을 통합 NWD로 납품해야 할 때
- Navisworks Manage를 일일이 열어 수동 Append 하기 번거로울 때
- Revit 없이 독립 실행 가능한 통합 도구 필요할 때
Shift+클릭 범위 선택
파일 리스트에서 시작 파일을 클릭 → Shift+끝 파일 클릭으로 중간 전체 선택. 수십 개도 빠르게.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
02.Python/07_nwd_merge.py+07_nwd_merge.bat
기술 아키텍처
Python (tkinter GUI) → subprocess → PowerShell (Add-Type .NET) → Navisworks Automation API
기술 스택
| 레이어 | 기술 | 역할 |
|---|---|---|
| GUI | Python tkinter | 파일 선택 UI, Shift 범위 선택 |
| Bridge | PowerShell Add-Type | .NET DLL 로드 + 호출 |
| Engine | Navisworks 2024 API | AppendFile → SaveFile |
핵심 설계 — 크로스 런타임 문제 해결
Python(CPython)에서 .NET DLL을 직접 호출할 수 없는 환경에서, PowerShell을 브릿지로 활용하여 Navisworks Automation API에 접근하는 아키텍처.
주의
- Navisworks Manage 2024 필수
SaveFile메서드 사용 (PublishFile메서드는 존재하지 않음)
DWG Batch Compare (AutoCAD 도면 비교)
두 폴더의 동명 DWG 파일을 AutoCAD 2024에서 자동으로 비교(COMPARE) 상태로 일괄 열기
🖱 쓰는 법
09_dwg_batch_compare.bat또는DWG_Batch_Compare.exe실행- 폴더 A (기준) 선택 — 어제 도면이 있는 폴더 등
- 폴더 B (비교) 선택 — 오늘 도면이 있는 폴더 등
- 자동 매칭 프리뷰 확인
- 흰색 — 파일명이 정확히 일치 (확실한 매칭)
- 노란색 — 유사도 60% 이상 (추정 매칭, 예:
section.dwg↔sections.dwg)
- 비교할 쌍을 체크박스로 선택
- (선택) 변경사항 레이어 생성 체크 — 전일 날짜 레이어(
YYMMDD_변경사항, 빨강)로 자동 레이어 세팅 - 실행 클릭 → 새 AutoCAD 인스턴스가 뜨고 쌍마다 자동 비교
💡 이럴 때 쓰세요
- 매일 어제 대비 오늘 도면 변경사항 확인해야 할 때
- 수십 개 도면을 일일이 열어 COMPARE 실행하기 번거로울 때
- 파일명이 살짝 바뀌어 있어도 자동으로 찾아 매칭해주길 바랄 때 (section ↔ sections)
- Python 없이 EXE로 팀원에게 공유하고 싶을 때 (PyInstaller 패키징 제공)
유사 이름 자동 매칭
정확 매칭 후 남은 파일을 영숫자 정규화해서 60% 이상 유사하면 추정 매칭으로 제안합니다. location.dwg ↔ location plan.dwg 같은 케이스도 자동.
변경사항 레이어 사용 시
AutoCAD 스크립트가 -LAYER M 명령으로 현재 레이어를 바꿉니다. 실행 후엔 빨간색 YYMMDD_변경사항 레이어가 활성 상태가 되므로 수정 내용이 자동으로 그 레이어로 들어갑니다.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
02.Python/09_dwg_batch_compare.py+09_dwg_batch_compare.bat+dist/DWG_Batch_Compare.exe
기술 아키텍처
Python (tkinter GUI) → .scr 스크립트 생성 → acad.exe /b script.scr → AutoCAD 2024 COMPARE
기술 스택
| 레이어 | 기술 | 역할 |
|---|---|---|
| GUI | Python tkinter + ttk.Treeview | 폴더 선택, 매칭 프리뷰, 체크박스 선택 |
| Matching | difflib.SequenceMatcher | 정확 매칭 + 유사 추정 매칭 |
| Script | AutoCAD .scr (cp949 인코딩) | OPEN/COMPARE/-LAYER 명령 시퀀스 |
| Engine | AutoCAD 2024 acad.exe /b | 새 인스턴스에서 스크립트 자동 실행 |
핵심 설계 포인트
- 유사 이름 매칭:
difflib.SequenceMatcher로 정규화(영숫자만 추출) 비교, 60% 이상 시 추정 매칭 - FILEDIA 0 트릭: AutoCAD 스크립트(.scr)에서
OPEN/COMPARE에 파일 경로를 직접 넘기려면FILEDIA 0으로 파일 대화상자 비활성. 작업 후FILEDIA 1로 복원 - .scr 인코딩: cp949 (AutoCAD 한국어 로케일 대응)
- 변경사항 레이어: 전일
YYMMDD_변경사항, 빨강 (ACI 1),-LAYER M으로 현재 레이어 설정 - PyInstaller onefile exe 패키징: Python 없이 공유 가능
OLE 로고임베드 (도곽 로고 붙이기)
레빗에서 내보낸 DWG의 도곽 로고를 도면 안에 심어, DWG 한 파일만 보내도 로고가 보이게 만들기
레빗에서 DWG로 내보내면 도곽의 회사 로고가 바깥에 있는 그림 파일(PNG/JPG)을 불러오는 방식으로 들어갑니다. 그래서 DWG만 따로 복사하거나 남에게 보내면 로고가 사라져 빈 칸이 됩니다. 이 도구는 그 로고 그림을 도면 안쪽에 통째로 심어서, DWG 파일 하나만 보내도 로고가 그대로 보이게 해줍니다.
🖱 쓰는 법
- AutoCAD에서
APPLOAD명령으로logo_embed.lsp를 불러옵니다. (한 번만 하면 됩니다) - 명령어
LOGOEMBED를 입력하면 작은 설정 창이 뜹니다. - 창에서 고릅니다:
- 처리 범위:
현재 도면만 처리/폴더 전체 한꺼번에 처리 - 옵션:
로고를 심은 뒤, 바깥 그림 파일은 삭제(원하면 체크 — 되돌릴 수 없으니 주의)
- 처리 범위:
- 확인을 누르면 로고가 도면 안으로 들어가고, 바깥 그림에 의존하던 연결은 자동으로 정리됩니다.
💡 이럴 때 쓰세요
- DWG 도면을 외부(발주처·협력사)에 보낼 때 로고가 사라지지 않게 하고 싶을 때
- 유료 프로그램(드림플러스 등)의 "로고 합치기" 기능을 따로 돈 안 들이고 쓰고 싶을 때
- 한 폴더 안의 도면 수십 장에 로고를 한꺼번에 심고 싶을 때
먼저 복사본으로 시험하세요
폴더 전체 처리는 원본 도면을 덮어써서 저장합니다. 꼭 복사본 폴더를 만들어 먼저 한두 장 돌려보고, 로고 위치·크기가 맞는지 확인한 뒤 전체에 적용하세요.
도면이 열려 있어도 됩니다 (단, 저장은 해두세요)
폴더 전체 처리 시, 지금 AutoCAD에 다른 탭으로 열려 있는 도면도 함께 처리됩니다. 다만 저장 안 된 변경이 남아 있는 도면은 안전을 위해 건너뜁니다 — 그 도면은 먼저 저장한 뒤 다시 실행하세요. (처리된 도면 탭은 저장 후 닫힌 상태가 됩니다)
🔍 설정 창 미리보기
🔧 개발자 정보 (구조 · 내부 로직 · 함정)
파일 위치
03.AutoCAD/OLE_로고임베드/logo_embed.lsp(본체, CP949)03.AutoCAD/OLE_로고임베드/logo_embed.dcl(설정 대화상자, CP949)03.AutoCAD/OLE_로고임베드/clip_image.ps1(클립보드 헬퍼)
동작 아키텍처
LISP → PowerShell(이미지→클립보드, 흰배경 flatten) → PASTECLIP(OLE) →
VLA 스케일/이동 → -image detach(참조 정리) → SaveAs
처리 흐름 (도면 1장)
- IMAGE 객체를 블록 정의 내부까지 재귀 탐색 (Revit 도곽 = 블록 안에 IMAGE)
- 참조 그림을 PowerShell로 클립보드 적재 (투명 PNG는 흰 배경에 합성)
PASTECLIP으로 OLE 붙여넣기 →vla-ScaleEntity/vla-Move로 원본 프레임에 맞춤-image detach *로 모든 이미지 참조 제거(블록 내부까지) + 파일 잠금 해제- (옵션) 원본 그림 파일 삭제
배치 처리 규칙 (MDI 대응)
- 클립보드는 전역 자원 1개 → 한 번에 하나씩만 안전 (동시 처리 시 교착)
- 활성 탭 = 제자리 처리(SaveAs) / 다른 탭 = 저장돼 있으면
vla-Close후 스크립트 / 안 열림 = 스크립트
핵심 함정 (ERROR 노트: autolisp_logo_embed_errors.md)
| 함정 | 해결 |
|---|---|
entlast 성공 오탐 |
paste 전후 비교로 "새 OLE"만 인정 |
| 투명 PNG 검게 나옴 | 클립보드 DIB는 알파 미지원 → 흰 배경 flatten |
| OLE에 SCALE 명령 시 "OLESCALE" 경고 | 명령 대신 VLA(vla-ScaleEntity) |
| 참조·파일 안 지워짐 | detach를 조건 없이 무조건 실행 |
| 읽기전용 세션 QSAVE 실패 | vla-SaveAs로 같은 경로 강제 저장 |
| MDI 다른 탭 재열기 충돌 | 열린 도면 전부 확인, SendCommand는 클립보드 교착으로 폐기 |
한계
- XREF(외부 도면) 내부 이미지는 호스트에서 detach 불가 → 감지해 안내만
- PDF 언더레이는 OLE 내장 불가 (개수만 보고)
- 회전/기울어진 이미지는 건너뜀 (도곽 로고는 0도)