Community程式設計與開發github.com

3mf-to-fusion

針對 3MF 和 STL 檔案的高階 CAD 逆向工程引擎。能對原始網格進行切片、解析與數學檢測(橫截面、真實外接圓半徑、扁圓槽、六角凹槽、車削輪廓與陣列),並透過 Fusion 360 MCP 伺服器在 Autodesk Fusion 360 中合成 100% 原生、可編輯的參數化實體本體。

3mf-to-fusion 是什麼?

此技能提供一套決定性的分析流程,用於將 3MF 或 STL 網格檔案逆向工程為 Autodesk Fusion 360 中完全參數化、可編輯的實體模型。它嚴格禁止使用 Fusion 360 內建的「將網格轉換為實體」功能,因為該功能會產生數以萬計的平面三角面,導致視埠凍結、破壞下游 CAM/工程圖,並喪失所有參數化設計意圖。 技能首先透過一套計量引擎對網格進行「切片、解析與分類」,將其歸類為稜柱/階梯式 CAD、車削/軸對稱、多層外殼/薄殼,或有機自由造型等類型,並提取幾何基元(如外接圓、扁圓槽、六角凹槽)與陣列模式。接著使用 Fusion 360 MCP 伺服器的 `execute_api_script` 工具,根據分析結果在 Fusion 360 中依序建立原生參數化特徵:草圖、擠出、旋轉、挖槽,以及矩形/環形陣列。 整個過程完全在 Fusion 360 的參數化時間軸上進行,並使用使用者自訂參數(如 `{part_name}_width`),確保後續可完全編輯。技能還包含安全檢查機制,例如在處理檔案前先確認 Fusion 360 與 MCP 伺服器是否正常連線;若連線失敗則立即中止。最終會進行時間軸健康檢查與視覺比對,確保模型乾淨且無網格殘留。此技能特別適合需要將掃描或下載的網格檔案轉換為可用於製造與修改的參數化 CAD 模型的工程師。 支援平台: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 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

3MF / STL 至 Fusion 360 分析式逆向工程技能

當要求在 Autodesk Fusion 360 中複製、逆向工程或重建 .3mf 或 .stl 檔案時,請遵循此決定性的分析管線。

CAD 逆向工程命令

[!IMPORTANT] 嚴格禁止:絕不可使用 Fusion 360 內建的「將網格轉換為實體」(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 應用程式實例。")
        design = adsk.fusion.Design.cast(app.activeProduct)
        if not design:
            raise RuntimeError("未開啟任何有效的 Fusion 360 設計文件。")
        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\text{ 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\text{ mm}$。
  3. 槽孔 / 扁圓槽辨識:
    • 當迴圈包含兩條平行直線與兩個半圓端時,應將其建模為種子槽孔(sketchLines + sketchArcs),而非多段多邊形。
  4. 陣列辨識(網格 / 極座標):
    • 當 manifest.json["patterns"] 偵測到規則間距 ($\Delta X, \Delta Y$) 時,請建模一個主要種子挖槽,並使用 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", "基底寬度")
params.add(f"{part_name}_length", mm(length_mm), "mm", "基底長度")
params.add(f"{part_name}_height", mm(height_mm), "mm", "基底高度")

步驟 2:主要實體幾何

  • 若為類型 T(車削):在 comp.xZConstructionPlane 上繪製半輪廓,並呼叫 comp.features.revolveFeatures.add(prof, comp.zConstructionAxis, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)。
  • 若為類型 A/B(稜柱):在 comp.xYConstructionPlane 上繪製基底輪廓(以原點為中心),並擠出實體基底。

步驟 3:次要挖槽與陣列

  • 繪製主要種子挖槽(槽孔、魚眼孔或凹槽)。
  • 使用 adsk.fusion.FeatureOperations.CutFeatureOperation 套用 comp.features.extrudeFeatures.add。
  • 沿 comp.xConstructionAxis 與 comp.yConstructionAxis 套用 comp.features.rectangularPatternFeatures.add。

步驟 4:收尾

  • 套用角落圓角(comp.features.filletFeatures)與倒角(comp.features.chamferFeatures)。

階段 4:參考重疊顯示與 CAD 內檢查

為在不汙染最終模型的情況下驗證數學與尺寸對齊:

  1. 參考網格重疊(選擇性): 若需要詳細的視覺對齊,請將原始網格匯入單獨的暫存參考出現事件:
    # 匯入網格作為參考背景
    ref_occ = root.occurrences.addNewComponent(transform)
    ref_occ.component.name = "Reference_Mesh_Ghost"
    # 設定透明視覺樣式
    
  2. 視覺與干涉檢查:
    • 確認參數化實體完全包覆並對齊網格範圍。
    • 驗證完成後,隱藏或移除 ref_occ。

階段 5:時間軸健康狀態與視覺自我驗證閘門

  1. 時間軸特徵驗證: 確保重建的零件中不存在網格本體:
    assert comp.bRepBodies.count > 0, "未產生任何實體本體!"
    assert comp.meshBodies.count == 0, "在元件中偵測到禁止的 MeshBody!"
    assert comp.sketches.count > 0, "在時間軸中找不到草圖!"
    
  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.

相關技能