2 ポイント 投稿者 GN⁺ 2025-11-25 | 1件のコメント | WhatsAppで共有
  • µcadはRustで実装されたオープンソースのCAD向けプログラミング言語であり、コードで2Dスケッチと3Dオブジェクトを定義してSTL・SVGへ書き出せるテキストベースのジオメトリシステム
  • 言語の中心にはパラメトリック幾何オブジェクトがあり、基本図形をブーリアン演算で組み合わせて複雑な形状を作り、3Dプリンティング・CNC加工向け形式にレンダリングする構造
  • 静的型システムと単位ベースのQuantityリテラルを使って、50mm, 10°, 50%のような値でモデルを定義し、Models型で幾何モデルツリーを構成する型体系を提供
  • モジュール・関数・partワークベンチ・use構文、std::geo2dstd::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」の文書化作業を通じて、言語全体を体系化している

1件のコメント

 
GN⁺ 2025-11-25
Hacker Newsの意見
  • ウェブサイトと作例から LEGO への言及を削除したほうがよい
    LEGOは 商標保護 に非常に厳格で、第三者がその名称を使うことを望んでいない
    ブランド名が普通名詞化して商標権を失うリスクを懸念しているためである
    関連記事: "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チュートリアル のように Webノートブック環境 ですぐ実行できる版がないのは惜しい
    MachineBlocksのSCADクラッシュコース のように、インストール不要で試せる形があるとよい

  • これは AutoCADの代替 に近いものなのか気になる
    Revitなどに取り込めるような ファイル形式の互換性 があるのかも知りたい

  • 本当に興味深いプロジェクトだ
    手でCADを扱うのが嫌いなプログラマーとして、こうしたアプローチのほうがずっと 直感的
    ただ、Gearの作例を見ると、ライブラリの基本プリミティブ を理解するには文書を丁寧に読む必要がありそうだ
    コミュニティが大きくなれば、さらに多くの形状が追加されそうだ

  • 反復(iteration)をしっかりサポートするCAD言語を探していた
    自宅の設計をしながら、壁体製作の細部を ループベースのコード で自動化できたらよいと考えていた
    しかしforループがなければこうした作業は難しすぎて、結局あきらめた

    • FreeCADには BIM(建築情報モデリング) 機能があるので、建築設計に向いている
    • 反復構造を求めるなら build123d が適しているかもしれない