
2026/08/15 1:43
Show HN: LuaCAD – ルアで記述されたパラメトリック CAD ツール
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
LuaCAD は、Lua スクリプトの容易さとの Rust エンジンの性能を組み合わせることで、パラメトリックモデリングにおいて重要な進歩をもたらします。正確な 2D および 3D モデルのための堅牢な埋め込み環境を提供し、より遅い外部コードの実行に代わり、CSG 演算をネイティブで評価する(必要に応じて OpenSCAD コードを生成する場合を除く)機能を持ちます。ユーザーは、OpenSCAD に似た簡素化された構文を使用して複雑なブール論理を実行でき、かつ自然な CSG 式のためのオペレータオーバーロードによって強化されています。このツールは BOSL2 を Lua 内に完全再実装したライブラリとしてサポートしており、外部の依存関係を必要としないようになります。
LuaCAD は STL、OBJ、3MF、PLY、OFF、AMF、SCAD のような標準形式へのモデルのエクスポートをサポートし、また
luacad render などの CLI コマンドを通じて直接 PNG にレンダリングすることも可能です。LibreCAD や Autodesk Netfabb といった主要な業界ツールとの統合も実現しており、スタンドアロンのアプリケーションとして(GUI とライブプレビューのための cargo install luacad-studio でインストール可能)ならびに埋め込み可能な Rust ライブラリとして利用できます。CLI を通じたインストール (cargo install luacad) は、変換、ウォッチング、レンダリング、linting、およびスクリプトの実行をサポートし、Debian/Ubuntu でのソースビルドにはシステムグラフィックスライブラリの必要性があります。3D プリンティングパイプラインへの使用か、より大きなプロジェクトへの統合かに関わらず、能力を損なわずに効率性を求めるデザイナーにとって、広範なアクセシビリティを提供します。本文
LuaCAD: スクリプタブルなパラメトリック CAD ツール
Lua を使用してパラメトリックな 2D および 3D モデルを記述し、3MF、STL、OBJ、PLY、OFF、AMF、SCAD形式にエクスポートまたは直接 PNG イメージとしてレンダリングできます。
技術スタックと仕組み
- Rust エンジンに Lua 5.4 を組み込みます。
- CSG(コンストラクティブ・ソリッド・ジョーニング)操作を以下两种方式で対応します:
- Manifold ライブラリを用いて直接評価
- OpenSCAD コードを生成し、外部レンダリング用として利用
なぜ Lua か?
OpenSCAD の構文と似ていますが、以下の点で優れています。
- より強力な機能
- より一貫性のある設計
- より高速な実行
- 容易に他の環境への埋め込み
- 自然な CSG 記述を可能にするオペレータオーバーロード(
、a + b
、a - b
など)a * b - LibreCAD や Autodesk Netfabb 等、既存の CAD ソフトウェアでも既に採用されています。
サンプルコード
LuaCAD (Lua)
my_cube = cube { size = { 1, 2, 3 } } function my_sphere(radius) return sphere({ r = radius }):translate(5, 0, 0) end model = my_cube + my_sphere(2) render(model)
同等の OpenSCAD コード
module my_cube() { cube(size=[1,2,3]); } module my_sphere(radius) { translate([5,0,0]) sphere(r = radius); } union() { my_cube(); my_sphere(2); }
インストール方法
CLI からインストール
cargo install luacad # スクリプト実行・変換用 CLI ツール cargo install luacad-studio # リアルタイム 3D プレビュー付きデスクトップ GUI アプリ
ソースコードからのインストール(Rust/C++コンパイラ、CMake の必要性あり)
git clone https://github.com/ad-si/LuaCAD.git cd LuaCAD make install
注釈: 両ライブラリは C/C++ 依存関係を独自に管理するため、システムへの別途インストールは不要です。ただし、ビルドにはコンパイラと CMake の準備が必要です。
は Manifold と Clipper2 を構築し、luacadはさらに OpenCSG も構築するため、Debian/Ubuntu 環境では以下の開発ヘッダーが必要です:luacad-studio
libgl1-mesa-devlibx11-devlibxcb1-devlibxkbcommon-devlibxrandr-devlibwayland-dev
CLI コマンド一覧
| コマンド | 説明 |
|---|---|
| 3MF 形式に変換 |
| STL 形式に変換 |
| OpenSCAD 形式としてエクスポート |
| ファイル変更を検知して自動再構築 |
| PNG イメージとしてレンダリング |
| トライアングル数とバウンディングボックスを表示 |
| selene を使って静的解析(ディレクトリ指定も可) |
| 実行(副作用のみ発生) |
オプションの使い方
とconvert
コマンドは、出力ファイルの拡張子からフォーマットを自動判断します。必要に応じてwatch
で上書き可能。--format <fmt>
オプションを使用すると、Manifold を使わずにインストール済みの OpenSCAD バイナリにエクスポートを委譲できます。--via-openscad
BOSL2 の完全サポート
Belfry OpenSCAD Library v2(BOSL2)は LuaCAD 内で独自に実装・再実装されています。OpenSCAD や BOSL2 を別途インストールしなくても、以下の機能を使えます:
bosl.cuboid { {40, 40, 40}, rounding = 2 } bosl.regular_prism { 5, r = 10, h = 25 } bosl.spur_gear { circ_pitch = 5, teeth = 20, thickness = 5 }
形式へのエクスポート時にも BOSL2 の呼び出しが出力されるため、生成元スクリプトと同じく短縮されたファイルが得られます。.scad
テキストとインポート機能
-
テキスト描画:
はシステムフォントの輪郭をスキャッチに変換し、text()
で押し出すことで、文字列も真正なジオメトリとして扱われます。text3d()render(text("LuaCAD", { size = 12, halign = "center" }):linear_extrude(2)) -
ファイルインポート:
はすべてのメッシュ形式を読み込み、プライミティブと同様に操作・結合可能なソリッドを返します。import()- SVG および DXF ファイルは、2D スケッチとして返され、押し出しの準備が整った状態になります。
対応するエクスポートフォーマット
- SCAD: OpenSCAD フォーマット
- 3MF: 3D 製造用フォーマット
- STL: 3D プリンティング用の標準トライアングル言語
- OBJ: Wavefront 3D オブジェクトフォーマット
- PLY: ポリゴンファイルフォーマット
- OFF: オブジェクトファイルフォーマット
- AMF: 積層製造用ファイルフォーマット
注意点: スクリプトが返す値はすべて独立した 3MF オブジェクトとして扱われるため、スライサーでは個々に移動可能な部品として読み込まれます(
:name(…) で表示名を制御可能)。他のフォーマットは個別オブジェクトを表現できないため、単一のメッシュにフラット化されます。