- µ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」の文書化作業を通じて、言語全体を体系化している
1件のコメント
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がこの問題をどう解決するのかはまだ明確ではない
µcadはManifoldベースなので メッシュ中心 であり、BREPベースのKCLとは異なる
KCLは別のカーネルへ拡張することも可能だ
OpenSCADの一番よい点は、コードを保存するとすぐに 3Dビューで結果を即座に確認 できることだ
ucadでもこのような即時性のあるワークフローが可能なのか気になる
実際の3D交差計算を行わずに2D画面へ高速に描画する方式である
OpenSCADはこの構造をASTで抽象化し、OpenCSG、CGAL、Manifoldなどさまざまなエンジンへ送れるようにしている
理論上はどんなCADでも実装可能だが、実装難度は高い
OpenSCADとCadQueryを使ったことがあるが、UIとカーネルの制約 のため使いにくかった
OnshapeやFusion 360と比べると機能が不足している
FreeCADも大きく進歩したが、依然として初中級者には扱いづらい
オープンソースCADがいつか本格的な代替になることを期待している
新しいカーネルを試している Fornjot のようなプロジェクトもある
このプロジェクトには 制約条件(Constraint)ソルバー がないか、少なくともその計画が文書化されていない
単純な制約のために三角関数をいちいち維持するのは避けたい
Lego brickチュートリアル のように Webノートブック環境 ですぐ実行できる版がないのは惜しい
MachineBlocksのSCADクラッシュコース のように、インストール不要で試せる形があるとよい
これは AutoCADの代替 に近いものなのか気になる
Revitなどに取り込めるような ファイル形式の互換性 があるのかも知りたい
本当に興味深いプロジェクトだ
手でCADを扱うのが嫌いなプログラマーとして、こうしたアプローチのほうがずっと 直感的 だ
ただ、Gearの作例を見ると、ライブラリの基本プリミティブ を理解するには文書を丁寧に読む必要がありそうだ
コミュニティが大きくなれば、さらに多くの形状が追加されそうだ
反復(iteration)をしっかりサポートするCAD言語を探していた
自宅の設計をしながら、壁体製作の細部を ループベースのコード で自動化できたらよいと考えていた
しかしforループがなければこうした作業は難しすぎて、結局あきらめた