원문: FreeCAD + MCP AI 제어 환경 구축 가이드)(2026-09-07)
이 문서는 원문 가이드대로 구축한 환경에서 실무 DWG를 다루다 발견한 4가지 문제와 그 해결 패치를 정리한 것이다.
검증 환경: Windows 11 / FreeCAD 1.1.3 / ODA File Converter 27.1.0 / freecad-mcp 0.1.22+
| # | 증상 | 원인 | 패치 대상 | 심각도 |
|---|---|---|---|---|
| 1 | 치수 텍스트가 \fAdobe Myungjo Std M\|b0\|...;\W1;36처럼 서식 코드로 표시됨 |
레거시 importer의 deformat() 정규식 버그 (백슬래시 2개 매칭) |
Mod/Draft/importDXF.py |
높음 |
| 2 | DWG를 열면 도면이 안 보여서 매번 축소/이동해야 함, 검은 선이 안 보임 | 뷰 자동 피팅 없음 + 어두운 색상 원본 보존 | 신규 애드온 OpenPolisher |
중간 |
| 3 | 다국어(한글+라틴) DWG가 에러 없이 빈 문서로 열림 | 레거시 DXF 리더가 시스템 로케일(cp949)로 읽어 UnicodeDecodeError | %APPDATA%\...\Macro\dxfReader.py |
높음 |
| 4 | (3번 수정 후) 블록 텍스트 처리 중 또 크래시 | importDXF에 남아 있는 디버그 print()가 콘솔(cp949)로 텍스트 출력 |
Mod/Draft/importDXF.py:1717 |
높음 |
공통 교훈: GUI에서 import 실패는 에러창 없이 조용히 빈 문서만 남긴다. 반드시 FreeCADCmd(콘솔)로 동일 작업을 재현해 트레이스백을 확인해야 한다.
deformat())DWG를 열면 치수/텍스트가 다음처럼 화면에 그대로 그려진다:
\fAdobe Myungjo Std M|b0|i0|c0|p34;\W1;36
레거시 importer(Mod/Draft/importDXF.py)의 deformat()이 MTEXT 인라인 서식 코드를 제거하는 함수인데, 정규식이 r"\\\\.*?;" — 백슬래시 2개 연속을 찾는다. 실제 MTEXT 코드는 백슬래시 1개(\f...;, \W1;)라 전혀 제거되지 않는다. \U+XXXX 유니코드 코드도 백슬래시만 지우고 U+XXXX가 남는 버그가 있다.
deformat() 전면 교체:
\f...;, \W1;, \A1;, \H2x; 등) 전부 제거\S 누적 분수(공차 표기)는 내용 보존: \S+0.05^0; → +0.05/0\P → 줄바꿈, \~ → 공백, \U+XXXX → 해당 유니코드 문자, %%d/%%c/%%p → °/Ø/±\\ 보존, 문자열 중간의 {}도 제거36/38/178/36/38/338 정상 표시R341, R700, ∅3, R15 정상 표시%APPDATA%\FreeCAD\v1-1\Mod\OpenPolisher\ 폴더에 두 파일:
| 파일 | 역할 |
|---|---|
InitGui.py |
진입점. 모듈 import 후 deferred_install() 호출 |
OpenPolisher.py |
실제 로직 (문서 옵저버, 리컬러, 피팅) |
동작: 새 문서의 첫 재계산 시점에 동기 실행
fitAll() — 1.1에서 viewFit() 제거됨)LineColor/TextColor(max(r,g,b) < 0.35) 밝힘지오메트리는 변경하지 않고 ViewObject 색상만 건드린다. 제거는 폴더 삭제.
Init.py는 GUI 초기화 전에 실행된다 (App.GuiUp == False) → GUI 관련 초기화는 반드시 InitGui.py로.NameError. 로직은 별도 .py 모듈로 분리해 sys.modules에 남아 있게 해야 한다.App.addDocumentObserver는 등록 시점에 메서드를 바인딩한다 → 등록 후 인스턴스 속성을 교체해도 무시됨.TypeId가 App::FeaturePython(이름이 Dimension*), 레이어 객체도 App::FeaturePython(이름이 Layer*) — TypeId 검색으로는 못 찾는다.한글+라틴 혼합 도면(switch.dwg, 2.2MB ACAD2000)을 열면 에러 없이 객체 0개짜리 빈 문서가 열린다.
%APPDATA%\FreeCAD\v1-1\Macro\dxfReader.py — FreeCAD가 내려받는 레거시 라이브러리)가 파일을 open(filename, encoding=None) = 시스템 로케일(cp949)로 연다. 다국어 바이트에서 UnicodeDecodeError → 임포트 전체 중단 → 빈 문서.$DWGCODEPAGE 기반 reconfigure()는 seek(0) 후 실제로 성공해버려서, 파일 전체를 헤더 코드페이지로 강제 재인코딩 → 실제 바이트와 다르면(혼합 언어) 또 크래시.readDXF() 진입에서 파일 전체 바이트를 검사해 인코딩 선택: utf-8 → cp949 → cp949+치환 → latin-1 순. 세 번째 티어가 핵심: 혼합 인코딩 도면(한글+라틴 공존)에서 한글을 살린다.end_section의 $DWGCODEPAGE reconfigure 블록 제거 (스니프 인코딩 신뢰).일괄 소등 스위치 결선도, 기구도면, 블로킹필터, 전등 1/2, 전등 라인 1/2, NC반대importDXF.py 1717행에 업스트림에서 남아 있는 디버그 출력이 있다:
print("adding block text", text.value, " from ", blockref)
dxfImportTexts가 켜진 상태에서 블록 내 MTEXT마다 텍스트 값을 콘솔로 출력하는데, 콘솔 인코딩이 cp949라 É 같은 라틴 문자에서 UnicodeEncodeError → 크래시.
해당 print 주석 처리.
| 파일 | 위치 | 백업 | 덮어써지는 경우 |
|---|---|---|---|
importDXF.py (deformat + print) |
C:\Program Files\FreeCAD 1.1\Mod\Draft\ |
importDXF.py.bak-1.1.3 |
FreeCAD 업데이트/재설치 |
dxfReader.py (인코딩) |
%APPDATA%\FreeCAD\v1-1\Macro\ |
dxfReader.py.bak |
레거시 라이브러리 재다운로드 |
OpenPolisher\ |
%APPDATA%\FreeCAD\v1-1\Mod\OpenPolisher\ |
— (신규) | 해당 없음 (폴더 삭제 = 제거) |
FreeCAD를 업데이트/재설치하면 Program Files 쪽 패치와 레거시 라이브러리가 원본으로 돌아간다. 패치 명세는 워크스페이스 AGENTS.md #28~36에 보관되어 있으니 그대로 재적용하면 된다.
R341, ∅3, 36 …)| 이전 | | 웰컴스 매니저 | 2026-10-14 |
|---|---|---|---|
| 다음 | REA MCP 사용기 — exe·APK·웹앱을 AI로 해부하는 리버스 엔지니어링 | 웰컴스 매니저 | 2026-10-14 |
주소창 오른쪽의 설치 아이콘으로도 설치할 수 있어요
카카오톡·네이버 앱 안에서는 설치할 수 없어요 — 오른쪽 위 ⋮ → “Chrome에서 열기” 후 진행해 주세요
설치하면 주소창 없이 전체화면 앱처럼 실행됩니다