stl-generator について
STL Generatorは、木工作業用治具や交換部品向けに、build123dのパラメトリックスクリプトと印刷チェック済みSTLを作成するスキルです。既成の生成スクリプトに加え、採寸やクリアランス、印刷方向、モデル検証の指針を備えています。
主な機能
- 01治具や交換部品のSTL生成
- 02既成のパラメトリックスクリプト
- 03造形ベッド適合性と印刷可能性の検査
- 04実測寸法に基づくモデリング
- 05任意のSTEPファイル出力
活用シーン
- 01ルーター用円形切断治具の作成
- 02角度ウェッジやスペーサーの作成
- 03実測したねじ付き照明グローブの再現
- 04印刷前のカスタム部品検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ihistand/ claude-skills --skill stl-generatorインストール後、Claude Code で/stl-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/build123d_patterns.mdprinter_specs.mdscripts/angle_wedge.pycircle_cutting_jig.pyprintcheck.pyspacing_block.pythreaded_globe.py詳細
ジグおよび交換部品用 STL ジェネレーター
パラメトリックな build123d スクリプトでジグや交換部品を設計し、最初から正しく印刷できる STL をエクスポートします。納品物は STL です。プリンターについて考慮するのは、部品がベッドに収まるか、どのクリアランスが適切かだけで、どちらもパラメーターで指定します。
build123d の実行
スクリプトは ${CLAUDE_SKILL_DIR}/scripts/(このスキルのフォルダー)にあります。セットアップ不要で、どの Python バージョンでも動作する uv で実行します。
uv run --with build123d python ${CLAUDE_SKILL_DIR}/scripts/spacing_block.py 10
uv を使わない場合は、仮想環境を作成して pip install build123d を実行し、その仮想環境の Python で実行してください。STL はユーザーの作業ディレクトリ(またはユーザーが指定した場所)に書き込み、スキルのフォルダーには絶対に書き込まないでください。
すぐに使えるスクリプト
どのスクリプトも、デフォルト以外のプリンターを指定する --bed XxYxZ、出力名を指定する -o、すべてのオプションとデフォルト値を表示する --help を受け付けます。以下の例ではコマンドを python scripts/... に省略しています。上記の uv を使った方法で実行してください。各スクリプトはテスト済みで、最後に印刷準備チェックを行うため、出力に追加の測定は必要ありません。
scripts/circle_cutting_jig.py:円盤やリングを切り出すルーター用トラメルです。
python scripts/circle_cutting_jig.py 300 250 --mount <BC>:<N> # ring: 300 OD, 250 ID
python scripts/circle_cutting_jig.py 200 --bit 12.7 # disc only, 1/2" bit
プレートをルーターにネジで取り付けます。アームには各切断用のピボット穴があり、ビットに合わせた位置(外周は D/2 + bit/2、内周は D/2 - bit/2)に配置されるため、指定したサイズの円になります。実行前に、推測できない次の2点をユーザーに確認してください。ビットの切削径と、ルーターのサブベースのネジ穴パターン(ボルト円直径 <BC> とネジの数 <N>。ユーザーのルーターで測定)です。まだ分からない場合は、デフォルトの 1/4" ビットを使い、--mount を指定せずに生成してください。その際、両方の仮定を伝えます。ネジ穴のないプレートは、ルーター本体のサブベースを型にして穴を開けられます。
リングを切り出す場合、外周を先に切り、内周を最後に切ります。内周を切ると、ピボットピンを保持する中心の円盤が切り離されるため、その後は回転できなくなります。この順序をユーザーに伝え、切り離した後にどちらの部品もずれないよう、材料を犠牲板に固定するよう案内してください。スクリプトにも切断順序が表示されます。
scripts/angle_wedge.py:工作物を正確な角度で固定します。
python scripts/angle_wedge.py 15
python scripts/angle_wedge.py 22.5 --depth 80 --width 40
傾斜面が層で階段状にならず XY 平面上に表れるよう、横向きに印刷します。高さは角度から決まり、その逆ではないため、角度は正確です。急な角度のためにベッドより高くなる場合、チェックで拒否されるので、--depth を小さくしてください。
scripts/spacing_block.py:単体または組み合わせセットのセットアップ用ブロックおよびスペーシングブロックです。
python scripts/spacing_block.py 10
python scripts/spacing_block.py --set 5,10,15,20
測定面は平らなままです(刻印ラベル、側面のスカラップ、向きを示す面取りした角が付きます)。セット内のブロックはすべてベッドに接した状態で配置されます。高さが 0.2 mm の層高の倍数でない場合は、正確に印刷できないため警告が表示されます。
scripts/threaded_globe.py:ネジ付き照明カバーの交換部品です(器具にねじ込むネジ付きカラーの上に中空の球体があるもので、ポーチライト用の「フィッター」グローブのようなものです)。
python scripts/threaded_globe.py --inches --diameter 5.700 --height 6.2 \
--crest 3.235 --root 3.110 --pitch 0.232 --collar 0.713 --thread-length 0.700 \
--bore 2.825
python scripts/threaded_globe.py <same measurements> --collar-test # print this first
寸法はすべてユーザーのノギスによる測定値から決まります(下記の「交換部品」を参照)。ネジ山はガラスのネジ山のような丸みを帯びた形状で、--clearance(デフォルトは 0.2 mm)によって直径を少し小さくし、印刷物をねじ込めるようにします。デフォルトでは、グローブは赤道で 2 つに分割され、接着するハーフラップで接合されます。それぞれの縁を下にして印刷するため、サポート痕が目立ちにくい内側にサポートが付きます。中空の球体を丸ごと印刷すると外側にサポート痕が残ります(--one-piece を指定すれば丸ごと印刷できます)。
まずは必ず --collar-test を提案してください。必要なプラスチックは約 7 分の 1 で、完全なグローブを作る前にネジの適合を確認できます。印刷したシェードには LED 電球が必要です。PETG は 80 C 付近で軟化します。屋外用の器具には、PETG より耐日光性に優れた ASA を使ってください。--step を指定すると STEP ファイルも追加されます。
実測したオリジナルから交換部品を作る
オリジナルが仕様なので、部品が合うかどうかは実測値で決まります。ノギスでの測定値を尋ねてください。写真には尺度がないため、写真から寸法を推測してはいけません。具体的には、次の項目を尋ねてください。
- **ねじ山:**山頂をまたぐ直径、溝底の直径(相手側の部品からではなく、部品そのものを測定した谷径)、複数の山にまたがって測ったピッチをすき間の数で割った値、山の形状(丸みがあるか鋭いか)、ねじの向き(時計回りに回すと締まるか)。
- **相手部品と嵌合する直径すべて:**開口部、カラー、穴。
- 全高と、それぞれの区分の高さ。
- **どのような環境に耐える必要があるか:**電球やモーターの熱、日光、水、荷重。
モデリングの前に数値の妥当性を確認してください。ねじ部の長さより長いピッチ、山頂より大きい谷径、全高と合計が一致しない部品の高さは、測定ミスです。こうした場合はモデリングせず、確認してください。スクリプトはこれらのケースを拒否します。以前、このチェックをせずに同じ照明器具のモデルを作った際、器具のソケットから谷径を採用したため、ねじ山の深さが0.45 mmになりましたが、ガラス自体の溝の深さは1.6 mmでした。
カスタム治具
コードを書く前に、references/build123d_patterns.md と references/printer_specs.md を読んでください。そこには、部品をベッドに収めるためのクリアランス、最小サイズ、build123d の慣用的な書き方が記載されています。そのうえで、次の点に従ってください。
export_stlをそのまま使わず、scripts/printcheck.pyのexport_checkedでエクスポートしてください。printcheck.pyをカスタムスクリプトの隣にコピーし、スキルのフォルダーからインポートするのではなく、2つのファイルを一緒に持ち運べるようにしてください。無効な形状、空中に浮いた状態で印刷されるソリッド、どの向きに回転してもベッドに収まらない部品は拒否されます。また、対角方向なら収まる場合は部品を回転します。さらに、45度を超える傾斜面について、サポートが必要になるという警告も表示します。拒否された場合は、設計を変更してください(長い治具を、互いに位置決めできる複数の段階に分ける、または縮小するなど)。拒否された STL を決して渡してはいけません。- コードを読み直すのではなく、ソリッドを測定して検証してください。
is_insideで穴の位置を確認し、bounding_box()で高さを測り、面の法線から角度を求めてください。このスキルの以前のバージョンでは、スクリプトがエラーなく実行されたにもかかわらず、ピボット穴のないトラメルと、実測値が26.6だった45度のくさびが作られました。こうした問題を発見できるのは、測定だけです。
木工で重要な設計ルール
- **基準面は平らに保ってください。**作業物の上または側面に接する面はすべて測定面です。ラベルは浮き彫りではなく彫刻し、作業物に触れない面に配置してください。
- **刃のように薄い縁は作らないでください。**厚さ約1 mm未満の先細りの先端は印刷できません。短い垂直のつま先を追加してください。斜面の角度は変わりません。
- **精密な形状は XY 平面に配置してください。**軸が垂直な穴は丸く印刷されます。XY 平面に描いた斜面や角度は、プリンターの精度を最大限に活かせます。重要な寸法が XY 平面に来るように部品の向きを調整してください。
- **嵌合具合に応じてクリアランスを設定してください。**ピボットピンとブッシュ:+0.1~0.2 mm。ねじ:+0.3~0.5 mm。ドリルガイド:ドリルビットの直径に+0.1~0.2 mmを加え、ビットがぶれないようにします。
- **穴の列がベッドより長い場合は、2つ目の治具を作らず、位置決めしながら分割してください。**短い治具を作り、最初の穴にピンを通して、すでに開けた最後の穴に差し込みながら、ユーザーが治具を移動できるようにします。移動しても穴の間隔は正確に保たれます。
- **印刷時に下向きになる面の文字は反転してください。**印刷方向でベッドに接する面に彫刻した文字は、モデル内でスケッチを反転しない限り、その側から見ると逆向きになります。
- **繰り返しの穴あけはプラスチックを摩耗させます。**数回を超えて使用するドリルガイドには、ビットをむき出しの PLA でガイドするのではなく、ブッシュの外径に合わせた圧入用のスチールブッシュを取り付けてください。
結果の引き渡し
ユーザーに以下を伝えます。
export_checkedの出力にあるSTLのフルパス、サイズ、ソリッド数- 印刷向き(エクスポート時の向き。STLはすでに印刷向きになっています)、壁の枚数とインフィル、サポートが必要かどうかとその位置:エクスポート時のオーバーハング警告に記載されています(治具では通常不要ですが、球体では必ず必要です)
- 印刷後にノギスで確認する寸法と、はめ合わせが必要なもの(ピン、ハードウェア、ブッシング)がある場合は、その形状だけの小さなテストピースを先に印刷することを提案します。クリアランスはプリンターやフィラメントによって異なります
後でCADで編集する可能性がある場合は、export_stepでSTEPもエクスポートします。