uncad
CAD 파일(DWG/DXF)을 파싱, 렌더링(SVG), 저장(DWG/DXF)하기 위한 오픈소스 Rust 라이브러리.
빠른 시작
let mut db = parse?;
println!;
let result = db.to_svg;
write?;
let png = db.to_png?; // to_svg() -> 래스터화, 중간 SVG는 디스크에 안 씀
write?;
// 이미 파싱한 db를 그대로 다시 저장 -- 파일을 새로 읽지 않음.
db.write_dxf?;
db.write_dwg?; // R_2004 이하에서만 안정적, docs/CAVEATS.md 참고
// db 없이 파일→파일로 빠르게 변환만 하고 싶을 때(파싱 오버헤드 없음):
dwg_to_dxf?;
CLI
우선순위
- DWG — LibreDWG(GPLv3+) 기반, Rust FFI(
bindgen)로 직접 바인딩. 읽기는 모든 버전, 쓰기는 R_2004 이하만 안정적(업스트림 자체 제약,docs/CAVEATS.md참고). - DXF — 같은 LibreDWG 엔진으로 처리 (읽기/쓰기 둘 다 지원, 확장자로 자동 판별)
플랫폼
순수 Rust + 네이티브 FFI. WebAssembly/브라우저는 목표가 아니다 — 실제 사용처가 라이브러리/바이너리(CLI, 서버, 데스크톱 앱)뿐이다.
bindgen이 libclang을 필요로 하므로 시스템에 LLVM/Clang이 설치되어 있어야 한다
(Windows: winget install LLVM.LLVM, Ubuntu: apt install libclang-dev). lib/libredwg는
git submodule이므로 클론 시 git clone --recurse-submodules 사용하거나, 이미 클론했다면
git submodule update --init으로 받아온다. Linux(x86_64-unknown-linux-gnu)에서도 빌드/테스트
전부 통과 확인됨.
라이선스
GPLv3-or-later. LibreDWG(GPLv3+)만 결합되어 있어 그 라이선스를 그대로 물려받는다. 서드파티 컴포넌트의 저작권/라이선스 상세는 docs/THIRD_PARTY_NOTICES.md 참고.
저장소 구조
lib/libredwg/ LibreDWG C 소스 -- git submodule, 수정 없이 그대로 씀
crates/
libredwg-sys/ raw FFI (cc + bindgen)
uncad/ 안전한 API: parse()/CadDatabase::{to_svg,to_png,write_dwg,write_dxf}()/dwg_to_dxf()
uncad-cli/ CLI 바이너리 (uncad 명령)
samples/ gitignored (README 제외) -- 라이선스 확인 없이 아무 DWG/DXF나 넣고
수동 테스트하는 용도. 자동화된 회귀 테스트는 없음
docs/ 아키텍처, 알려진 제한, 서드파티 고지
더 자세한 내용은:
docs/ARCHITECTURE.md— 크레이트 구조, 빌드 시스템, FFI/bindgen 경계, 스레드 세이프티, 엔티티 모델docs/CAVEATS.md— 엔티티 타입 커버리지, 알려진 제한/버그, 크로스플랫폼 노트