# µcad: 2D 스케치와 3D 객체를 생성할 수 있는 새로운 오픈소스 프로그래밍 언어

> Clean Markdown view of GeekNews topic #24582. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24582](https://news.hada.io/topic?id=24582)
- GeekNews Markdown: [https://news.hada.io/topic/24582.md](https://news.hada.io/topic/24582.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-11-25T01:33:10+09:00
- Updated: 2025-11-25T01:33:10+09:00
- Original source: [microcad.xyz](https://microcad.xyz/)
- Points: 2
- Comments: 1

## Topic Body

- µcad는 Rust로 구현된 오픈소스 **CAD용 프로그래밍 언어**이며, 코드로 2D 스케치와 3D 객체를 정의해 STL·SVG로 내보내는 **텍스트 기반 지오메트리 시스템**  
- 언어 중심에는 **파라메트릭 기하 객체**가 있으며, 기본 도형을 불리언 연산으로 조합해 복잡한 형상을 만들고 3D 프린팅·CNC 가공용 형식으로 렌더링하는 구조  
- 정적 **타입 시스템과 단위 기반 Quantity 리터럴**을 사용해 `50mm`, `10°`, `50%` 같은 값으로 모델을 정의하고, Models 타입으로 기하 모델 트리를 구성하는 타입 체계를 제공  
- 모듈·함수·`part` 워크벤치·`use` 구문, `std::geo2d`·`std::geo3d` 등 표준 라이브러리, TOML 데이터를 가져오는 `std::import` 기능을 통해 **재사용 가능한 설계 코드와 데이터 기반 모델링**을 구성  
- 프로그래밍 방식의 CAD 워크플로를 원하는 사용자가 참고할 수 있는 프로젝트로, 예제·문서·라이브 코딩 자료가 함께 제공됨  
  
---  
### µcad 개요  
  
- µcad는 2D 스케치와 3D 객체를 코드로 정의하고 생성하는 **오픈소스 CAD 프로그래밍 언어**  
  - 중심 개념은 **파라메트릭 기하 모델링**  
- 기본 도형을 조합해 복잡한 형상을 만들고, 결과를 **STL·SVG**로 렌더링해 3D 프린팅이나 CNC 작업에 활용 가능  
  
### 언어 설계와 모델링 방식  
  
- µcad는 파라미터를 가진 기하 정의를 중심으로 모델 구조를 구성하는 **파라메트릭 모델링 언어**  
  - 도형은 코드로 선언되고, 파라미터 변경만으로 다양한 변형 생성 가능  
- `Sphere`, `Cube`, `Cylinder` 등을 불리언 조합으로 합성하고, 회전(revolve)·배열·변환을 통해 3D 형상을 만드는 구조  
- `CsgCube`·Spirograph·Gears·Dome 등의 예시를 통해 2D 스케치 기반 3D 생성, 반복 구조 생성, 기어 프로파일 등 다양한 모델링 패턴을 제시  
  
### 타입 시스템과 단위 리터럴  
  
- µcad는 정적 타입 시스템을 사용하며 변수는 불변으로 동작  
- Quantity 타입을 통해 `mm`, `°`, `%` 단위를 직접 사용해 모델 구성  
  - `10°`·`4m²`·`50%` 같은 표기 그대로 모델 파라미터로 활용  
- Models 타입은 기하 모델 트리를 표현하는 구조로, 코드 기반 CAD 모델의 노드 구조를 담아냄  
  
### 모듈 시스템과 표준 라이브러리  
  
- `mod`, `use`, `fn`, `part` 등을 활용한 모듈 구성으로 큰 설계를 여러 코드 단위로 분리  
- `std::geo2d`, `std::geo3d`, `std::math`, `std::ops` 등 표준 라이브러리로 기하 연산·수학·행렬·스케치 구성 지원  
- `part`는 스케치·3D 파트를 생성·변환하는 단위로 사용  
  
### 데이터 가져오기와 디버깅  
  
- `std::import`로 TOML 파일에서 파라미터를 가져와 모델에 반영  
  - 기성 부품 규격 등을 모델에 손쉽게 주입하는 방식  
- `std::debug::assert_eq` 등을 사용해 가져온 값의 검증 가능  
  
### 도구 체인과 설치  
  
- Rust 기반 CLI 도구 `microcad-cli`로 모델 실행 및 렌더링  
  - `cargo install microcad-cli`로 설치  
  - 현재 알파 단계로 기능이 계속 추가되는 중  
- `microcad-viewer`를 통해 렌더링 결과 시각화 가능  
- 저장소는 codeberg.org에서 개발이 진행되며 crates.io를 통해 배포  
  
### 예제와 라이브 코딩 자료  
  
- Spirograph, Lego Bricks, Gears, Dome 등 다양한 예제가 공식 블로그에 공개  
  - 기어 프로파일 생성, 스파이로그래프 모델링, 돔 구조 생성 등 프로그래밍 CAD 활용 사례 제공  
- 모든 예제는 코드와 함께 라이브 코딩 영상으로 제공돼 언어 사용 방식을 단계적으로 파악할 수 있음  
  
### 프로젝트 상태  
  
- 프로젝트는 초기 단계로 계속 확장되는 중  
- “The µcad book” 문서화 작업을 통해 언어 전체를 체계화하는 중

## Comments



### Comment 46739

- Author: neo
- Created: 2025-11-25T01:33:11+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=46027216) 
- 웹사이트와 예시에서 **LEGO** 언급을 제거해야 함  
  LEGO는 **상표 보호**에 매우 엄격하며, 제3자가 이름을 사용하는 것을 원치 않음  
  브랜드가 일반명사화되어 상표권을 잃을 위험을 우려하기 때문임  
  관련 기사: ["Lego sues Dutch firm over anti-terror blocks using name and shape"](https://www.thetimes.com/world/europe/article/lego-sues-dutch-firm-over-anti-terror-blocks-using-name-and-shape-c8w2lwkzb) ([archive 링크](http://archive.today/q5XrX))

- 홈페이지 첫 화면에 **간단한 코드 예시와 생성된 스케치**를 바로 보여주면 좋겠음

- 나는 zoo와 그 언어 KCL을 사용해 **경계 표현(BREP)** 기반 CAD를 작성해왔음  
  µcad도 같은 목적을 가진 것 같음  
  개인적으로는 KCL의 **파이프라인 방식**이 더 마음에 듦  
  다만 zoo는 클라우드 전용 커널을 강제해 **벤더 종속성**이 심한 게 불만임  
  µcad가 이 문제를 어떻게 해결하는지는 아직 명확하지 않음  
  - KCL과 µcad의 예시 비교: [KCL의 Lego 예시](https://zoo.dev/docs/kcl-samples/lego), [µcad의 Lego 예시](https://microcad.xyz/index.php/2025/11/12/lego-bricks/), [KCL의 Gear 예시](https://zoo.dev/docs/kcl-samples/spur-gear), [µcad의 Gear 예시](https://microcad.xyz/index.php/2025/11/12/gears/)
  - [build123d의 Lego 튜토리얼](https://build123d.readthedocs.io/en/latest/tutorial_lego.html)과 [Gear 예시](https://github.com/GarryBGoode/gggears)도 참고할 만함
  - µcad는 **로컬 실행형**이라서 그 자체로 문제를 해결하는 것 같음 ([코드 저장소](https://codeberg.org/microcad/microcad))
  - zoo도 로컬 호스팅을 열어두겠다고 예전부터 말해왔음  
    µcad는 Manifold 기반이라 **mesh 중심**이라 brep 기반인 KCL과는 다름  
    KCL은 다른 커널로 확장도 가능함

- OpenSCAD의 가장 좋은 점은 코드 저장 후 바로 **3D 뷰에서 결과를 즉시 확인**할 수 있는 점임  
  ucad에서도 이런 즉시성 있는 워크플로우가 가능한지 궁금함  
  - 이 즉시성은 GPU의 **stencil buffer**를 이용한 OpenCSG 덕분임 ([opencsg.org](http://opencsg.org/))  
    실제 3D 교차 계산 없이 2D 화면에 빠르게 그려주는 방식임  
    OpenSCAD는 이 구조를 AST로 추상화해 OpenCSG, CGAL, Manifold 등 다양한 엔진으로 전송할 수 있게 했음  
    이론적으로는 어떤 CAD도 구현 가능하지만, 구현 난이도가 높음  
  - VS Code에서 미리보기 가능한 플러그인이 있는 듯함 ([관련 문서](https://docs.microcad.xyz/tutorials/book/lego_brick/preparation/plugins.html))  
  - 별도의 **뷰어/프리뷰 기능**이 개발 중이며, [Prototype Fund의 지원](https://www.prototypefund.de/projects/microcad-viewer)을 받았다고 함

- OpenSCAD와 CadQuery를 써봤지만 **UI와 커널의 제약** 때문에 불편했음  
  Onshape나 Fusion 360에 비하면 기능이 부족함  
  FreeCAD도 많이 발전했지만 여전히 초중급자에게는 다루기 어려움  
  오픈소스 CAD가 언젠가 제대로 된 대안이 되길 기대함  
  - OpenSCAD의 장점은 **프로그래밍적으로 모델링**이 가능하다는 점이고, 단점은 수학적 사고력이 요구된다는 점임  
    새로운 커널을 시도하는 [Fornjot](https://fornjot.app/) 같은 프로젝트도 있음  
  - GUI 기반 툴을 원한다면 **SolveSpace**나 **Dune3D**를 추천함  
  - FreeCAD의 새 UI와 OpenSCAD 통합 버전도 꽤 괜찮음  
  - 하지만 2020년부터 써온 입장에서는 여전히 **기본 문제는 그대로**이고, 렌더러만 좀 더 보기 좋아졌을 뿐임

- 이 프로젝트에는 **제약 조건(Constraint) 솔버**가 없거나 계획이 문서화되어 있지 않음  
  단순한 제약을 위해 삼각함수를 일일이 유지하는 건 피하고 싶음

- [Lego brick 튜토리얼](https://docs.microcad.xyz/tutorials/book/lego_brick/)처럼 **웹 노트북 환경**에서 바로 실행할 수 있는 버전이 없다는 점이 아쉬움  
  [MachineBlocks의 SCAD 크래시 코스](https://machineblocks.com/docs/scad-crash-course-101)처럼 설치 없이 체험 가능한 형태가 있으면 좋겠음

- 이게 **AutoCAD 대체**에 가까운 건지 궁금함  
  Revit 등으로 가져올 수 있도록 **파일 포맷 호환성**이 있는지도 알고 싶음

- 정말 흥미로운 프로젝트임  
  손으로 CAD를 다루는 걸 싫어하는 프로그래머로서 이런 접근이 훨씬 **직관적**임  
  다만 기어 예시를 보니, **라이브러리의 기본 프리미티브**를 이해하려면 문서를 꼼꼼히 봐야 할 듯함  
  커뮤니티가 커지면 더 많은 형태가 추가될 것 같음

- 반복(iteration)을 잘 지원하는 CAD 언어를 찾고 있었음  
  자가주택 설계를 하면서, 벽체 제작 세부사항을 **루프 기반 코드**로 자동화할 수 있으면 좋겠다고 생각했음  
  하지만 for 루프가 없으면 이런 작업이 너무 어려워 결국 포기했음  
  - FreeCAD에는 **BIM(건축 정보 모델링)** 기능이 있어서 건축 설계에 적합함  
  - 반복 구조를 원한다면 **build123d**가 적합할 수도 있음
