Skill: Medien (Bild/Video/Referenzpaket) zu Fusion 360 Rekonstruktion
Wenn der Benutzer ein Foto, einen Multi-Winkel-Referenzordner oder ein Video (.mp4, .mov, .png, .jpg, .webp) bereitstellt und darum bittet, das Objekt in Autodesk Fusion 360 nachzubilden, folge diesem 6-Phasen deterministischen Ingenieur-Workflow.
STRENGES CAD-MANDAT:
- Springe niemals direkt zum Schreiben von Fusion MCP Extrusionen, ohne vorher
process_media.pyausgeführt, einen realen Millimeter-Maßstab etabliert und eine kinematische Stückliste (BOM) erstellt zu haben. - Jede Komponente muss mit nativen Skizzen, Konstruktionsebenen, Skizzenlinien/Bögen/Kreisen, Benutzerparametern und Extrudieren/Verrunden/Verbinden-Features in der Fusion 360 Timeline rekonstruiert werden. Erzeuge niemals rohe Mesh-Körper (
root.meshBodies.add).
Phase 0: Pre-Flight Sicherheitsgate & Monorepo-Umgebung (Obligatorisch)
Bevor CAD-Geometrie in Fusion 360 erstellt wird, richte den Arbeitsbereich ein und überprüfe die Live-MCP-Konnektivität:
-
CAD Monorepo-Ausrichtung:
- Primärer Arbeitsbereich: Aktives CAD-Monorepo oder Projektstamm (z. B.
CAD_MONOREPO_ROOToder aktueller Arbeitsbereich). - Strikte Isolationsgarantie: Erstelle niemals temporäre Dateien, Skripte oder Renderings im Repository-Stammverzeichnis und mutiere
shared/nicht. - Speichere neue Modelle unter
models/<NN>_<Modellname>/(z. B.models/02_Modularer_Schreibtischorganizer/). Wenn ein neues Modell begonnen wird, verwendescaffold_text_model.py "<Modellname>". - Importiere universelle CAD-Hilfsmittel aus
shared/(fusion_client,cad_primitives,hardware_library,scene_animator). - Lese Domänenreferenzspeicher, bevor Skripte geschrieben werden:
references/kinematic-archetypes.md(verifizierte Mechanikgleichungen)references/fdm-hardware-tolerances.md(Drucktoleranzen & Befestigungssenkungen)references/fusion-api-gotchas.md(Hochgeschwindigkeitsanimation & API-Fixes)
- Primärer Arbeitsbereich: Aktives CAD-Monorepo oder Projektstamm (z. B.
-
Canary Probe: Rufe das
fusion-mcp-Toolexecute_api_scriptauf mit:def run(context): import adsk.core, adsk.fusion app = adsk.core.Application.get() if not app: raise RuntimeError("Instanz der Autodesk Fusion 360 Anwendung nicht gefunden.") design = adsk.fusion.Design.cast(app.activeProduct) if not design: raise RuntimeError("Kein aktives Fusion 360 Konstruktionsdokument geöffnet.") print("FUSION_MCP_READY") -
Fail-Fast-Regel:
- Du kannst Phase 1–3 (Medien-Metrologie) ausführen, während Fusion 360 geschlossen ist, aber wenn
FUSION_MCP_READYvor Phase 4 fehlschlägt, STOPPE vor dem Senden von CAD-Bauskripten und weise den Benutzer an, Fusion 360 mit einem aktiven Konstruktionsdokument zu öffnen.
- Du kannst Phase 1–3 (Medien-Metrologie) ausführen, während Fusion 360 geschlossen ist, aber wenn
Phase 1: Medienaufnahme & Keyframe-/Konturextraktion
[!IMPORTANT] Workspace-Isolationsregel: Gib Medienverarbeitungsdateien niemals in das Haupt-Repository-Stammverzeichnis aus (z. B. ist
./media_workspaceverboten). Stelle immer sicher, dass ein dedizierter Modellordner untermodels/<NN>_<Modellname>/existiert, und leite die gesamte Medienverarbeitung inmodels/<NN>_<Modellname>/workspace/mediaum.
- Führe die Vorverarbeitungs- und Metrologie-Engine auf dem Eingabebild, -video oder -verzeichnis im isolierten Workspace des Modells aus:
python3 <pfad_zu_skills>/media-to-fusion/scripts/process_media.py "<eingabe_media_oder_ordnerpfad>" --out-dir models/<NN>_<Modellname>/workspace/media - Untersuche
models/<NN>_<Modellname>/workspace/media/media_manifest.jsonund betrachte die generierten visuellen Artefakte mitread_file:- Für Referenzordner: Betrachte zuerst
dataset_overview.png, dann inspiziere einzelne Unterarbeitsbereiche (models/<NN>_<Modellname>/workspace/media/<slug>/). - Für Videos: Betrachte
contact_sheet.pngund einzelnekeyframe_XX_grid.pngDateien (automatisch gefiltert, um schwarze Einblendungen, Bewegungsunschärfe und Handverwischungen zu verwerfen, während kollabierte, mittlere und ausgefahrene kinematische Zustände erfasst werden). - Für Bilder: Betrachte
annotated_grid.png(Dual-Kontrast 100px Haupt-/50px Neben-Pixel-Linealraster) undcontours_preview.png(erkannte Canny-Konturen + Schlitze/Loch-Zentroide und mittlere Pixel-Pitch in derselben Zeile). - Split-Screen-Prüfung: Überprüfe
viewport_layout.is_splitinmedia_manifest.json(z. B. nebeneinanderliegende Front- und Rechts-orthografische Ansichten in einem einzelnen Bild), damit Pixelabstände innerhalb jedes Unter-Viewports unabhängig gemessen werden.
- Für Referenzordner: Betrachte zuerst
Phase 2: Mehrstufige Skalenkalibrierung (Finden des "Goldenen Datums")
Bevor mit dem Modellieren begonnen wird, etabliere den realen Millimeter-Maßstab (mm_per_px) mit dieser strengen Prioritätshierarchie:
- Priorität 1 — Explizite Bemaßungshinweise oder Bauplatteneinschränkungen im Medium:
- Überprüfe Referenzbilder auf Bemaßungspfeile (z. B. Gesamtbreite
35 cm / 350 mm, Höhe63 cm / 630 mm, Tiefe32 cm / 320 mm, oder innenliegende Einsatzwanne-Bemaßungen wie330 x 100 x 70 mm). - Überprüfe auf 3D-Drucker-Bauplattenhinweise (z. B.
"FÜR 220 x 220 mm DRUCKER"$\rightarrow$ maximale Einzelteilbreite/-länge ist typischerweise200–210 mm).
- Überprüfe Referenzbilder auf Bemaßungspfeile (z. B. Gesamtbreite
- Priorität 2 — Im Bild sichtbare Standard-Ökosystem- und Hardware-Merkmale:
- IKEA Skådis Lochmuster:
- Horizontaler Mittenabstand der Schlitze in derselben Reihe:
40.0 mm - Vertikaler Reihenabstand:
20.0 mm(alternierende Reihen horizontal um20.0 mmversetzt) - Schlitzabmessungen:
5.0 mmbreit $\times$15.0 mmhoch (Stadion-/Langloch:10.0 mmgerader vertikaler Mittenabstand mitR = 2.5 mmvollrunden Enden) - Standardplattenstärke:
5.0 mm(3.2 mm – 4.0 mmbei 3D-gedruckten modularen Lochplatten-Panels)
- Horizontaler Mittenabstand der Schlitze in derselben Reihe:
- Elektronik & Mechanische Hardware:
- Mechanischer Tastatur MX-Schalterausschnitt:
14.0 x 14.0 mm(1u Tastenabstand =19.05 mm) - Standard-Smartphone-Breite (z. B. wenn auf einem Ständer liegend):
~71.5 mm - USB-C Buchsenöffnung:
8.94 x 3.26 mm - Verbindungselemente: M3 Zylinderkopf-Durchmesser =
5.5 mm(Durchgangsloch =3.2–3.4 mm), M4 Kopf =7.0 mm
- Mechanischer Tastatur MX-Schalterausschnitt:
- IKEA Skådis Lochmuster:
- Priorität 3 — Ergonomische / Handreferenz:
- Wenn menschliche Hände das Teil halten und kein Hardware-Datum existiert, verwende die durchschnittliche Daumenbreite eines Erwachsenen (
~20.0 mm) oder Handbreite (~85.0 mm) und lege die Gesamtbreite als einen Master-Fusion-Benutzerparameter (Tray_Width) offen, damit der Benutzer mit einem Klick neu skalieren kann.
- Wenn menschliche Hände das Teil halten und kein Hardware-Datum existiert, verwende die durchschnittliche Daumenbreite eines Erwachsenen (
Phase 3: Kinematische & Strukturelle Zerlegung (BOM)
Zerlege die Baugruppe in eine strukturierte Komponenten-Stückliste (BOM), bevor ein Fusion MCP Skript geschrieben wird:
- Klassifiziere fixe vs. bewegliche Komponenten:
- Feste Basis-/Rahmenkomponenten: z. B.
Top_Anchor_Tray,Rear_Support_Legs(reichen bis zur Bodenebene $Z = 0$ hinunter) undBackboard_Pegboard_Panels. - Angetriebene / Koppelkomponenten: z. B.
Stepped_Trays(Stufe 2..N), Schubladen oder Drehtüren. - Gelenk-/Verbindungskomponenten: z. B.
Parallel_Link_Bars,Side_Joiner_Clips(H-Clips zum Verbinden geteilter Lochplattenhälften),Pivot_Pins. - Modulare Einsätze / Zubehör: z. B.
Divider_Sub_Trays($1/3$, $1/2$ oder $1/1$ Breite mit 1–3 Fächern),Skadis_Hooks.
- Feste Basis-/Rahmenkomponenten: z. B.
- Erzwinge kinematische Gesetze gegenüber perspektivischem Pixelrauschen:
- Koplanares Echelon-Multi-Pin-Parallelogramm-Gesetz (nicht-überlappende Einzelschicht-Stangen):
Zähle vor dem Modellieren eines Gelenks die exakte Anzahl der Stangen und Stifte pro Stange in den seitlichen orthografischen/perspektivischen Ansichten:
- Gehe niemals davon aus, dass Gelenkstangen Stifte Ende-zu-Ende in überlappenden seitlichen Schichten teilen, wenn die Referenz parallele, nicht-überlappende koplanare Stangen zeigt (z. B. 4 parallele Stangen, angeordnet in einem Echelon:
Stange 1= 2-Stift kurze Stange,Stange 2= 3-Stift lange Stange,Stange 3= 3-Stift lange Stange,Stange 4= 2-Stift kurze Stange). - In einem $N$-stufigen koplanaren Echelon-Gelenk hat jede Stufe $t \in {0, \dots, N-1}$ horizontale Stiftstationen $s \in {0, 1, 2}$ im Abstand von
Pin_Station_Pitch$\Delta y_{\text{station}}$ entlang der Stufentiefe (Station Avorne,Station Bmitte,Station Chinten), und jede Stange verbindet (Stufe $t$, Station $s$) $\longrightarrow$ (Stufe $t+1$, Station $s+1$) mit einem einstufigen Lochabstand $L_{\text{step}} = \sqrt{\Delta y_{\text{station}}^2 + \Delta Z_{\text{collapsed}}^2}$:Stange 1 (2-Stift, Länge L_step):(Stufe 0, Station B) -> (Stufe 1, Station C)Stange 2 (3-Stift, Länge 2*L_step):(Stufe 0, Station A) -> (Stufe 1, Station B) -> (Stufe 2, Station C)Stange 3 (3-Stift, Länge 2*L_step):(Stufe 1, Station A) -> (Stufe 2, Station B) -> (Stufe 3, Station C)Stange 4 (2-Stift, Länge L_step):(Stufe 2, Station A) -> (Stufe 3, Station B)- Bei einem Stangenwinkel $\theta$ zur Vertikalen beträgt die Stufe-zu-Stufe-Translation: $$\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)$$
- Im kollabierten Zustand ($\theta_{\text{col}} = -\arcsin(\Delta y_{\text{station}} / L_{\text{step}})$) ist $\Delta Y_{\text{tray}} = + \Delta y_{\text{station}} - \Delta y_{\text{station}} = 0\text{ mm}$ (Stufen stapeln sich 100% vertikal, während die Stangen bei $-\theta_{\text{col}}$ sitzen und die Rückwände der Stufen bündig an der Vorderseite der hinteren Stützbeine anliegen).
- Im offenen Zustand ($\theta_{\text{open}} = +\arcsin(\Delta y_{\text{station}} / L_{\text{step}})$) schwingen die exakt gleichen Stangen durch die Vertikale bis $+\theta_{\text{open}}$ und verschieben jede Stufe um $\Delta Y_{\text{tray}} = -2 \Delta y_{\text{station}}$ nach vorne, während alle 4 Stangen in einer einzigen koplanaren Schicht mit null gemeinsamen Stiften bleiben!
- Gehe niemals davon aus, dass Gelenkstangen Stifte Ende-zu-Ende in überlappenden seitlichen Schichten teilen, wenn die Referenz parallele, nicht-überlappende koplanare Stangen zeigt (z. B. 4 parallele Stangen, angeordnet in einem Echelon:
- Koplanares Echelon-Multi-Pin-Parallelogramm-Gesetz (nicht-überlappende Einzelschicht-Stangen):
Zähle vor dem Modellieren eines Gelenks die exakte Anzahl der Stangen und Stifte pro Stange in den seitlichen orthografischen/perspektivischen Ansichten:
- Druckbett-Modularitätsregel:
- Wenn eine flache Platte (wie eine hohe Skådis Rückwand) die Ziel-Druckbetthöhe überschreitet (z. B.
> 210 mm), teile sie horizontal inUpper_PanelundLower_Panelund erzeuge passende seitliche H-Profil-Verbinderclips (0.20 mmGleitspiel).
- Wenn eine flache Platte (wie eine hohe Skådis Rückwand) die Ziel-Druckbetthöhe überschreitet (z. B.
- Optionale perspektivische Homographie-Entzerrung (
--rectify):- Für schräg aufgenommene Fotos von flachen gemusterten Platten oder komplexen 2D-Silhouetten führe aus:
~/.gemini/antigravity/skills/media-to-fusion/scripts/process_media.py "<bildpfad>" \ --out-dir ./media_workspace \ --rectify "x1,y1,x2,y2,x3,y3,x4,y4" \ --real-w <breite_mm> --real-h <hoehe_mm> process_media.pysortiert automatisch die 4 Ecken im Uhrzeigersinn (TL, TR, BR, BL), entzerrt die Ebene zurectified_ortho.pngbei0.1 mm/px, exportiertrectified_contour.dxfund speichert vereinfachte geschlossene Polygon-Loops (points_xy_mm) innerhalb vonmedia_manifest.json.
- Für schräg aufgenommene Fotos von flachen gemusterten Platten oder komplexen 2D-Silhouetten führe aus:
Phase 4: Parametrische Modellierung über Fusion 360 MCP
Erstelle die CAD-Baugruppe sauber in Fusion 360 über execute_api_script:
- Obligatorische Zentimeter-Konvertierung (
cm = mm / 10.0):- Die interne API von Fusion 360 (
adsk.core.ValueInput.createByReal(),adsk.core.Point3D.create()) verwendet strikt Zentimeter (cm). - Definiere immer
def cm(mm_val): return mm_val / 10.0am Anfang jedesexecute_api_script.
- Die interne API von Fusion 360 (
- Registriere Master-Benutzerparameter (
design.userParameters): Erstelle zuerst bearbeitbare Millimeter-/Grad-Parameter, damit der Benutzer jederzeit Skalierung, Stufenanzahl oder Klappzustand neu konfigurieren kann:Empfohlene Parameter für faltbare/modulare Baugruppen: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(Standard2.4 mm)Link_Step_Pitch,Link_Width,Link_Thickness(Standard3.5 mm)Deploy_Angle_Deg(z. B.40 degfür offenen/entfalteten Zustand,0 degfür kollabierten vertikalen Stapel)Clearance(Standard0.25 mm)
- Mechanische Toleranzen für den 3D-Druck:
- Drehstifte / Gelenklöcher:
0.25 mmradiales (0.50 mmdiametrales) Spiel, mit einer0.8 mmLippe oder M3-Befestigungsbohrung, damit die Gelenke gesichert bleiben. - Gleitende Verbinderclips / herausnehmbare Unterteilungseinsätze:
0.20 mmSpiel pro Seite (0.40 mmGesamtbreiten-/Tiefenabzug auf Einsatzwannen). - Bodenwanne-Ergonomie & Hintere Stützbeine:
- Füge abgerundete längliche seitliche Griffausschnitte an der untersten Wanne hinzu, wenn im Referenzmedium sichtbar.
- Stelle sicher, dass
Rear_Support_Legsvon der oberen Ankerwanne bis zur Bodenebene ($Z = Z_{\text{unterste_wanne_boden}}$) reichen, damit die Baugruppe im entfalteten Zustand eben steht.
- Drehstifte / Gelenklöcher:
Phase 5: Geschlossene visuelle & Interferenz-Überprüfung
Höre niemals nach einer blinden Skriptausführung auf. Führe sowohl eine visuelle als auch eine mathematische Überprüfung durch:
- Multi-Winkel-Visualvergleich (
get_screenshot):- Rufe das
fusion-mcp-Toolget_screenshotauf mit:view="iso-top-right", width=1024, height=1024view="right", width=1024, height=1024(entscheidend für die Inspektion der Gelenkstangenausrichtung, des Treppenwinkels und des Bodenkontakts der hinteren Beine!)view="front", width=1024, height=1024(entscheidend für die Inspektion der Skådis-Schlitzgittersymmetrie und der Teilerproportionen!)
- Vergleiche die gerenderten Screenshots nebeneinander mit den Referenz-Keyframes/Fotos (
keyframe_XX_grid.png/annotated_grid.png).
- Rufe das
- Automatisierte Timeline- & Interferenz-Überprüfung:
Führe einen Verifikationsdurchlauf über
execute_api_scriptaus, um native Festkörpergeometrie zu bestätigen und auf physische Kollisionen zwischen Komponenten zu prüfen: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, "Keine nativen Skizzen gefunden!" assert root.features.extrudeFeatures.count > 0, "Keine Extrusions-Features gefunden!" assert root.meshBodies.count == 0, "Verbotene MeshBody-Objekte erkannt!" # Sammle alle sichtbaren Festkörper über Vorkommen und Stamm hinweg 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) # Führe Kollisionserkennung durch collisions = design.findCollisions(bodies) print(f"Gefundene Kollisionen: {len(collisions)}") - Reparatur-Schleifen-Toleranz:
Bei erkannten Inkonsistenzen korrigiere das MCP-Skript und führe die
execute_api_script-Phase erneut aus, bis die Konturen visuell übereinstimmen und die Kollisionserkennung 0 Kollisionen meldet.
Phase 6: Export & Workflow-Abschluss
- Export nach STEP / STL / 3MF:
def run(context): import adsk.core, adsk.fusion app = adsk.core.Application.get() design = adsk.fusion.Design.cast(app.activeProduct) exportMgr = design.exportManager # STEP Export stepOptions = exportMgr.createSTEPExportOptions(outputPath("model.step")) exportMgr.execute(stepOptions) # STL Export (für 3D-Druck) stlOptions = exportMgr.createSTLExportOptions(outputPath("model.stl")) # Optionen setzen... exportMgr.execute(stlOptions) - Zusammenfassung & Übergabe:
Halte dem Benutzer eine Erfolgszusammenfassung bereit:
- Modellspeicherort & Exportdateien
- Die wichtigsten Benutzerparameter (
Tray_Width,Deploy_Angle_Degusw.) - Erkannte Einschränkungen (z. B. fehlende detaillierte Innenansichten, geschätzte Dicken)
- Ermutige den Benutzer, Federzinken, Käfigmuttern oder Löcher für die Kabelverwaltung hinzuzufügen, falls relevant.