
2026/01/28 5:36
Rust によるパラメトリック CAD(Computer-Aided Design)――パラメータ駆動型設計を実装するためのツールやライブラリを Rust で開発すること。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
## 要約 vcad は、構築的固体幾何(CSG)を使用してプログラムでパラメトリック CAD モデルを作成できる Rust ライブラリです。 プリミティブ(立方体、円柱など)、ブーリアン演算子(`+`、`-`、`&`)、変換、およびパターン関数を公開しています。 例のコードでは、L 型ブラケット、ボルトサークル付きフランジドハブ、およびディスクから切り取られた放射状ベントパターンを作成する方法が示されています。生成された部品は STL に書き込むか、PBR 材質が TOML で定義された glTF(GLB)ファイルとしてエクスポートできます。 ```rust let plate = Plate { name: "plate".into(), width: 100.0, thickness: 5.0 }; plate.write_stl("plate.stl").unwrap();
すべてのジオメトリは完全にパラメトリックであり、1 つの数値を変更すると GUI のクリックや元に戻し/やり直しなしで自動的に再コンパイルされます。
基盤となる幾何エンジンは、マニフェスト性とワットレートメッシュを保証する Rust ラッパー付き C++ コアです。
テスト(
cargo test)ではボリューム、表面積、境界箱、およびエクスポート・インポートの往復が検証されます。cargo clippy は型関連のエラー(例:直径の代わりに半径を渡すなど)を捕捉します。
vcad は AI コーディングエージェント向けに設計されています。API ドキュメント、クックブックレシピ、および Blender MCP 統合により、エージェントはジオメトリを生成し、エクスポートして Blender にインポートし、照明を設定し、プレビューを自動的にレンダリングできます。
ドキュメントは docs.rs で公開され、vcad.io のウェブサイトでも閲覧可能です。プロジェクトは GitHub(github.com/ecto/vcad)で MIT ライセンスが適用されています。
現在のバージョンは 0.1 であり、将来のリリースではフィレット、面取り、ねじ、およびインタラクティブな Web GUI が追加されます。
本文
私はいつもロボット用の部品――モーターマウント、センサーブラケット、ホイールハブ――を設計しています。ワークフローは毎回同じで、GUI CADプログラムを起動して1時間ほどクリックし、STL をエクスポートし、ボルトパターンが2 mm オフだと気付いて再度やり直すというサイクルです。
部品設計もファームウェアのように Rust で書きたい――型を持ち、バージョン管理できて、数値を1つ変えるだけで全体を再生成できる――と考え、vcad を作りました:
cargo add vcad
アイデア
部品は名前付きのジオメトリにすぎません。プリミティブを作り、布尔演算で組み合わせてエクスポートするだけです。
use vcad::{centered_cube, centered_cylinder, bolt_pattern}; let plate = centered_cube("plate", 120.0, 80.0, 5.0); let bore = centered_cylinder("bore", 15.0, 10.0, 64); let bolts = bolt_pattern(6, 50.0, 4.5, 10.0, 32); let part = plate - bore - bolts; part.write_stl("plate.stl").unwrap();
マイナスは実際の布尔差分です;
+ はユニオン、 & は交差。演算子オーバーロードにより CSG が算術的に扱えるようになります。
上記のプレートは中央にボアがあり、4 つの角にマウント穴、6 ボルト円形パターンを持っています――12 行コードで 1 ファイルの STL を生成できます。
作れるもの
API は意図的に小さく設計されています:プリミティブ、布尔演算、変換、パターン。これが言語全体ですが、組み合わせると強力です。
両面にマウント穴のある L‑ブラケット
let base = centered_cube("base", 60.0, 40.0, 4.0); let wall = centered_cube("wall", 60.0, 4.0, 36.0) .translate(0.0, -18.0, 20.0); let bracket = base + wall - base_holes - wall_holes;
ボルト円形パターン付きフランジハブ
let hub = centered_cylinder("hub", 15.0, 20.0, 64); let flange = centered_cylinder("flange", 30.0, 4.0, 64) .translate(0.0, 0.0, -10.0); let part = hub + flange - bore - bolt_pattern(6, 45.0, 3.0, 8.0, 32);
円盤から切り出した放射状ベントパターン
let slot = centered_cube("slot", 15.0, 2.0, 10.0); let vents = slot.circular_pattern(20.0, 8); let panel = centered_cylinder("panel", 35.0, 3.0, 64) - vents;
すべての部品はパラメトリックです。ボルト数、半径、壁厚を変えると全体が再生成されます。クリックや Undo は不要で、再コンパイルだけで済みます。
マルチマテリアルエクスポート
STL は 3D プリンティングに適していますが、材質情報は失われます。可視化のため、
vcad は PBR 材質を TOML で定義した glTF シーンをエクスポートします:
let materials = Materials::parse(r#" [materials.body] color = [0.32, 0.72, 0.95] metallic = 0.1 roughness = 0.5 [materials.antenna] color = [0.95, 0.3, 0.35] metallic = 0.3 "#).unwrap(); let mut scene = Scene::new("mascot"); scene.add(body, "body"); scene.add(antenna_ball, "antenna"); export_scene_glb(&scene, &materials, "mascot.glb").unwrap();
これは完全に CSG で作られたマスコットです。丸い立方体と球の交差でボディ、球で目、円柱で腕を表現しています。8 種類の材質、17 個の部品、1 ファイルの GLB。
Rust を選んだ理由
ジオメトリエンジンは多様性があり、布尔演算からウォータートレイトなメッシュを保証します。Rust バインディングにより C++ コアへのゼロコスト抽象化が実現し、演算子オーバーロードは直接多様性呼び出しへとコンパイルされます。ガベージコレクションの遅延も浮動小数点でのスクリプト層の不具合もありません。
しかし本当の理由はツールチェーンです:
でボリューム、表面積、境界箱、エクスポートのラウンドトリップを検証する 21 のユニットテストが走ります。cargo test
が問題を事前に捕捉し、穴がある部品になる前に警告します。cargo clippy- 型が半径と直径の混同を防ぎます。
CAD ファイルはコードです。コードにはテスト、レビュー、差分、CI が付き、STL は単なるバイト列に過ぎません。
エージェント向け設計
ほとんどの CAD ツールが無視している点:vcad は AI コーディングエージェントで使えるように設計されています。README には完全な API テーブル、コピー&ペースト可能なレシピ集、Blender MCP 統合セクションがあります。エージェントはドキュメントを読み取り、部品を生成し、エクスポートし、Blender にインポートしてカメラ配置とレンダリングまで 1 回の対話で完了できます。
この投稿のすべてのレンダーはそのように作られました:Claude が
vcad でジオメトリを生成し、各 STL/GLB を MCP 経由で Blender にインポートし、スタジオ照明を設定して PNG をレンダリング。Blender は人間の手が触れたことはありません。
フィードバックループは次の通りです:
- 部品を説明
- コードが生成
- メッシュをエクスポート
- プレビューをレンダー
- 反復
すべてターミナルで完結します。
試してみる
cargo add vcad
- ドキュメント: docs.rs/vcad
- ソースコード: https://github.com/ecto/vcad
- サイト: https://vcad.io
MIT ライセンスです。初版は 0.1 で、フィレット、チャムファー、ねじ、インタラクティブ Web GUI 等の追加予定がありますが、コアは確実に構築済みです:プリミティブ、布尔演算、変換、エクスポート。クリックをやめてコードを書き始めましょう。
何か作ってみませんか?