콘텐츠로 이동

🔗 독립 도구

Revit 없이 독립 실행되는 도구 (Navisworks · AutoCAD 연동)


NWD 합치기 (Navisworks Merge)

여러 NWC 파일을 선택해 하나의 NWD 파일로 자동 합치기

🖱 쓰는 법

  1. 바탕화면 또는 탐색기에서 07_nwd_merge.bat 더블클릭
  2. 파일 선택 창이 뜨면 합칠 NWC 파일들을 선택
    • Shift+클릭으로 범위 선택 지원
  3. 저장 경로 지정 (최종 .nwd 파일 저장 위치)
  4. 실행 클릭 → Navisworks가 자동으로 열려 합치기 + 저장 진행

💡 이럴 때 쓰세요

  • 매일 분야별 NWC 파일들(건축·구조·MEP)을 통합 NWD로 납품해야 할 때
  • Navisworks Manage를 일일이 열어 수동 Append 하기 번거로울 때
  • Revit 없이 독립 실행 가능한 통합 도구 필요할 때

Shift+클릭 범위 선택

파일 리스트에서 시작 파일을 클릭 → Shift+끝 파일 클릭으로 중간 전체 선택. 수십 개도 빠르게.

🔍 UI 미리보기

NWD 합치기 (Navisworks Merge)4 files
📂 NWC 파일 추가선택 제거전체 해제
NWC 파일크기
ARC_Building-A.nwc82MB
STR_Building-A.nwc64MB
MEP_Building-A.nwc48MB
SITE_Building-A.nwc12MB
저장 경로:D:\Navisworks\Merged\Building-A_Combined.nwd📂 찾아보기
Developed by Yoon Dream닫기 🚀 합치기 실행
🔧 개발자 정보 (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) 상태로 일괄 열기

🖱 쓰는 법

  1. 09_dwg_batch_compare.bat 또는 DWG_Batch_Compare.exe 실행
  2. 폴더 A (기준) 선택 — 어제 도면이 있는 폴더 등
  3. 폴더 B (비교) 선택 — 오늘 도면이 있는 폴더 등
  4. 자동 매칭 프리뷰 확인
    • 흰색 — 파일명이 정확히 일치 (확실한 매칭)
    • 노란색 — 유사도 60% 이상 (추정 매칭, 예: section.dwgsections.dwg)
  5. 비교할 쌍을 체크박스로 선택
  6. (선택) 변경사항 레이어 생성 체크 — 전일 날짜 레이어(YYMMDD_변경사항, 빨강)로 자동 레이어 세팅
  7. 실행 클릭 → 새 AutoCAD 인스턴스가 뜨고 쌍마다 자동 비교

💡 이럴 때 쓰세요

  • 매일 어제 대비 오늘 도면 변경사항 확인해야 할 때
  • 수십 개 도면을 일일이 열어 COMPARE 실행하기 번거로울 때
  • 파일명이 살짝 바뀌어 있어도 자동으로 찾아 매칭해주길 바랄 때 (section ↔ sections)
  • Python 없이 EXE로 팀원에게 공유하고 싶을 때 (PyInstaller 패키징 제공)

유사 이름 자동 매칭

정확 매칭 후 남은 파일을 영숫자 정규화해서 60% 이상 유사하면 추정 매칭으로 제안합니다. location.dwglocation plan.dwg 같은 케이스도 자동.

변경사항 레이어 사용 시

AutoCAD 스크립트가 -LAYER M 명령으로 현재 레이어를 바꿉니다. 실행 후엔 빨간색 YYMMDD_변경사항 레이어가 활성 상태가 되므로 수정 내용이 자동으로 그 레이어로 들어갑니다.

🔍 UI 미리보기

DWG Batch Compare12 pairs
📂 폴더 A (기준, 어제 도면)
찾아보기D:\DWG\20260420\
📂 폴더 B (비교, 오늘 도면)
찾아보기D:\DWG\20260421\
매칭 프리뷰정확 9 추정 3
폴더 A폴더 B유사도
plan_1F.dwg=plan_1F.dwg100%
plan_2F.dwg=plan_2F.dwg100%
section.dwg~sections.dwg87%
location.dwg~location plan.dwg72%
변경사항 레이어 생성 (YYMMDD_변경사항, 빨강)
Developed by Yoon Dream취소 🚀 AutoCAD 비교 실행
🔧 개발자 정보 (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 파일 하나만 보내도 로고가 그대로 보이게 해줍니다.

🖱 쓰는 법

  1. AutoCAD에서 APPLOAD 명령으로 logo_embed.lsp 를 불러옵니다. (한 번만 하면 됩니다)
  2. 명령어 LOGOEMBED 를 입력하면 작은 설정 창이 뜹니다.
  3. 창에서 고릅니다:
    • 처리 범위: 현재 도면만 처리 / 폴더 전체 한꺼번에 처리
    • 옵션: 로고를 심은 뒤, 바깥 그림 파일은 삭제 (원하면 체크 — 되돌릴 수 없으니 주의)
  4. 확인을 누르면 로고가 도면 안으로 들어가고, 바깥 그림에 의존하던 연결은 자동으로 정리됩니다.

💡 이럴 때 쓰세요

  • DWG 도면을 외부(발주처·협력사)에 보낼 때 로고가 사라지지 않게 하고 싶을 때
  • 유료 프로그램(드림플러스 등)의 "로고 합치기" 기능을 따로 돈 안 들이고 쓰고 싶을 때
  • 한 폴더 안의 도면 수십 장에 로고를 한꺼번에 심고 싶을 때

먼저 복사본으로 시험하세요

폴더 전체 처리는 원본 도면을 덮어써서 저장합니다. 꼭 복사본 폴더를 만들어 먼저 한두 장 돌려보고, 로고 위치·크기가 맞는지 확인한 뒤 전체에 적용하세요.

도면이 열려 있어도 됩니다 (단, 저장은 해두세요)

폴더 전체 처리 시, 지금 AutoCAD에 다른 탭으로 열려 있는 도면도 함께 처리됩니다. 다만 저장 안 된 변경이 남아 있는 도면은 안전을 위해 건너뜁니다 — 그 도면은 먼저 저장한 뒤 다시 실행하세요. (처리된 도면 탭은 저장 후 닫힌 상태가 됩니다)

🔍 설정 창 미리보기

OLE 로고임베드
처리 범위
현재 도면만 처리
폴더 전체 배치 (여러 DWG)
옵션
임베드 후 원본 이미지 파일(PNG/JPG) 삭제
* 배치는 원본 DWG를 덮어씁니다. 복사본으로 먼저 테스트하세요.
Developed by Yoon Dream취소 확인
🔧 개발자 정보 (구조 · 내부 로직 · 함정)

파일 위치

  • 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장)

  1. IMAGE 객체를 블록 정의 내부까지 재귀 탐색 (Revit 도곽 = 블록 안에 IMAGE)
  2. 참조 그림을 PowerShell로 클립보드 적재 (투명 PNG는 흰 배경에 합성)
  3. PASTECLIP으로 OLE 붙여넣기 → vla-ScaleEntity/vla-Move로 원본 프레임에 맞춤
  4. -image detach *로 모든 이미지 참조 제거(블록 내부까지) + 파일 잠금 해제
  5. (옵션) 원본 그림 파일 삭제

배치 처리 규칙 (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도)