Communityコーディング&開発github.com

3mf-to-fusion

高度なCADリバースエンジニアリングエンジン。3MF/STLメッシュを数学的に解析(断面、真外接円半径、オブロングスロット、六角ポケット、旋盤加工形状、パターン配列)し、Autodesk Fusion 360上で100%ネイティブで編集可能なパラメトリックBRepソリッドボディを合成します。

3mf-to-fusion とは?

このスキルは、3MFまたはSTLファイルをFusion 360の完全なパラメトリックソリッドに変換するための、分析ベースのリバースエンジニアリングパイプラインです。Fusion 360の組み込みメッシュ変換機能(「メッシュをBRepに変換」)を使用すると、多数の三角形平面が生成され、ビューポートが重くなり、フィレットや面取りができなくなるため、禁止されています。代わりに、このスキルは数学的にメッシュをスライス&ダイスして断面を抽出し、幾何学的プリミティブ(穴、スロット、六角ポケットなど)とパターンを認識します。認識された形状をもとに、スケッチ、押し出し、回転、パターンなどのネイティブなFusion 360フィーチャを使用して、完全にパラメトリックなソリッドボディを構築します。結果として得られるモデルは、完全に編集可能で、タイムライン履歴を持ち、製造図面やCAMで使用できるクリーンなBRepデータとなります。このスキルは、Autodesk Fusion 360とFusion 360 MCPサーバー上で動作するように設計されています。

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

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

ドキュメント

3MF / STL → Fusion 360 分析逆工学スキル

.3mf または .stl ファイルをAutodesk Fusion 360にコピー、逆工学、または再作成するよう指示された場合は、次の決定論的分析パイプラインに従ってください。

CAD逆工学の必須要件

[!IMPORTANT] 厳禁: Fusion 360の組み込み「メッシュをBRepに変換」機能(MeshToBREP または bRepBodies.addByMesh)を決して使用しないでください。

メッシュ面を直接BRepに変換すると、何万もの三角形平面が生成され、ビューポートがフリーズし、フィレットや面取りができなくなり、下流のCAMや図面が破壊され、パラメトリック設計の意図がすべて失われます。

必須: メッシュを数学的に分析(「スライス&ダイス」)し、その2D断面と幾何学的プリミティブ(スロット、外接穴、ザグリ穴、旋盤加工形状、長方形パターン)を抽出し、Fusion 360のタイムライン上で、スケッチ、駆動ユーザーパラメータ、押し出し、回転、パターンフィーチャを使用して、100%ネイティブなパラメトリックソリッドボディを構築します。


フェーズ0: 事前セーフティゲート(必須)

ファイルを処理する前に、Autodesk Fusion 360とそのMCPサーバーが動作していることを確認します。

  1. カナリアプローブ: 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")
    
  2. フェイルファスト中断ルール:

    • 呼び出しが失敗またはタイムアウトした場合は、直ちに停止します。
    • 抽出スクリプトやCADコマンドを実行しないでください。
    • ユーザーにFusion 360を開き、アドインが起動していること、およびアクティブなドキュメントが開いていることを確認するよう指示します。

フェーズ1: スライス、ダイス、分類(測定エンジン)

[!IMPORTANT] ワークスペース隔離ルール: 抽出ファイルをメインリポジトリルート(例: ./extracted_cad)に出力してはいけません。必ず models/<NN>_<Model_Name>/ の下に専用のモデルフォルダが存在することを確認し(新しい場合は scaffold_text_model.py "<Model_Name>" でスキャフォールド)、スライス/ダイス出力はすべて models/<NN>_<Model_Name>/workspace/extracted_cad にルーティングします。

  1. モデルの隔離されたワークスペースに対して深層計測エンジンを実行します。

    python3 <path_to_skills>/3mf-to-fusion/scripts/inspect_3mf.py <path_to_file.3mf_or_stl> --out-dir models/<NN>_<Model_Name>/workspace/extracted_cad
    
  2. models/<NN>_<Model_Name>/workspace/extracted_cad/manifest.json を読み込みます。

  3. 各パーツの archetype と検出されたフィーチャを確認します。

    • タイプA: プリズム/段付きCAD: 平面ベース押し出し + ポケットカット + 穴配列。
    • タイプT: 旋盤加工/軸対称: Z軸に沿った共線円形スライス。単一の半断面スケッチ + 360° RevolveFeature を使用してモデリングします。
    • タイプB: 多段エンクロージャ/シェル: 段付き構築平面 + 薄肉押し出し + シェル。
    • タイプC: 有機的自由形状彫刻: 高い非平面曲率(15段階超)。直ちにユーザーに警告します。

      "このパーツは、不連続な平面もプリズムスケッチも持たない連続的な有機彫刻です。平面スケッチを使用して再構築すると、滑らかな有機的形状ではなく、階段状の近似が生成されます。"

  4. ユーザーに要約表を提示します。

    パーツIDアーキタイプバウンディングボックス ($X \times Y \times Z$ mm)段階数検出された主要プリミティブ/パターン

