1P by GN⁺ 10일전 | ★ favorite | 댓글 1개
  • µ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” 문서화 작업을 통해 언어 전체를 체계화하는 중
Hacker News 의견
  • 웹사이트와 예시에서 LEGO 언급을 제거해야 함
    LEGO는 상표 보호에 매우 엄격하며, 제3자가 이름을 사용하는 것을 원치 않음
    브랜드가 일반명사화되어 상표권을 잃을 위험을 우려하기 때문임
    관련 기사: "Lego sues Dutch firm over anti-terror blocks using name and shape" (archive 링크)

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

  • 나는 zoo와 그 언어 KCL을 사용해 경계 표현(BREP) 기반 CAD를 작성해왔음
    µcad도 같은 목적을 가진 것 같음
    개인적으로는 KCL의 파이프라인 방식이 더 마음에 듦
    다만 zoo는 클라우드 전용 커널을 강제해 벤더 종속성이 심한 게 불만임
    µcad가 이 문제를 어떻게 해결하는지는 아직 명확하지 않음

  • OpenSCAD의 가장 좋은 점은 코드 저장 후 바로 3D 뷰에서 결과를 즉시 확인할 수 있는 점임
    ucad에서도 이런 즉시성 있는 워크플로우가 가능한지 궁금함

    • 이 즉시성은 GPU의 stencil buffer를 이용한 OpenCSG 덕분임 (opencsg.org)
      실제 3D 교차 계산 없이 2D 화면에 빠르게 그려주는 방식임
      OpenSCAD는 이 구조를 AST로 추상화해 OpenCSG, CGAL, Manifold 등 다양한 엔진으로 전송할 수 있게 했음
      이론적으로는 어떤 CAD도 구현 가능하지만, 구현 난이도가 높음
    • VS Code에서 미리보기 가능한 플러그인이 있는 듯함 (관련 문서)
    • 별도의 뷰어/프리뷰 기능이 개발 중이며, Prototype Fund의 지원을 받았다고 함
  • OpenSCAD와 CadQuery를 써봤지만 UI와 커널의 제약 때문에 불편했음
    Onshape나 Fusion 360에 비하면 기능이 부족함
    FreeCAD도 많이 발전했지만 여전히 초중급자에게는 다루기 어려움
    오픈소스 CAD가 언젠가 제대로 된 대안이 되길 기대함

    • OpenSCAD의 장점은 프로그래밍적으로 모델링이 가능하다는 점이고, 단점은 수학적 사고력이 요구된다는 점임
      새로운 커널을 시도하는 Fornjot 같은 프로젝트도 있음
    • GUI 기반 툴을 원한다면 SolveSpaceDune3D를 추천함
    • FreeCAD의 새 UI와 OpenSCAD 통합 버전도 꽤 괜찮음
    • 하지만 2020년부터 써온 입장에서는 여전히 기본 문제는 그대로이고, 렌더러만 좀 더 보기 좋아졌을 뿐임
  • 이 프로젝트에는 제약 조건(Constraint) 솔버가 없거나 계획이 문서화되어 있지 않음
    단순한 제약을 위해 삼각함수를 일일이 유지하는 건 피하고 싶음

  • Lego brick 튜토리얼처럼 웹 노트북 환경에서 바로 실행할 수 있는 버전이 없다는 점이 아쉬움
    MachineBlocks의 SCAD 크래시 코스처럼 설치 없이 체험 가능한 형태가 있으면 좋겠음

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

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

  • 반복(iteration)을 잘 지원하는 CAD 언어를 찾고 있었음
    자가주택 설계를 하면서, 벽체 제작 세부사항을 루프 기반 코드로 자동화할 수 있으면 좋겠다고 생각했음
    하지만 for 루프가 없으면 이런 작업이 너무 어려워 결국 포기했음

    • FreeCAD에는 BIM(건축 정보 모델링) 기능이 있어서 건축 설계에 적합함
    • 반복 구조를 원한다면 build123d가 적합할 수도 있음