文字轉 Fusion 360 純參數化 CAD 技能
當使用者以自然語言描述機械物件、零件、修改、配件托盤、緊固件規格、爆炸組合件或運動動畫,但未提供 3D 參考檔案(.3mf/.stl → 使用 3mf-to-fusion)或視覺媒體(.png/.mp4 → 使用 media-to-fusion)時,請遵循此六階段確定性 CAD 工作流程。
嚴格的 CAD 規範:
- 使用 Fusion 360 時間軸中原生的草圖、建構平面、使用者參數和擠出/旋轉/接合特徵重建所有幾何。絕不產生原始網格本體(
root.meshBodies.add)或網格轉換。 - 所有程式碼必須在
execute_api_script內乾淨執行,並使用公分(cm = mm / 10.0)為單位。 - 始終使用
get_screenshot視覺驗證每個產生或修改的本體。
第零階段:預檢探測與工作區對齊
-
驗證即時 Fusion 360 MCP 工作階段: 透過
fusion-mcp工具execute_api_script執行偵測探測:def run(context): import adsk.core, adsk.fusion app = adsk.core.Application.get() if not app or not adsk.fusion.Design.cast(app.activeProduct): raise RuntimeError("未開啟作用中的 Fusion 360 設計文件。") print("FUSION_MCP_READY")快速失敗法則: 如果探測失敗,請停止並指示使用者開啟 Autodesk Fusion 360。
-
工作區與單一儲存庫路由:
- 主要儲存庫:作用中的 CAD 單一儲存庫或專案根目錄(
CAD_MONOREPO_ROOT或目前工作區)。 - 嚴格隔離保證: 絕不在儲存庫根目錄建立暫存檔案、腳本或渲染,也不變更
shared/。 - 如果開始全新模型,請建立專用資料夾:
python3 <path_to_skills>/text-to-fusion/scripts/scaffold_text_model.py "<Model_Name>" - 將模型腳本儲存在
models/<NN>_<Model_Name>/scripts/,視覺渲染儲存在models/<NN>_<Model_Name>/renders/,中間工作檔案儲存在models/<NN>_<Model_Name>/workspace/。 - 從
../../shared/匯入通用 CAD 輔助程式(fusion_client、cad_primitives、hardware_library、scene_animator)。
- 主要儲存庫:作用中的 CAD 單一儲存庫或專案根目錄(
-
領域參考: 在撰寫自訂幾何前,請諮詢本地參考函式庫:
references/prompt-to-geometry-patterns.md— 將自然語言轉譯為參數化草圖約束。references/exploded-view-guidelines.md— 爆炸向量、金色導引桿與正交構圖。references/assembly-animation-pipeline.md— Matrix3D 發生次變換動畫與 GIF 編譯。references/variant-management-and-undo.md— 安全 A/B 變體展示與非破壞性隱藏。
第一階段:歧義消除與參數化規格
當使用者以對話方式描述幾何時,請識別並正式化缺失的工程約束:
- 外框與關鍵尺寸:
- 整體邊界框(寬 × 深 × 高,單位 mm)。
- 最小壁厚(結構件預設
2.0 - 2.5 mm,內部隔板1.6 mm)。 - 3D 列印機床限制(例如
220 × 220 × 250 mm)。
- 註冊主使用者參數(
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 )
第二階段:變體暫存與可逆探索
當使用者要求設計選項(「給我選項 2」、「試試沒有蓋子的版本」)時:
- 展示模式:
- 在專用元件中建立實驗性選項(例如
Sample_Options_Showroom:1)。 - 將變體在虛擬工作區地面上並排間隔(例如 Y = -350 mm 或 X = -200 mm),並使用獨特外觀(
Rack_Desert_Tan、Rack_Matte_White)。 - 擷取附有標籤的並排概覽螢幕截圖。
- 在專用元件中建立實驗性選項(例如
- 非破壞性採用:
- 當使用者選定一個方案時,將選中的本體複製到作用中組合件(
InSitu_Tier3_Option2)。 - 透過
bRepBody.isLightBulbOn = False隱藏被拒絕的展示本體。 - 絕不在可能破壞下游時間軸參考的物件上呼叫
body.deleteMe()。
- 當使用者選定一個方案時,將選中的本體複製到作用中組合件(
第三階段:標準緊固件與硬體 BOM 合成
當使用者要求螺絲、螺母或組裝硬體時:
- 硬體標準化:
- 所有樞軸與結構接合處,預設使用 DIN 7991 M3 埋頭螺絲 和 DIN 934 M3 六角螺母。
- 標準容納槽尺寸:
- 六角螺母容納槽: 對邊距離 (AF) 為
5.70 mm(在5.50 mm螺母上增加+0.20 mmFDM 間隙),深度2.50 mm。 - 螺絲孔: 直徑
3.20 mm通孔,附 90° 錐形埋頭槽(直徑6.20 mm×1.80 mm)。 - 固定墊圈: 3D 列印墊圈(外徑
9.50 mm× 內徑3.20 mm× 厚度1.80 mm,90° 埋頭),夾持樞軸凸緣端部,同時保持連桿可自由旋轉。
- 六角螺母容納槽: 對邊距離 (AF) 為
- 模板停放規則:
- 主硬體模板(
Template_DIN_7991_M3x10、Template_DIN_934_M3)必須設定isLightBulbOn = True。 - 將模板停放於地下深處(Z = -500.0 cm),使組合件中的子實例保持可見,同時模板完全在畫面外。
- 主硬體模板(
第四階段:爆炸圖與技術圖解
當使用者要求說明零件如何組裝時:
- 線性爆炸偏移:
- 將連桿沿主軸向外偏移(+X 方向
35 - 50 mm)。 - 將結構支架或框架沿 Y 軸向後偏移(
+45 - 60 mm)。 - 將模組化插入件沿 Z 軸向上偏移(
+40 - 50 mm)。
- 將連桿沿主軸向外偏移(+X 方向
- 金色對齊導引桿:
- 擠出細圓柱桿(直徑
1.2 - 1.4 mm),外觀為Rack_Mustard_Yellow或Gold - Polished,貫穿每個螺絲/樞軸接合軸線,從最內側螺絲頭到最外側螺母。 - 將所有導引桿歸組到專用元件:
Opened_Explosion_Guides。
- 擠出細圓柱桿(直徑
- 正交相機設定:
設定
cam.cameraType = OrthographicCameraType,並設定目標邊界範圍,以確保平行軸且無透視失真。
第五階段:高速組合件動畫管線
當使用者要求動畫 GIF 顯示零件組合到位時:
- 基於發生次的場景圖骨架綁定:
- 將每個移動組合件歸入其專用
Occurrence(Anim_Bars、Anim_Stand、Anim_Fasteners)。 - 請勿在影格迴圈內使用
features.moveFeatures.add()(每次影格會造成約 2.2 秒的時間軸重建)。 - 直接重新指派
occ.transform = Matrix3D(0.005 秒/影格)。
- 將每個移動組合件歸入其專用
- 多階段交錯平滑步進:
對分階段子組裝區間(t ∈ [0.0, 1.0])套用平滑步進緩動函數 s(τ) = 3τ² - 2τ³:
- 底座對接:t ∈ [0.00, 0.40]
- 連桿就位:t ∈ [0.15, 0.60]
- 固定墊圈就位:t ∈ [0.30, 0.70]
- 緊固件夾緊:t ∈ [0.40, 0.92]
- 導引桿淡出:
guides_occ.isLightBulbOn = (t < 0.88)
- 腳本內批次渲染與乒乓編譯:
- 直接將影格渲染到磁碟:
vp.saveAsImageFile('/tmp/frames/frame_%03d.png', 800, 800)。 - 使用
PIL.Image編譯:28 個前向影格 (45ms) → 28 個保持影格組裝 (50ms) → 26 個反向影格 (45ms) → 20 個保持影格爆炸 (50ms)。 - 使用 128 色自適應調色板與 Floyd-Steinberg 抖色進行量化(約 2.3 MB)。
- 使用唯一/版本化檔名(例如
_final.gif)以避免瀏覽器聊天圖片快取。
- 直接將影格渲染到磁碟:
第六階段:數學自我驗證與開發大腦同步
- 數學驗證配合邊界:
- 如果零件出現意外間隙(「看起來落後了」),請檢查世界座標:
delta = target_face.x - moving_face.x。 - 套用精確的數學差值;絕不猜測調整。
- 如果零件出現意外間隙(「看起來落後了」),請檢查世界座標:
- 執行總結與記憶同步:
- 將範圍內的變更提交到作用中 CAD 儲存庫。
- 如果破解了新的機制、公差規則或 API 問題,請記錄在
references/中,並在CHANGELOG.md中記錄變更。