Communitygithub.com

メディア → Fusion 360 復元スキル

画像、マルチアングル写真セット、技術図面、または機械的/物理的なオブジェクトの動画を、コンピュータビジョン計測、運動学的合成、およびFusion 360 MCPサーバーを介して、機能的なパラメトリック3D CADモデルとアセンブリに変換します。

メディア → Fusion 360 復元スキル とは?

このスキルは、画像や動画などのメディア入力からAutodesk Fusion 360で完全なパラメトリック3D CADモデルを再構築するための、決定論的な6フェーズエンジニアリングワークフローをエージェントに提供します。フェーズ0では、CADモノレポのセットアップとFusion MCP接続の確認を行います。フェーズ1では、メディア処理(process_media.py)を実行し、キーフレームと輪郭を抽出します。フェーズ2では、既知のハードウェア寸法(IKEA Skådis pegboardパターン、M3/M4ファスナー、人間工学的参照など)を用いて現実世界のミリメートルスケールを確立する「ゴールデンデータム」キャリブレーションを優先順位付けします。フェーズ3では、コンポーネント部品表(BOM)への運動学的分解と、折りたたみ可能な機構のための共平面エシュロン多ピンパラレルグラム則などの物理法則の適用を行います。フェーズ4では、Fusion 360 MCP上で、ユーザーパラメータと適切な単位変換(cm)を使用してクリーンなスケッチベースのパラメトリックモデリングを実行します。最後に、フェーズ5では、スクリーンショットの比較と、干渉やネイティブジオメトリをチェックする自動検証スクリプトによる視覚的・数学的検証を実施します。このワークフローは、Claude Codeを含む任意のMCP互換エージェントで使用でき、厳格なCADルール(剛体メッシュを回避し、スケッチ、構造平面、押し出し、フィレット、ジョイント機能を使用すること)を適用して、完全にパラメトリックで編集可能なCADタイムラインを実現します。

対応~Claude Code~Codex CLI~Cursor✓Antigravity✓Gemini CLI
npx skills add https://github.com/Kamish76/To-Fusion-Skill-Sets/tree/HEAD/skills/media-to-fusion

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

メディア(画像/動画/参考パック)からFusion 360への再構築スキル

ユーザーが写真、マルチアングル参照フォルダ、または動画(.mp4、.mov、.png、.jpg、.webp)を提供し、そのオブジェクトをAutodesk Fusion 360で再現するよう依頼した場合は、以下の6フェーズの決定論的エンジニアリングワークフローに従ってください。

厳格なCAD命令:

  • process_media.pyを実行し、現実世界のミリメートルスケールデータムを確立し、運動学的部品表(BOM)を作成せずに、直接Fusion MCP押し出しを記述してはいけません。
  • すべてのコンポーネントは、Fusion 360タイムライン内でネイティブのスケッチ、構築平面、スケッチ線/円弧/円、ユーザーパラメータ、および押し出し/フィレット/ジョイントフィーチャを使用して再構築する必要があります。生のメッシュボディ(root.meshBodies.add)を生成しないでください。

フェーズ 0: プリフライト安全ゲート & モノレポ環境(必須)

Fusion 360でCADジオメトリを作成する前に、ワークスペースを整え、ライブなMCP接続を確認します。

  1. CADモノレポの調整:

    • プライマリワークスペース: アクティブなCADモノレポまたはプロジェクトルート(例: CAD_MONOREPO_ROOT または現在のワークスペース)。
    • 厳格な分離保証: リポジトリルートに一時ファイル、スクリプト、レンダリングを作成したり、shared/を変更したりしないでください。
    • 新しいモデルは models/<NN>_<Model_Name>/ の下に保存します(例: models/02_Modular_Desk_Organizer/)。新しいモデルを開始する場合は、scaffold_text_model.py "<Model_Name>" でスキャフォールディングします。
    • shared/ からユニバーサルCADヘルパーをインポートします(fusion_client、cad_primitives、hardware_library、scene_animator)。
    • スクリプトを記述する前に、ドメイン参照メモリを読み取ります。
      • references/kinematic-archetypes.md(検証済みの機構方程式)
      • references/fdm-hardware-tolerances.md(印刷クリアランスとファスナーのザグリ穴)
      • references/fusion-api-gotchas.md(高速アニメーションとAPI修正)
  2. カナリアプローブ: fusion-mcp ツール execute_api_script を以下のコードで呼び出します。

    def run(context):
        import adsk.core, adsk.fusion
        app = adsk.core.Application.get()
        if not app:
            raise RuntimeError("Autodesk Fusion 360 application instance not found.")
        design = adsk.fusion.Design.cast(app.activeProduct)
        if not design:
            raise RuntimeError("No active Fusion 360 design document open.")
        print("FUSION_MCP_READY")
    
  3. フェイルファストルール:

    • Fusion 360が閉じている間にフェーズ1〜3のメディア計測を実行しても構いませんが、フェーズ4の前に FUSION_MCP_READY が失敗した場合は、CADビルドスクリプトを送信する前に停止し、ユーザーにアクティブなデザインドキュメントを開いたFusion 360を起動するよう指示してください。

