3D STL
2つのエントリポイント、1つの出力標準:水密なSTL、それを再生成するパラメトリックスクリプト、そして印刷を成功させるスライサテーブル。
| 入力 | ルート | ライブラリ |
|---|---|---|
| 寸法、記述されたオブジェクト、言葉によるスケッチ | ジオメトリルート | scripts/partlib.py |
| 写真または画像ファイル | 画像ルート | scripts/imagelib.py |
ジオメトリルートのセットアップ:
pip install trimesh shapely manifold3d --break-system-packages -q
画像ルートはPillowとnumpyのみ必要です — メッシュライブラリもブーリアンも不要です。
ジオメトリルート
1. モデリング前に寸法を確定する
ここでの手戻りのほとんどは、悪い形状が原因ではなく、曖昧さが原因です。パーツの情報を簡潔なテーブル(寸法 → 値 → 出典)にまとめ、仮定した事項には印を付けます。特に以下の点に注意してください:
- 外形サイズ vs. 取り付け中心。「幅87 mm」と「ネジ間87 mm」は異なるパーツです — 壁厚1つ分だけ異なります。確認してください。
- 不足している3次元。プロファイル+厚さは3次元のうち2つしかありません。適切な奥行きを選び、その旨を述べ、フラグにします。
- ファスナーの意図。「5 mmネジ」は、金属M5ネジ用のクリアランス穴、印刷されたねじピン、またはヒートセットインサートのいずれかを意味します。3つの異なるモデルがあります。
- 既存のハードウェア。パーツが既存のものと組み合わさる場合、その穴間隔と材料厚は優先事項ではなく制約です。
形状を変更するであろう質問は最大1〜2つに絞り、残りは仮定し、仮定を明記して進めます。
2. ライブラリを使ってモデリングする
scripts/partlib.pyは、プロファイルビルダー、extrude、threaded_rod、threaded_pin、hex_nut、place、finishを提供します。メッシュ計算を再実装するのではなく、これをインポートします — らせんねじ山は微妙に間違えやすいです。
scripts/example_handle.pyは完全な動作サンプルパーツ(ブリッジハンドル+一体型ねじピン+対応ナット)です。これを新しいパーツの骨格としてコピーします。
モデルはargparseフラグを持つパラメトリックスクリプトとして書き、ハードコードされた数値は使用しません。ユーザーは数分以内にバリエーションを要求するでしょう。その答えは新しいモデルではなく、1つのコマンドラインであるべきです。STLと一緒にスクリプトも提供します。
3. 一般的なパーツのレシピ
| パーツ | 構築元 |
|---|---|
| ブリッジハンドル、⊓ブラケット | bridge_profile + extrude |
| 穴付き平板 | 内部リング付きshapelyポリゴン + extrude |
| ピン、スタッド、ボルト | threaded_pin、その後軸上にplace |
| ナット、ねじ付きソケット | hex_nut、またはthreaded_rod(clearance=…)の減算 |
| スペーサー、ブッシング | 2つの同心円 + extrude |
| フック、Lブラケット | 側面図のポリゴン + extrude、ベッドに平置き |
| エンクロージャ | 外箱から内箱を減算、リップに0.15 mmクリアランス |
リストにないものでも、ポリゴン、押し出し、ブール演算です。
画像ルート
scripts/imagelib.pyは画像を高さフィールドに変換し、明示的な頂点グリッドソリッド(上面、平底、4つの側面)を生成します。ブーリアンエンジンを使用しないため、大きな画像や奇抜な画像でも失敗しません。
python3 imagelib.py photo.jpg --mode lithophane --width 100 \
--out stl_output/lithophane.stl
python3 imagelib.py logo.png --mode relief --width 80 --base 2 \
--out stl_output/relief.stl
| モード | マッピング | 典型的なz |
|---|---|---|
relief | 明るいピクセルが隆起 | 0.6 → 4.0 mm、しばしば--baseプレート上 |
lithophane | 暗いピクセルが厚くなり、バックライトで光る | 0.8 → 3.0 mm、ベースなし |
--resは長辺のサンプル数を設定します(デフォルト200)。サンプルあたり約0.4 mmを超える解像度は無駄です — ノズルで印刷できず、ファイルサイズが肥大化します。大きな印刷の場合にのみ上げてください。- コントラストは読み込み時に自動的に引き伸ばされます。平坦でコントラストの低い写真は、平坦でがっかりする印刷結果になります。印刷せずにそう伝えてください。
- リソグラフは顔や高コントラストの被写体に向いています。風景や込み入ったシーンは泥のようになります。
check()は、すべてのエッジが反対方向に正確に2回出現することを検証します。カウントだけでは逆に縫合された壁を見逃し、「有効な」STLがスライサで裏返しになります。実行し、報告してください。
仕上げ(両ルート共通)
最初に確認:finish()(ジオメトリ)とcheck()(画像)は、バウンディングボックス、水密性、三角形の数を報告します。バウンディングボックスを要求された寸法と比較します — 符号エラーや単位の間違いを即座に捕捉します。水密でないメッシュを決して提供しないでください。
視覚的に明白でないもの(ねじ山、曲線、アセンブリ)については、簡単なmatplotlibプレビューをレンダリングして確認します。20秒で、6時間の誤った形状の印刷を防げます。
向き、ねじピッチ、クリアランスを選択する前に、references/design-rules.mdを読んでください。これには、層方向の強度、印刷可能なねじプロファイル、はめ合い公差、画像由来パーツ、および名前を付ける価値のある故障モードが含まれています。
返信には以下を含める必要があります:
- 仮定値を含む寸法テーブル。
- ユーザーに代わって行われた決定とその理由。要求された機能が機械的に弱い場合は、要求されたものを作成すると同時に、弱点を具体的な代替案とともに名前を挙げます — 決して黙って代替しないでください。
- スライサテーブル:層高、壁、インフィル、サポート(正確な場所)、材料、およびどの面をベッドに置くかとその理由。
- 異なる数値で再生成するための1行コマンド。
- 印刷前に既存のハードウェアと確認すべき事項。
STLファイルは、claude.aiでは/mnt/user-data/outputs/に、Claude Codeではカレントワーキングディレクトリのstl_output/フォルダに配信し、生成スクリプトと一緒に提示します。スクリプトはこのスキルのscripts/フォルダにあります。フルパスで呼び出すか、パーツスクリプトの隣にコピーします。Windowsではpython3の代わりにpythonを使用します。
マルチパーツアセンブリ
パーツが組み合わさる場合(ピンとナット、蓋と箱、ヒンジの半分):
- 両方を1つのスクリプト内の共有パラメータから生成します — 2つのファイルにクリアランス値があるとずれます
- オスとメスを同じ関数から導出し、クリアランス分だけオフセットして、矛盾が生じないようにします
- それぞれの印刷数を明記し、小さい方のスペアを提案します
- はめ合いが不確かな場合は、公差テストを提供します:2つのクリアランスで小さいパーツを印刷し、うまく回る方を採用します