Compétence CAO Paramétrique Pure Texte vers Fusion 360
Lorsque l'utilisateur décrit un objet mécanique, une pièce, une modification, un plateau accessoire, une spécification de fixation, un assemblage éclaté ou une animation cinématique en langage naturel sans fournir de fichiers 3D de référence (.3mf/.stl $
ightarrow$ utiliser 3mf-to-fusion) ou de support visuel (.png/.mp4 $
ightarrow$ utiliser media-to-fusion), suivez ce flux de travail CAO déterministe en 6 phases.
MANDAT CAO STRICT :
- Reconstruisez toute la géométrie à l'aide d'esquisses natives, de plans de construction, de paramètres utilisateur et de fonctionnalités Extrusion/Révolution/Articulation dans la chronologie de Fusion 360. Ne générez jamais de corps maillés bruts (
root.meshBodies.add) ou de conversions de maillage facetté. - Tout le code doit s'exécuter proprement à l'intérieur de
execute_api_scripten utilisant des centimètres (cm = mm / 10.0). - Vérifiez toujours visuellement chaque corps généré ou modifié à l'aide de
get_screenshot.
Phase 0 : Sonde Pré-Vol & Alignement de l'Espace de Travail
-
Vérifier la Session Active Fusion 360 MCP : Exécutez la sonde canari via l'outil
fusion-mcpexecute_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("Aucun document de conception Fusion 360 actif ouvert.") print("FUSION_MCP_READY")Règle d'Échec Rapide : Si la sonde échoue, arrêtez-vous et demandez à l'utilisateur d'ouvrir Autodesk Fusion 360.
-
Espace de Travail & Routage Monorepo :
- Dépôt principal : Monorepo CAO actif ou racine du projet (
CAD_MONOREPO_ROOTou espace de travail actuel). - Garantie d'Isolation stricte : Ne créez jamais de fichiers temporaires, de scripts ou de rendus dans la racine du dépôt et ne mute pas
shared/. - Si vous démarrez un tout nouveau modèle, créez son dossier dédié :
python3 <chemin_vers_skills>/text-to-fusion/scripts/scaffold_text_model.py "<Nom_Modèle>" - Stockez les scripts du modèle dans
models/<NN>_<Nom_Modèle>/scripts/, les rendus visuels dansmodels/<NN>_<Nom_Modèle>/renders/, et les fichiers d'espace de travail intermédiaires dansmodels/<NN>_<Nom_Modèle>/workspace/. - Importez les aides CAO universels depuis
../../shared/(fusion_client,cad_primitives,hardware_library,scene_animator).
- Dépôt principal : Monorepo CAO actif ou racine du projet (
-
Références de Domaine : Consultez la bibliothèque de références locales avant d'écrire une géométrie personnalisée :
references/prompt-to-geometry-patterns.md— Traduit le langage naturel en contraintes d'esquisse paramétriques.references/exploded-view-guidelines.md— Vecteurs d'explosion, tiges de guidage dorées et cadrage orthographique.references/assembly-animation-pipeline.md— Animation de transformation d'occurrence Matrix3D et compilation GIF.references/variant-management-and-undo.md— Présentation sécurisée des variantes A/B et masquage non destructif.
Phase 1 : Désambiguïsation & Spécification Paramétrique
Lorsque les utilisateurs décrivent la géométrie de manière conversationnelle, identifiez et formalisez les contraintes d'ingénierie manquantes :
- Enveloppe & Dimensions Critiques :
- Boîte englobante globale ($L \times P \times H$ en mm).
- Épaisseur de paroi minimale (par défaut
2.0 - 2.5 mmpour les pièces structurelles,1.6 mmpour les séparateurs internes). - Limite du plateau d'impression 3D (par ex.
220 × 220 × 250 mm).
- Enregistrer les Paramètres Utilisateur Maîtres (
design.userParameters) : Exposez toujours les dimensions critiques en tant que paramètres utilisateur afin que l'utilisateur puisse redimensionner en un clic :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 )
Phase 2 : Mise en Scène des Variantes & Exploration Réversible
Lorsque l'utilisateur demande des options de conception (« donne-moi l'option 2 », « essaie une version sans couvercles ») :
- Le Modèle Showroom :
- Modélisez les options expérimentales dans un composant dédié (par exemple
Sample_Options_Showroom:1). - Espacez les variantes côte à côte sur le sol de l'espace de travail virtuel (par exemple $Y = -350\text{ mm}$ ou $X = -200\text{ mm}$) avec des apparences distinctives (
Rack_Desert_Tan,Rack_Matte_White). - Capturez une capture d'écran de vue d'ensemble côte à côte avec des étiquettes.
- Modélisez les options expérimentales dans un composant dédié (par exemple
- Adoption Non Destructrice :
- Lorsque l'utilisateur sélectionne un gagnant, clonez les corps choisis dans l'assemblage actif (
InSitu_Tier3_Option2). - Masquez les corps du showroom rejetés via
bRepBody.isLightBulbOn = False. - N'appelez jamais
body.deleteMe()sur des objets qui pourraient casser les références en aval de la chronologie.
- Lorsque l'utilisateur sélectionne un gagnant, clonez les corps choisis dans l'assemblage actif (
Phase 3 : Fixations Standard & Synthèse de la Nomenclature Matérielle
Lorsque l'utilisateur demande des vis, écrous ou quincaillerie d'assemblage :
- Standardisation du Matériel :
- Par défaut, utilisez des vis à tête fraisée DIN 7991 M3 et des écrous hexagonaux DIN 934 M3 pour tous les pivots et joints structurels.
- Dimensions Standard des Pockets :
- Pocket pour écrou hexagonal : Modélisé sur les plats (AF) à
5.70 mm(+0.20 mmde jeu FDM par rapport à l'écrou5.50 mm), profondeur2.50 mm. - Alésage de vis : $ riangle$ 3.20\text{ mm}$ de passage avec un pocket conique à 90° pour tête fraisée ($ riangle$ 6.20\text{ mm} \times 1.80\text{ mm}$).
- Rondelles de retenue : Rondelle imprimée 3D ($ riangle$ 9.50\text{ mm}$ DE × $ riangle$ 3.20\text{ mm}$ DI ×
1.80 mmd'épaisseur, fraisure à 90°) serrant l'extrémité du bossage de pivot tout en laissant la barre de liaison libre de tourner.
- Pocket pour écrou hexagonal : Modélisé sur les plats (AF) à
- Règle de Stationnement des Modèles :
- Les modèles de matériel maître (
Template_DIN_7991_M3x10,Template_DIN_934_M3) doivent avoirisLightBulbOn = True. - Garez les modèles loin sous terre (
Z = -500.0 cm) afin que les instances enfants dans l'assemblage restent visibles tandis que les modèles restent complètement hors écran.
- Les modèles de matériel maître (
Phase 4 : Vues Éclatées & Illustration Technique
Lorsque l'utilisateur demande à illustrer comment les pièces s'assemblent :
- Décalages d'Explosion Linéaires :
- Décaler les barres de liaison vers l'extérieur le long de l'axe principal ($+X$ de
35 - 50 mm). - Décaler les supports structurels ou les cadres vers l'arrière le long de $Y$ (
+45 - 60 mm). - Décaler les inserts modulaires vers le haut le long de $Z$ (
+40 - 50 mm).
- Décaler les barres de liaison vers l'extérieur le long de l'axe principal ($+X$ de
- Tiges de Guidage d'Alignement Dorées :
- Extruder de fines tiges cylindriques ($ riangle$ 1.2 - 1.4\text{ mm}$, apparence
Rack_Mustard_YellowouOr - Poli) traversant chaque axe de vis/pivot de la tête de vis la plus interne à l'écrou le plus externe. - Grouper toutes les tiges dans un composant dédié :
Opened_Explosion_Guides.
- Extruder de fines tiges cylindriques ($ riangle$ 1.2 - 1.4\text{ mm}$, apparence
- Configuration de Caméra Orthographique :
Définir
cam.cameraType = OrthographicCameraTypeavec des étendues de boîte englobante ciblées pour garantir des axes parallèles sans distorsion de perspective.
Phase 5 : Pipeline d'Animation d'Assemblage à Haute Vitesse
Lorsque l'utilisateur demande un GIF animé montrant les pièces s'animant en place :
- Griffage du Graphe de Scène Basé sur les Occurrences :
- Grouper chaque assemblage mobile dans sa propre
Occurrencedédiée (Anim_Bars,Anim_Stand,Anim_Fasteners). - N'UTILISEZ PAS
features.moveFeatures.add()dans la boucle d'image (causer une reconstruction de la chronologie ~2,2 s par image). - Réaffecter directement
occ.transform = Matrix3D(0,005 s/image).
- Grouper chaque assemblage mobile dans sa propre
- Smoothstep Échelonné Multi-Étapes :
Appliquer l'assouplissement smoothstep $s(\tau) = 3\tau^2 - 2\tau^3$ sur des intervalles de sous-assemblage échelonnés ($t \in [0,0, 1,0]$) :
- Amarrage du support : $t \in [0,00, 0,40]$
- Mise en place des barres de liaison : $t \in [0,15, 0,60]$
- Mise en place des rondelles de retenue : $t \in [0,30, 0,70]$
- Serrage des fixations : $t \in [0,40, 0,92]$
- Disparition des guides :
guides_occ.isLightBulbOn = (t < 0.88)
- Rendu par Lots Intégré au Script & Compilation Ping-Pong :
- Rendre les images directement sur le disque :
vp.saveAsImageFile('/tmp/frames/frame_%03d.png', 800, 800). - Compiler à l'aide de
PIL.Image: 28 images avant (45 ms) $\to$ 28 images de pause assemblée (50 ms) $\to$ 26 images arrière (45 ms) $\to$ 20 images de pause éclatée (50 ms). - Quantifier avec 128 couleurs adaptatives et tramage Floyd-Steinberg (~
2,3 MB). - Utiliser un nom de fichier unique/versionné (par exemple
_final.gif) pour vider le cache d'images du chat du navigateur.
- Rendre les images directement sur le disque :
Phase 6 : Auto-Vérification Mathématique & Synchronisation DevBrain
- Vérifier Mathématiquement les Limites d'Accouplement :
- Si une pièce apparaît avec un espace inattendu (« semble à la traîne »), inspectez les coordonnées mondiales :
delta = target_face.x - moving_face.x. - Appliquez le delta mathématique exact ; ne devinez jamais les ajustements.
- Si une pièce apparaît avec un espace inattendu (« semble à la traîne »), inspectez les coordonnées mondiales :
- Exécuter le Bilan & la Synchronisation Mémoire :
- Validez les modifications de portée dans le dépôt CAO actif.
- Si un nouveau mécanisme, une règle de tolérance ou une bizarrerie d'API a été résolu, enregistrez-le dans
references/et consignez la modification dansCHANGELOG.md.