フェーズ 1: メディアインジェスト & キーフレーム/輪郭抽出

[!IMPORTANT] ワークスペース分離ルール: メディア処理ファイルをメインのリポジトリルート(例: ./media_workspace は禁止)に出力しないでください。必ず models/<NN>_<Model_Name>/ の下に専用のモデルフォルダが存在することを確認し、すべてのメディア処理を models/<NN>_<Model_Name>/workspace/media にルーティングしてください。

  1. 前処理および計測エンジンを、入力された画像、動画、またはディレクトリに対して、モデルの分離されたワークスペース内で実行します。
    python3 <path_to_skills>/media-to-fusion/scripts/process_media.py "<input_media_or_folder_path>" --out-dir models/<NN>_<Model_Name>/workspace/media
    
  2. models/<NN>_<Model_Name>/workspace/media/media_manifest.json を検査し、read_file で生成されたビジュアルアーティファクトを確認します。
    • 参照フォルダの場合: 最初に dataset_overview.png を表示し、次に個々のサブワークスペース(models/<NN>_<Model_Name>/workspace/media/<slug>/)を検査します。
    • 動画の場合: contact_sheet.png と個々の keyframe_XX_grid.png ファイルを表示します(黒フェードイン、モーションブラー、手の拭き取りを自動的に拒否し、折りたたまれた状態、中間スイング状態、展開された運動学的状態をキャプチャします)。
    • 画像の場合: annotated_grid.png(デュアルコントラスト100px主目盛/50px副目盛ピクセル定規グリッド)と contours_preview.png(検出されたCanny輪郭 + スロット/穴の重心と、同じ行の中央ピクセルピッチ)を表示します。
    • 分割画面チェック: media_manifest.json の viewport_layout.is_split を確認します(例: 単一画像内に並んだ正面図と右側面図の直交ビュー)。これにより、ピクセルスパンが各サブビューポート内で独立して測定されます。

フェーズ 2: マルチティアスケールキャリブレーション(「ゴールデンデータム」を見つける)

モデリングを開始する前に、以下の厳格な優先順位階層を使用して、現実世界のミリメートルスケール(mm_per_px)を確立します。

  1. 優先順位 1 — メディア内の明示的な寸法指示またはビルドプレート制約:
    • 参照画像に寸法指示矢印がないか確認します(例: 全幅 35 cm / 350 mm、高さ 63 cm / 630 mm、奥行 32 cm / 320 mm、またはインセット内部トレイ指示 330 x 100 x 70 mm)。
    • 3Dプリンタのビルドプレート指示がないか確認します(例: "FOR 220 x 220 mm PRINTERS" → 最大単品幅/長さは通常 200–210 mm)。
  2. 優先順位 2 — フレーム内に見える標準エコシステムとハードウェアフィーチャ:
    • IKEA Skådis Pegboardパターン:
      • 水平方向の同列スロットピッチ(中心間): 40.0 mm
      • 垂直方向の列間ピッチ: 20.0 mm(交互の列は水平方向に 20.0 mm ずつ千鳥配置)
      • スロット寸法: 幅 5.0 mm × 高さ 15.0 mm(スタジアム/オブラウンドスロット: 垂直中心間 10.0 mm、端部は R = 2.5 mm の完全丸型)
      • 標準ボード厚: 5.0 mm(3Dプリントされたモジュラーペグボードパネルでは 3.2 mm – 4.0 mm)
    • 電子機器と機械的ハードウェア:
      • メカニカルキーボードMXスイッチ切り欠き: 14.0 x 14.0 mm(1uキーキャップピッチ = 19.05 mm)
      • 標準スマートフォン幅(例: スタンドに置かれている場合): ~71.5 mm
      • USB-Cレセプタクル開口部: 8.94 x 3.26 mm
      • ファスナー: M3ソケットヘッドキャップ径 = 5.5 mm(クリアランス穴 = 3.2–3.4 mm)、M4ヘッド径 = 7.0 mm
  3. 優先順位 3 — 人間工学的/手の参照:
    • 人間の手が部品を保持しており、ハードウェアデータムが存在しない場合は、平均的な成人の親指の幅(~20.0 mm)または手のひらの幅(~85.0 mm)を使用し、全体の幅をマスターFusionユーザーパラメータ(Tray_Width)として公開して、ユーザーがワンクリックで再スケーリングできるようにします。

