CAD 파일(DWG/DXF)을 파싱, 렌더링(SVG), 저장(DWG/DXF)하기 위한 오픈소스 Rust 라이브러리.
git submodule update --init # 처음 클론했다면
cargo build --workspace
cargo test --workspacelet mut db = uncad::parse("drawing.dwg")?;
println!("{} entities", db.entities.len());
let result = db.to_svg(uncad::ToSvgOptions::default());
std::fs::write("drawing.svg", result.svg)?;
let png = db.to_png(uncad::ToPngOptions::default())?; // to_svg() -> 래스터화, 중간 SVG는 디스크에 안 씀
std::fs::write("drawing.png", png.png)?;
// 이미 파싱한 db를 그대로 다시 저장 -- 파일을 새로 읽지 않음.
db.write_dxf("drawing.dxf")?;
db.write_dwg("drawing_copy.dwg")?; // R_2004 이하에서만 안정적, docs/CAVEATS.md 참고
// db 없이 파일→파일로 빠르게 변환만 하고 싶을 때(파싱 오버헤드 없음):
uncad::dwg_to_dxf("drawing.dwg", "drawing2.dxf")?;cargo run -p uncad-cli -- drawing.dwg # 요약 정보 (엔티티 타입별 개수)
cargo run -p uncad-cli -- drawing.dwg -o drawing.svg # 이미지(SVG)로 추출 (기본: 모델 스페이스만)
cargo run -p uncad-cli -- drawing.dwg -o drawing.png # 이미지(PNG)로 추출 (SVG를 거쳐 래스터화)
cargo run -p uncad-cli -- drawing.dwg -o drawing.png --scale 2 # 2배 해상도로 래스터화
cargo run -p uncad-cli -- drawing.dwg -o drawing.dxf # DWG -> DXF 저장
cargo run -p uncad-cli -- drawing.dxf -o drawing.dwg # DXF -> DWG 저장 (R_2004 이하만 안정적)
cargo run -p uncad-cli -- drawing.dwg -o sheet.svg --space paper # 도곽/타이틀블록만
cargo run -p uncad-cli -- drawing.dwg -o all.svg --space all # 모든 스페이스 합침- 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— 엔티티 타입 커버리지, 알려진 제한/버그, 크로스플랫폼 노트