- OpenSCAD を使って簡単な バッテリーホルダー を設計し、コードベースCADの基本概念を探った事例
- 以前は Autodesk Fusion でAA・AAA電池向けのパラメータ化ボックスを作成していたが、これを OpenSCADで再実装 しながら学習を進めた
- コード内で
numRows、numColumns、batteryType などの変数を変えるだけで カスタムホルダー を生成でき、高価なCADソフトウェアなしでも同じ結果 を得られる
difference() と translate() を使って ボックスと穴を繰り返し生成・削除 する構造で、単純だが効率的な設計方式
- 複雑なモデルには限界があるものの、スペーサー・ベアリングドリフトなどの単純な幾何構造の作成に有用 なツールと評価されている
OpenSCADでバッテリーホルダーを設計
- AAおよびAAA電池向けの 基本的な箱型オーガナイザー をAutodesk Fusionで設計した後、これをOpenSCADで再実装
- 既存のFusionモデルは、変数調整によって電池サイズ、行数・列数を変えられる パラメータ化構造
- 完成したモデルはPrintablesにアップロードされている
- OpenSCADは コードを書いて3Dオブジェクトを生成するCADツール で、単純な構造のモデル学習に適している
- 筆者はOpenSCADチュートリアルの一部を参照しながら、約1時間にわたって実習を進めた
- 成果物は
battery_holder_generator.scad ファイルとして公開されている
コード構造と動作方式
- 主な変数として
AA、AAA、heightCompartment、thicknessWall、numRows、numColumns、batteryType などを定義
widthBox、lengthBox、depthBox は各変数の組み合わせで計算される
difference() 関数で 基本ボックス(cube) を生成した後、内部に バッテリー用の穴を繰り返し差し引く構造
for ループと translate() を使って穴の位置を計算し、cube() で各穴を生成
let() を使って startColumn、startRow をループ内で定義しなければならない部分が混乱したと述べている
OpenSCADとFusionの比較
- 同じモデルを FusionとOpenSCADでそれぞれ生成した後、スライサーで比較
- 結果として出力物は事実上同一で、OpenSCADは 軽量なコードベースのアプローチ によって素早い修正が可能
- 高価なCADソフトウェアがなくても同等レベルの成果物 を得られる
活用可能性と限界
- 複雑な設計には向かないが、スペーサー・ベアリングドリフトなどの単純な幾何構造の作成 には非常に有用
- 実生活で頻繁に必要になる 単純部品の製作自動化 に強みがある
- OpenSCADの コード中心の設計方式 は、反復的で規則的な構造の生成に効率的
結論
- OpenSCADは 簡単な3Dモデルを素早く生成できるコードベースCADツール と評価されている
- 筆者は「単に箱を描いて穴を開けるだけだが、かなりいい」と表現した
- 今後の簡単な設計作業では、FusionよりOpenSCADの方が実用的かもしれない
2件のコメント
私はFreeCADを強くおすすめします。
Hacker Newsのコメント
OpenSCAD はプログラマー的な思考にぴったり合う CAD ツール
すべての要素をパラメータ化できるので、一度作ったプロジェクト用エンクロージャを変数をいくつか変えるだけでさまざまなバージョンとして生成できる
最新の nightly ビルドで Manifold バックエンドを設定すると、レンダリング速度が分単位から秒単位まで短縮される
公式の 2021 リリースは古すぎて使いづらい
BOSL2 ライブラリはフィレット、丸め、アタッチなどの機能を追加し、OpenSCAD をおもちゃレベルから実用的な設計ツールへ引き上げてくれる
Git との相性も非常に良く、Fusion 360 のバイナリファイルよりも .scad ファイルの差分をずっと比較しやすい
OpenSCAD の限界を感じて、Python でSDF(符号付き距離関数)ベースの 3D メッシュ生成ライブラリ sdf を自作した
Python の自由なロジックを使ってモデルを構成でき、既存の 3D メッシュを読み込んで侵食、膨張、切断、中空化のような処理も行える
このプロジェクトにはまだやることが多いが、この分野には強い関心があると思っている
STL はビットマップのように三角形の座標を保存するが、STEP はベクターアートのようにモデル生成コマンドを保存する
ほとんどの GUI CAD は STEP ベースなので互換性が高い
もし SDF が STL しか生成しないなら、GUI CAD との互換性を考えると Build123d や CadQuery を学ぶほうが良いのではないかと思う
Build123d は Fusion360 や FreeCAD のように 2D スケッチから 3D へ変換する概念なので、GUI とコードベース CAD を行き来しやすい
Meshlab のようなツールはエラーメッセージが分かりにくくて失敗したが、この方式ならずっと直感的に作業できそう
最近 OpenSCAD を使い始めたが、たいていの CAD が大量の機能を覚えさせるのに対して、OpenSCAD はA4 一枚のチートシートで説明できる
2021 リリースの代わりに git master 版を使えば、ずっと高速で新しい機能も使える
BOSL2 ライブラリを使えば従来型 CAD の複雑な機能を自分で実装しなくて済み、内部実装も見られるので学ぶ楽しさが大きい
GUI CAD では 0.25mm の修正でもすべての穴やカットアウトを再調整しなければならず挫折したが、コードベースのアプローチならそうした問題を避けられる
BOSL2 のcenter originデフォルトのおかげで変換作業がずっと簡単になる
OpenSCAD にはオブジェクトの概念がないので、box1.width のようなアクセスができないのが残念
Build123d を使ってみたが、バグが多くドキュメントも不足している。いつか改善されてほしい
OpenSCAD の長所は、球、円柱、キューブを数学的に組み合わせてモデリングしやすいこと
欠点は、その数学的な組み合わせ能力がそのままモデリングの限界になること
Python をサポートするフォーク PythonSCAD は、まもなくメインリリースに統合される予定
ボルトのようなモデルを作るには各部分を別々に作って重ねる必要がある
実際の部品に合わせて位置合わせするには多くの手計算が必要で、ハードコードされた寸法は変更しにくい
最新ベータ版のレンダラーはずっと高速なので、ぜひ試す価値がある
GitHub リポジトリ 参照
自分は軽量な 3D モデラーとして OpenSCAD のシンプルさが好き
巨大な GUI CAD ではなく、グラフィックプログラミングのように基本図形と変換だけでモデルを作れる
久しぶりにコードを開いても、数行見ればすぐ理解できる
数学的な計算が必要な拘束条件は、GUI CAD のスケッチ機能のほうがずっと簡単
CAD なら段階ごとに戻って構造を確認できるので、スクリプトを読み解く必要がない
OpenSCAD は内蔵エディタではなく外部エディタを使える
外部エディタで保存すると自動的にプレビューが更新される
外部エディタ設定ガイド
以前、OpenSCAD 入門用に「10 の重要な概念」チュートリアルを書いた
チュートリアルへのリンク
ヒント:
$fn変数を設定して解像度調整が可能$fn = $preview ? 32 : 64;見た目の滑らかさより解析精度が重要なので、32〜64 程度が適切
現実に役立つモデルを作るには手間がかかるが、2KB のテキストファイルで完全なパラメトリックモデルを表現できる点はとても魅力的
Git diff も意味のある形で機能し、Customizer パネルでモデルをアプリのように調整できる
FreeCAD の巨大な XML ファイルよりずっと効率的
ただし、面取り(chamfer)や丸めのような機能が標準では用意されておらず、cone や sphere を使った minkowski 演算で実装しなければならないのは面倒