フェーズ 3: 運動学的および構造的分解(BOM)

Fusion MCPスクリプトを作成する前に、アセンブリを構造化された**コンポーネント部品表(BOM)**に分解します。

  1. 固定コンポーネントと可動コンポーネントの分類:
    • 固定ベース/フレームコンポーネント: 例: Top_Anchor_Tray、Rear_Support_Legs(地面平面 $Z = 0$ まで延長)、Backboard_Pegboard_Panels。
    • 駆動/カプラコンポーネント: 例: Stepped_Trays(ティア2..N)、スライド引き出し、または回転ドア。
    • リンケージ/拘束コンポーネント: 例: Parallel_Link_Bars、Side_Joiner_Clips(分割ペグボード半分を接合するHクリップ)、Pivot_Pins。
    • モジュラーインサート/アクセサリ: 例: Divider_Sub_Trays($1/3$、$1/2$、または $1/1$ 幅で1〜3区画)、Skadis_Hooks。
  2. 運動学法則をパースペクティブピクセルノイズよりも優先させる:
    • 共平面エシュロンマルチピンパラレルグラム則(非オーバーラップ単層バー): リンケージをモデリングする前に、側面直交図/パース図でバーとバーごとのピンの正確な数を数えます。
      • 参照が平行で非オーバーラップの共平面バー(例: エシュロン状に配置された4本の平行バー: バー1 = 2ピンショートバー、バー2 = 3ピンロングバー、バー3 = 3ピンロングバー、バー4 = 2ピンショートバー)を示している場合、リンケージバーがエンドツーエンドでピンを共有し、横方向に重なるレイヤーになっていると決して想定しないでください。
      • $N$段の共平面エシュロンリンケージでは、各トレイ $t \in {0, \dots, N-1}$ は、トレイ奥行に沿って Pin_Station_Pitch $\Delta y_{\text{station}}$ の間隔で配置された水平ピンステーション $s \in {0, 1, 2}$(ステーションA 前面、ステーションB 中央、ステーションC 背面)を持ち、すべてのバーは (トレイ $t$、ステーション $s$) $\longrightarrow$ (トレイ $t+1$、ステーション $s+1$) を単段ホールピッチ $L_{\text{step}} = \sqrt{\Delta y_{\text{station}}^2 + \Delta Z_{\text{collapsed}}^2}$ で接続します。
        • バー1 (2ピン、長さ L_step): (トレイ 0, ステーション B) -> (トレイ 1, ステーション C)
        • バー2 (3ピン、長さ 2*L_step): (トレイ 0, ステーション A) -> (トレイ 1, ステーション B) -> (トレイ 2, ステーション C)
        • バー3 (3ピン、長さ 2*L_step): (トレイ 1, ステーション A) -> (トレイ 2, ステーション B) -> (トレイ 3, ステーション C)
        • バー4 (2ピン、長さ L_step): (トレイ 2, ステーション A) -> (トレイ 3, ステーション B)
      • 垂直からのバー角度 $\theta$ における、トレイ間の移動量: $$\Delta Y_{\text{tray}}(\theta) = -L_{\text{step}}\sin(\theta) - \Delta y_{\text{station}}, \qquad \Delta Z_{\text{tray}}(\theta) = -L_{\text{step}}\cos(\theta)$$
        • 折りたたみ状態($\theta_{\text{col}} = -\arcsin(\Delta y_{\text{station}} / L_{\text{step}})$)では、$\Delta Y_{\text{tray}} = + \Delta y_{\text{station}} - \Delta y_{\text{station}} = 0\text{ mm}$(トレイはバーが $-\theta_{\text{col}}$ にある間100%垂直に積み重なり、トレイ後壁は後部サポート脚の前面にぴったりと接触します)。
        • 展開状態($\theta_{\text{open}} = +\arcsin(\Delta y_{\text{station}} / L_{\text{step}})$)では、まったく同じバーが垂直を通過して $+\theta_{\text{open}}$ までスイングし、各トレイを $\Delta Y_{\text{tray}} = -2 \Delta y_{\text{station}}$ だけ前方にステップさせながら、4本すべてのバーを単一共平面レイヤーに保持し、ピンを共有しません。
  3. プリントベッドモジュラリティルール:
    • 平らなパネル(背の高いSkådisバックボードなど)がターゲットプリンタのベッド高さ(例: > 210 mm)を超える場合は、水平方向に Upper_Panel と Lower_Panel に分割し、対応するサイドHプロファイルジョイナークリップ(0.20 mm スライディングクリアランス)を生成します。
  4. オプションのパースペクティブホモグラフィーデワーピング(--rectify):
    • 角度の付いた平面パターン板や複雑な2Dシルエットの写真の場合、以下を実行します:
      ~/.gemini/antigravity/skills/media-to-fusion/scripts/process_media.py "<image_path>" \
        --out-dir ./media_workspace \
        --rectify "x1,y1,x2,y2,x3,y3,x4,y4" \
        --real-w <width_mm> --real-h <height_mm>
      
    • process_media.py は自動的に4つのコーナーを時計回りに並べ替え(TL, TR, BR, BL)、平面を 0.1 mm/px で rectified_ortho.png にデワープし、rectified_contour.dxf をエクスポートし、media_manifest.json 内に簡略化された閉じたポリゴンループ(points_xy_mm)を保存します。

