openscad-iterative-modeling について
openscad-iterative-modeling は、SCAD の作成、PNG プレビュー、反復修正を通じてパラメトリックな 3D 形状を作るワークフローです。OpenSCAD MCP Server でプレビューを描画し、STL を出力します。
主な機能
- 01要望をモデリング条件に整理
- 02パラメトリックな SCAD 形状の作成
- 03PNG 描画による形状確認
- 04プレビューに基づくモデル修正
- 05承認後の STL 出力
活用シーン
- 01説明からブラケットや筐体を作成
- 02物体画像から 3D モデルを再現
- 03OpenSCAD コードの描画結果を確認
- 04SCAD モデルを STL に出力
MCP 対応
設定済みで稼働中の OpenSCAD MCP Server が必要です。プレビューには render_scad_png、モデルの出力には export_scad_stl を使用します。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fboldo/ openscad-mcp-server --skill openscad-iterative-modelingインストール後、Claude Code で/openscad-iterative-modelingを入力して読み込まれたか確認します。
詳細
OpenSCAD の反復モデリングループ(SCAD → PNG → 改良)
このスキルを使用するタイミング
- ユーザーがブラケット、筐体、マウント、歯車などの3Dオブジェクトの作成、設計、モデリングを依頼した場合
- ユーザーがオブジェクトの画像を送信し、3Dで再現するよう依頼した場合
- ユーザーがOpenSCADコードのレンダリングまたはプレビューを希望する場合
- ユーザーがSCADの記述からSTLファイルをエクスポートするよう依頼した場合
- パラメトリックなCSGジオメトリで表現できるその他のリクエスト
前提条件
必要なツール
- OpenSCAD MCP Server:OpenSCADジオメトリのレンダリングとエクスポートに必要です
- 利用可能な機能:
render_scad_png(SCAD → PNGプレビュー)、export_scad_stl(SCAD → STLメッシュ) - ツール名にはホストによる名前空間が付く場合があります(例:
mcp_openscad-mcp-_render_scad_png)。接尾辞で照合してください - プレビューのレンダリングとモデルのエクスポートには、設定済みで稼働している必要があります
- 利用可能な機能:
動作モード
- 名前付き変数を使用した、小規模でパラメトリックなSCADを優先します。
- 各反復では、PNGのレビューで指摘された箇所のみを変更します。
- 3回のレンダリングと改良を繰り返しても収束しない場合は、作業を中止してユーザーに確認します。
ワークフロー
1. リクエストを整理する(必要最小限の確認)
正しくモデリングするために必要な項目だけを抽出して確認します。
- 単位(指定がない場合はmmをデフォルトにします)
- 重要な寸法(全体サイズ、穴の直径、壁の厚さ)
- 制約(印刷可能である必要があるか、公差、対称性、エッジを鋭くするか丸めるか)
重要な寸法が不足している場合は、1~3個の質問をします。それ以外の場合は、妥当なデフォルト値を用いて進め、その値を明示します。
2. SCADコードを作成する(初回)
- 名前付きパラメーターを指定した
moduleを使用します。 - 実用上問題がなければ、ジオメトリを原点に配置します(
center=true)。 - 曲面のあるパーツでは
$fnを明示的に設定します(初期値は$fn=64)。 difference()のカッターがボディを超えて伸びるようにし、厚さがゼロの壁ができないようにします。
3. PNGプレビューをレンダリングする
まずcameraPreset="isometric"(width=800、height=600)でレンダリングします。特徴を確認しにくい場合は、正投影ビューを追加します。
| 確認する特徴 | カメラプリセット |
|---|---|
| 平面レイアウト、穴の位置 | top |
| 高さ、段差、リップ、輪郭 | frontまたはright |
| 全体形状、プロポーション | isometric |
| 底面の特徴 | bottom |
4. PNGを目視で確認する
次のチェックリストを優先順位の高い順に確認します。
- レンダリングは正常か? — 空白またはエラーの場合は、下記の「レンダリングの失敗」を参照してください。
- 全体のプロポーション — 外形はリクエストに合っていますか?
- 特徴の有無 — すべての穴、切り欠き、面取り、フィレットが見えていますか?
- 配置と位置合わせ — 中央に配置されていますか?対称ですか?オフセットは正しいですか?
- 向き — 使用目的に適した向きですか(例:印刷時に平らな面を下にする)?
見つかった問題ごとに、次のような1行の判定を書きます。
- 「貫通穴が中心から約5 mmずれています —
translateのXを+5移動します。」 - 「リップが高すぎます(6 mm → 2 mmに減らします)。」
5. SCADコードを改良して繰り返す
指摘に対応する最小限のSCAD変更を適用し、再度レンダリングします。
PNGがユーザーの意図に合い、ユーザーが承認したら終了します。
6. STLをエクスポートする(準備ができた場合のみ)
承認されたら、ジオメトリをエクスポートします。
- 安定したファイル名を選びます(例:
"bracket.stl")。 - 複数のバリエーションを希望する場合は、それぞれ異なるファイル名でエクスポートします。
レンダリングの失敗
レンダリング結果が空白になる、またはエラーになる場合:
- SCADを最小限の形状(例:立方体)に簡略化し、ツールが動作していることを確認します。
- 特徴を1つずつ追加し、追加するたびにレンダリングして問題の原因を特定します。
- よくある原因:構文エラー、
difference()の順序、負の寸法、カッターがボディと交差していない。
使用例のループ
ユーザーのリクエスト:「L字ブラケット、40x30 mm のベース、高さ25 mmの壁、厚さ4 mm、ベースにM4の皿取り取り付け穴を2つ。」
- SCAD のドラフトを作成します:
$fn = 64;
t = 4; base_w = 40; base_d = 30; wall_h = 25;
hole_d = 4.3; csink_d = 8.5; csink_depth = 2.4;
hole_x = [10, 30]; hole_y = 15;
difference() {
union() {
cube([base_w, base_d, t]); // base
translate([0, 0, 0]) cube([t, base_d, wall_h]); // wall
}
for (x = hole_x) {
translate([x, hole_y, -1]) cylinder(h = t + 2, d = hole_d);
translate([x, hole_y, t - csink_depth]) cylinder(h = csink_depth + 1, d1 = hole_d, d2 = csink_d);
}
}
isometricでレンダリング → 評価:壁が誤った端にあります。x = base_w - tに移動します。- 修正して
topでレンダリング → 穴の間隔は適切に見えます。frontでレンダリング → 壁の高さは正しいです。 - ユーザーの承認後、STL をエクスポートします。
コメント
Markdown 対応