[PYTHON] Extruder avec l'API Fusion360

Contexte

Il semble que le "Fusion 360 Extrude Competition" (détails dans un autre article de blog ()) commencera également cette année. Des rumeurs ont coulé. Fusion 360 a une fonction de type macro appelée script. Si vous utilisez ce type, vous gagnerez certainement! ?? C'est pourquoi je l'ai essayé.

Préparation

Comment créer un nouveau script ou modifier un script existant Veuillez vous référer à l'article suivant. Il a traduit l'aide officielle en japonais.

Créer des scripts et des compléments Fusion360

"Editez" l'exemple de script qui est inclus depuis le début (veillez à ne pas l'écraser!) Vous pouvez également vérifier le contenu. Aussi (bien qu'il soit pénible de n'avoir que l'anglais) sur la page officielle du script d'aide Il y avait différents échantillons, donc c'était très utile. Les liens ci-dessous sont ceux qui effectuent diverses extrusions.

Extrude Feature API Sample API Sample

Contenu du script

Dessinez un cercle avec une esquisse et extrudez-le, puis dessinez un cercle différent dessus et extrudez-le, puis répétez. Données sur la hauteur de pas (= chaque hauteur d'extrusion), la position du cercle et le diamètre Si vous le chargez en tant que fichier CSV, il sera automatiquement expulsé.

J'ai réussi à le faire fonctionner en combinant différents échantillons. Ci-dessous, je vais vous expliquer le code avec une petite pause. Cela devrait fonctionner si vous connectez tout dans l'ordre, mais veuillez le corriger si nécessaire.

import adsk.core, adsk.fusion, traceback, math, io

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface
        # Get all components in the active design.
        product = app.activeProduct
        design = adsk.fusion.Design.cast(product)
        # Get the root component of the active design
        rootComp = design.rootComponent
        # Get extrude features
        extrudes = rootComp.features.extrudeFeatures

        title = 'Import csv file'
        if not design:
            ui.messageBox('No active Fusion design', title)
            return
        
        dlg = ui.createFileDialog()
        dlg.title = 'Open CSV File'
        dlg.filter = 'Comma Separated Values (*.csv);;All Files (*.*)'
        if dlg.showOpen() != adsk.core.DialogResults.DialogOK :
            return
        filename = dlg.filename

Jusqu'à ce point, l'écran de sélection des paramètres initiaux et du fichier CSV a été exécuté. C'est presque le même que l'exemple de script.

        # Set 1st-sketch plane
        sketches = rootComp.sketches   
        sketch = sketches.add(rootComp.xZConstructionPlane)
        
        cnt = 0
        # Read the csv file.
        with io.open(filename, 'r', encoding='utf-8-sig') as f:
            line = f.readline()
            data = []
            while line:
                pntStrArr = line.split(',')
                for pntStr in pntStrArr:
                    try:
                        data.append(float(pntStr))
                    except:
                        break
                # csv file line 1 is pitch of extrude
                if cnt == 0:
                    distance = adsk.core.ValueInput.createByReal(data[0]/10)

Définissez pour dessiner une esquisse sur le plan XZ et extrudez-la dans la direction Y. Lisez le fichier CSV ligne par ligne. Définissez la hauteur de pas (= chaque hauteur d'extrusion) à empiler, qui correspond aux données de la première ligne.

                # csv file after line 2 are sketch of extrude
                elif cnt == 1:
                    sketchCircles = sketch.sketchCurves.sketchCircles
                    centerPoint = adsk.core.Point3D.create(data[0]/10, data[1]/10, 0)
                    circle = sketchCircles.addByCenterRadius(centerPoint, data[2]/10)
                    prof = sketch.profiles.item(0)
                    extrude = extrudes.addSimple(prof, distance, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
                else:
                    sketch = sketches.addWithoutEdges(extrude.endFaces.item(0) )
                    sketchCircles = sketch.sketchCurves.sketchCircles
                    centerPoint = adsk.core.Point3D.create(data[0]/10, data[1]/10, 0)
                    circle = sketchCircles.addByCenterRadius(centerPoint, data[2]/10)
                    prof = sketch.profiles.item(0)
                    extrude = extrudes.addSimple(prof, distance, adsk.fusion.FeatureOperations.JoinFeatureOperation)
                
                line = f.readline()
                data.clear()
                cnt += 1

        ui.messageBox('Finished')
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

Lisez les positions centrales X, Y et le diamètre du cercle, qui sont les données de la deuxième ligne du fichier CSV. Dessinez sur une esquisse et extrudez au pas défini. Dans la première étape, dessinez une esquisse sur le plan XY et extrudez avec un nouveau corps. À partir de la deuxième étape, dessinez une esquisse sur le plan du corps et extrudez par jointure. Répétez jusqu'à la fin du fichier CSV.

finalement

S'il existe un bouton "Enregistrer" comme une macro Excel, l'analyse de l'API progressera également. Il n'y a pas beaucoup d'informations en japonais et il y a beaucoup de choses que je ne comprends pas. C'est peut-être un code compliqué, mais pardonnez-moi s'il vous plaît.

Outre le cercle parfait, je pourrais dessiner une ellipse (Sketch Ellipses). Je ne sais pas dessiner un carré en combinant des lignes droites.

Je voulais vraiment commencer par choisir un plan arbitraire au lieu du plan XY. Je n'ai pas compris cela non plus, alors je vous serais reconnaissant si vous pouviez me le faire savoir.

En plus des articles présentés dans l'article, je me suis également référé à l'article de Qiita suivant. Il était sérialisé dans une série et était facile à comprendre car il était expliqué avec soin. Merci!

Lançons Fusion 360 avec Python Partie 1 Créez un nouveau script

D'ailleurs, cette fois, lors du concours d'extrusion 2020, il était clairement indiqué que "les scripts etc. ne peuvent pas être utilisés". Veuillez noter que ce sera une faute si vous l'utilisez (rires)

Recommended Posts

Extruder avec l'API Fusion360
Téléchargement d'image avec l'API Flickr
Utiliser l'API Trello avec python
Créer une API avec Django
Utiliser l'API Twitter avec Python
API avec Flask + uWSGI + Nginx
API Web avec Python + Falcon
Soutenez-vous avec l'API Twitter
Appelez l'API avec python3.
Utiliser l'API subsonique avec python3
Update_with_media réussi avec l'API Twitter
Qiita API Oauth avec Django
Obtenez un classement avec l'API Rakuten
Utilisez Nutanix avec l'API REST, partie 2
Créer Awaitable avec l'API Python / C
[AWS] Créer une API avec API Gateway + Lambda
Persistez le serveur d'API Flask avec Forever
Quine Post avec l'API Qiita (Python)
Détecter les objets vidéo avec l'API Video Intelligence
Modèle multi-entrées / multi-sorties avec API fonctionnelle
Créez une API en utilisant hug avec mod_wsgi
API GraphQL utilisant graphene_django dans Django
Présentation de l'API Google Map avec rails
Hit API ERS d'ISE avec PowerShell
Collecter des informations sur Twitter avec Python (API Twitter)
Accéder à l'API Docker Remote avec des requêtes
Reconnaissance vocale en streaming avec l'API Google Cloud Speech
Obtenez des données alimentaires avec l'API Amazon (Python)
Supprimez tous les e-mails Gmail inutiles avec l'API
Ce que vous pouvez faire avec l'API vol.1
Créez un environnement d'API rapide avec docker-compose
Envoyer des données à l'API DRF avec Vue.js
Publier à partir d'un autre compte avec l'API Twitter
Transcription d'images avec l'API Vision de GCP
[Python] Créez rapidement une API avec Flask
Obtenez des vacances avec l'API Google Agenda
API de reconnaissance faciale sans serveur conçue avec Python
Créer un bloc de page / Todo avec l'API Notion
[Python] Obtenez des informations sur le package Python avec l'API PyPI
Extraire des mots populaires soudains avec l'API de streaming Twitter
Jouez avec Dajare en utilisant l'API COTOHA
Créer une API pour le thermo-hygromètre Switchbot avec Node-RED
API REST facile avec API Gateway / Lambda / DynamoDB
Obtenez des informations sur la monnaie virtuelle Coincheck avec l'API ♪
Transcrire des fichiers WAV avec l'API Cloud Speech
Suivi automatique à l'aide de l'API de streaming avec Tweepy