フェーズ 4: Fusion 360 MCPによるパラメトリックモデリング

execute_api_script を介して、Fusion 360でCADアセンブリをクリーンに構築します。

  1. 必須のセンチメートル変換(cm = mm / 10.0):
    • Fusion 360の内部API(adsk.core.ValueInput.createByReal()、adsk.core.Point3D.create())は、厳密に**センチメートル(cm)**を使用します。
    • すべての execute_api_script の先頭で、必ず def cm(mm_val): return mm_val / 10.0 を定義します。
  2. マスターユーザーパラメータを登録する(design.userParameters): 編集可能なミリメートル/度のパラメータを最初に作成し、ユーザーがいつでもスケール、ティア数、または折りたたみ状態を再設定できるようにします。
    def set_user_param(design, name, expr_str, units="mm", comment=""):
        existing = design.userParameters.itemByName(name)
        if existing:
            existing.expression = expr_str
            return existing
        return design.userParameters.add(
            name, adsk.core.ValueInput.createByString(expr_str), units, comment
        )
    
    折りたたみ式/モジュラーアセンブリに推奨されるパラメータ:
    • Tray_Width、Tray_Depth、Tray_Height、Wall_Thickness(デフォルト 2.4 mm)
    • Link_Step_Pitch、Link_Width、Link_Thickness(デフォルト 3.5 mm)
    • Deploy_Angle_Deg(例: 展開/配備状態では 40 deg、折りたたまれた垂直スタックでは 0 deg)
    • Clearance(デフォルト 0.25 mm)
  3. 3Dプリンティングのメカニカルクリアランス:
    • 回転ピボットピン/リンケージ穴: 0.25 mm のラジアル(0.50 mm の径方向)クリアランス、リンクが保持されるように 0.8 mm のリップまたはM3ファスナーボアを設けます。
    • スライディングジョイナークリップ/取り外し可能な仕切りインサート: 片側 0.20 mm のクリアランス(インサートトレイでは合計 0.40 mm の幅/奥行き差し引き)。
    • ボトムトレイの人間工学とリアサポート脚:
      • 参照メディアで確認できる場合は、最下段のトレイに丸みを帯びた長方形のサイドハンドル切り欠きを含めます。
      • Rear_Support_Legs がトップアンカートレイから地面平面($Z = Z_{\text{bottom_tray_floor}}$)まで達していることを確認し、展開時にアセンブリが水平に立つようにします。