フェーズ2: 測定の数学とルール

  1. 単位変換 (cm = mm / 10.0):
    • Fusion 360の内部データベース (adsk.core.ValueInput.createByReal()) はセンチメートル (cm) を厳格に使用します。
    • すべてのスクリプトの先頭で定義します。
      def mm(val): return adsk.core.ValueInput.createByReal(float(val) / 10.0)
      
  2. 外接円補正(コード誤差):
    • STLテッセレーションは、円形の穴を内接多角形で近似し、そのエッジが弦に沿って内側に切れ込みます。
    • 内部最小直径を決して使用しないでください。常に manifest.json["primitives"]["circles"] の radius_mm(95パーセンタイル外接半径)を、最も近い $0.05$ mm に丸めて使用します。
  3. スロット/オブロング認識:
    • ループに2本の平行な直線と2つの半円端がある場合、複数セグメントのポリゴンではなく、シードスロット(sketchLines + sketchArcs)としてモデリングします。
  4. パターン認識(グリッド/極):
    • manifest.json["patterns"] が規則的なピッチ ($\Delta X, \Delta Y$) を検出した場合、1つのマスターシードカットアウトをモデリングし、comp.features.rectangularPatternFeatures を使用して複製します。同一の形状を手動で繰り返し描かないでください。

フェーズ3: 純粋パラメトリックFusion 360再構築

execute_api_script を介してCAD生成を実行します。クリーンなタイムラインフィーチャを使用して各パーツを再構築します。

ステップ1: オカレンスとユーザーパラメータ

transform = adsk.core.Matrix3D.create()
occ = root.occurrences.addNewComponent(transform)
comp = occ.component
comp.name = part_name

# 駆動パラメータを追加
params = design.userParameters
params.add(f"{part_name}_width", mm(width_mm), "mm", "Base width")
params.add(f"{part_name}_length", mm(length_mm), "mm", "Base length")
params.add(f"{part_name}_height", mm(height_mm), "mm", "Base height")

ステップ2: プライマリソリッド形状

  • タイプT(旋盤加工)の場合: comp.xZConstructionPlane 上に半断面スケッチを描き、comp.features.revolveFeatures.add(prof, comp.zConstructionAxis, adsk.fusion.FeatureOperations.NewBodyFeatureOperation) を呼び出します。
  • タイプA/B(プリズム)の場合: comp.xYConstructionPlane 上にベースアウトラインスケッチを描き(原点中心)、ベースソリッドを押し出します。

ステップ3: 二次カットアウトとパターン

  • マスターシードカットアウト(スロット、ザグリ穴、ポケット)を描きます。
  • comp.features.extrudeFeatures.add を adsk.fusion.FeatureOperations.CutFeatureOperation と共に適用します。
  • comp.features.rectangularPatternFeatures.add を comp.xConstructionAxis と comp.yConstructionAxis にわたって適用します。

ステップ4: 仕上げ

  • コーナーフィレット (comp.features.filletFeatures) と面取り (comp.features.chamferFeatures) を適用します。

フェーズ4: リファレンスゴーストオーバーレイとCAD内検査

最終モデルを汚染せずに数学的および寸法的一致を検証するには:

  1. ゴーストリファレンスメッシュ(オプション): 詳細な視覚的アライメントが必要な場合は、生メッシュを一時的なリファレンスオカレンスにインポートします。
    # Import mesh as reference backdrop
    ref_occ = root.occurrences.addNewComponent(transform)
    ref_occ.component.name = "Reference_Mesh_Ghost"
    # Set transparent visual style
    
  2. 視覚および干渉検査:
    • パラメトリックソリッドがメッシュエンベロープを完全に包含し、位置合わせされていることを確認します。
    • 確認後、ref_occ を非表示にするか削除します。

フェーズ5: タイムラインヘルスと視覚的自己検証ゲート

  1. タイムラインフィーチャ検証: 再構築されたパーツにメッシュボディが存在しないことを確認します。
    assert comp.bRepBodies.count > 0, "No solid bodies produced!"
    assert comp.meshBodies.count == 0, "Forbidden MeshBody detected in component!"
    assert comp.sketches.count > 0, "No sketches found in timeline!"
    
  2. 視覚検査: get_screenshot(view="iso-top-right", width=1024, height=1024) を呼び出して、クリーンなパラメトリックソリッドモデルとクリーンなタイムラインツリーを視覚的に確認します。

Individual skills in this repo

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

関連スキル