フェーズ 5: クローズドループのビジュアル & 干渉検証

ブラインドスクリプト実行後に結論を出さないでください。ビジュアルと数学的の両方の検証を実行します。

  1. マルチアングルビジュアル比較(get_screenshot):
    • fusion-mcp ツール get_screenshot を以下の設定で呼び出します。
      • view="iso-top-right"、width=1024、height=1024
      • view="right"、width=1024、height=1024(リンケージバーの位置合わせ、階段状の角度、リアレッグの地面接触を検査するために重要!)
      • view="front"、width=1024、height=1024(Skådisスロットグリッドの対称性と仕切りの比率を検査するために重要!)
    • レンダリングされたスクリーンショットを、参照キーフレーム/写真(keyframe_XX_grid.png / annotated_grid.png)と並べて比較します。
  2. 自動タイムライン & 干渉検証: execute_api_script を介して検証パスを実行し、ネイティブソリッドジオメトリをアサートし、コンポーネント間の物理的衝突をチェックします。
    def run(context):
        import adsk.core, adsk.fusion
        app = adsk.core.Application.get()
        design = adsk.fusion.Design.cast(app.activeProduct)
        root = design.rootComponent
    
        assert root.sketches.count > 0, "No native sketches found!"
        assert root.features.extrudeFeatures.count > 0, "No extrude features found!"
        assert root.meshBodies.count == 0, "Forbidden MeshBody objects detected!"
    
        # Collect all visible solid bodies across occurrences and root
        bodies = adsk.core.ObjectCollection.create()
        for b in root.bRepBodies:
            if b.isVisible:
                bodies.add(b)
        for occ in root.allOccurrences:
            for b in occ.bRepBodies:
                if b.isVisible:
                    bodies.add(b)
        
        # Check interference between all bodies
        if bodies.count > 1:
            interference_result = adsk.fusion.Interference.calculateInterference(bodyList)
            if interference_result.count > 0:
                print(f"WARNING: {interference_result.count} interference(s) detected between components!")
                for i in range(interference_result.count):
                    interference = interference_result.item(i)
                    print(f"  - Interference {i+1}: between '{interference.bodyOne.name}' and '{interference.bodyTwo.name}'")
            else:
                print("No interferences detected.")
        print("All checks passed.")
    

フェーズ 6: 最終レポートとクリーンアップ

すべての検証が完了したら、明確なサマリーをユーザーに提供します。

  1. 再構築レポートの生成:

    • 使用したすべてのメディアパス、確立されたスケールデータム、パラメトリックなFusion 360ユーザーパラメータ、コンポーネント構造BOM、検出された干渉(もしあれば)、そして生成された最終的な3Dビューのスクリーンショットを含む、簡潔な再構築サマリーをエージェントがコンパイルする必要があります。
  2. ワークスペースのクリーンアップ:

    • すべての作業ファイルは models/<NN>_<Model_Name>/workspace/ の下に保持されます。これらのファイルは、将来の参照や、異なる構成での再実行のために保存されたままにしておく必要があります。
    • リポジトリルートまたは shared/ ディレクトリに残っている一時ファイルやスクリプトを削除します。
  3. ユーザーへの最終指示

    • ユーザーに次のことを通知します。
      • Deploy_Angle_Deg(展開角度)パラメータを変更することで、機構の折りたたみ状態と展開状態を切り替えることができること。
      • 3Dプリンティングで必要なクリアランス(例: 0.25 mm ラジアルクリアランス)がモデルに適用されていること。
      • モデル内のキーパラメータを編集することで、スケールやトレイの数を簡単に調整できること。
      • models/<NN>_<Model_Name>/workspace/media/ の下に、すべての中間メディア処理ファイルが保存されていること。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル