[PYTHON] Extrudieren Sie mit der Fusion360-API

Hintergrund

Es scheint, dass der "Fusion 360 Extrude Competition" (Details in einem anderen Blog-Beitrag ()) auch in diesem Jahr beginnen wird. Gerüchte sind geflossen. Fusion 360 verfügt über eine makroähnliche Funktion, die als Skript bezeichnet wird. Wenn Sie diesen Kerl benutzen, werden Sie definitiv gewinnen! ?? Deshalb habe ich es versucht.

Vorbereitung

So erstellen Sie ein neues Skript oder bearbeiten ein vorhandenes Skript Bitte lesen Sie den folgenden Artikel. Er hat die offizielle Hilfe ins Japanische übersetzt.

Fusion360-Skripte und Add-Ins erstellen

"Bearbeiten" Sie das von Anfang an enthaltene Beispielskript (achten Sie darauf, es nicht zu überschreiben!) Sie können auch den Inhalt überprüfen. Auch (obwohl es schmerzhaft ist, nur Englisch zu haben) auf der offiziellen Hilfeskriptseite Es gab verschiedene Proben, daher war es sehr hilfreich. Die folgenden Links führen verschiedene Extrusionen durch.

Extrude Feature API Sample API Sample

Skriptinhalt

Zeichnen Sie einen Kreis mit einer Skizze und extrudieren Sie ihn, zeichnen Sie dann einen anderen Kreis darauf und extrudieren Sie ihn und wiederholen Sie den Vorgang. Daten zur Teilungshöhe (= jede Extrusionshöhe), zur Position des Kreises und zum Durchmesser Wenn Sie es als CSV-Datei laden, wird es automatisch herausgeschoben.

Ich habe es geschafft, es zum Laufen zu bringen, indem ich verschiedene Beispiele kombiniert habe. Im Folgenden werde ich den Code mit einer kleinen Pause erklären. Es sollte funktionieren, wenn Sie alles in der richtigen Reihenfolge anschließen, aber bitte korrigieren Sie es nach Bedarf.

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

Bis zu diesem Punkt wurde der Bildschirm zur Auswahl der Grundeinstellungen und der CSV-Datei ausgeführt. Es ist fast das gleiche wie das Beispielskript.

        # 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)

Zeichnen Sie eine Skizze in der XZ-Ebene und extrudieren Sie sie in Y-Richtung. Lesen Sie die CSV-Datei Zeile für Zeile. Stellen Sie die zu stapelnde Teilungshöhe (= jede Extrusionshöhe) ein, die die Daten der ersten Zeile sind.

                # 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()))

Lesen Sie die Mittelpositionen X, Y und den Durchmesser des Kreises ab, die die Daten aus der zweiten Zeile der CSV-Datei sind. Zeichnen Sie auf eine Skizze und extrudieren Sie mit der festgelegten Tonhöhe. Zeichnen Sie in der ersten Phase eine Skizze auf der XY-Ebene und extrudieren Sie sie mit einem neuen Körper. Zeichnen Sie ab der zweiten Stufe eine Skizze auf der Ebene des Körpers und extrudieren Sie sie durch Verbinden. Wiederholen Sie diesen Vorgang bis zum Ende der CSV-Datei.

Schließlich

Wenn eine Schaltfläche "Aufzeichnen" wie ein Excel-Makro vorhanden ist, wird auch die API-Analyse fortgesetzt. Es gibt nicht viele Informationen auf Japanisch und es gibt viele Dinge, die ich nicht verstehe. Es mag ein unordentlicher Code sein, aber bitte vergib mir.

Neben dem perfekten Kreis konnte ich eine Ellipse (Sketch Ellipses) zeichnen. Ich weiß nicht, wie man ein Quadrat zeichnet, indem man gerade Linien kombiniert.

Ich wollte wirklich damit beginnen, eine beliebige Ebene anstelle der XY-Ebene zu wählen. Ich habe das auch nicht verstanden, also würde ich es begrüßen, wenn Sie es mich wissen lassen könnten.

Zusätzlich zu den im Artikel vorgestellten Artikeln habe ich auch auf den folgenden Qiita-Artikel verwiesen. Es wurde in einer Reihe serialisiert und war leicht zu verstehen, da es sorgfältig erklärt wurde. Vielen Dank!

Lassen Sie uns Fusion 360 mit Python Teil 1 ausführen. Erstellen Sie ein neues Skript

Übrigens wurde diesmal im Extrusionswettbewerb 2020 klargestellt, dass "Skripte usw. nicht verwendet werden können". Bitte beachten Sie, dass es ein Foul ist, wenn Sie es verwenden (lachen)

Recommended Posts

Extrudieren Sie mit der Fusion360-API
Bild herunterladen mit Flickr API
Verwenden Sie die Trello-API mit Python
Erstellen Sie eine API mit Django
Verwenden Sie die Twitter-API mit Python
API mit Flask + uWSGI + Nginx
Web-API mit Python + Falcon
Unterstützen Sie sich mit der Twitter API
Rufen Sie die API mit python3 auf.
Verwenden Sie die Unterschall-API mit Python3
Erfolgreiches update_with_media mit Twitter API
Qiita API Oauth mit Django
Holen Sie sich ein Ranking mit Rakuten API
Betreiben Sie Nutanix mit der REST-API Teil 2
Erstellen Sie Awaitable mit der Python / C-API
[AWS] API mit API Gateway + Lambda erstellen
Behalten Sie den Flask API-Server für immer bei
Quine Post mit Qiita API (Python)
Erkennen Sie Videoobjekte mit der Video Intelligence-API
Multi-Input / Multi-Output-Modell mit funktionaler API
Erstellen Sie eine API mit hug mit mod_wsgi
GraphQL-API mit graphene_django in Django
Einführung der Google Map API mit Schienen
Klicken Sie mit PowerShell auf die ERS-API von ISE
Sammeln von Informationen von Twitter mit Python (Twitter API)
Greifen Sie mit Requests auf die Docker Remote API zu
Streaming-Spracherkennung mit der Google Cloud Speech API
Holen Sie sich Lebensmitteldaten mit Amazon API (Python)
Löschen Sie alle unnötigen Google Mail-E-Mails mit API
Was Sie mit API Vol.1 tun können
Erstellen Sie mit Docker-Compose eine schnelle API-Umgebung
Senden Sie Daten mit Vue.js an die DRF-API
Poste von einem anderen Konto mit Twitter API
Transkription von Bildern mit der Vision API von GCP
[Python] Erstellen Sie schnell eine API mit Flask
Holen Sie sich Urlaub mit der Google Kalender-API
Serverlose Gesichtserkennungs-API mit Python
Erstellen Sie einen Seiten- / Todo-Block mit der Notion-API
[Python] Python-Paketinformationen mit der PyPI-API abrufen
Extrahieren Sie plötzliche beliebte Wörter mit der Twitter-Streaming-API
Spielen Sie mit Dajare mithilfe der COTOHA-API
Erstellen Sie eine API für das Switchbot-Thermo-Hygrometer mit Node-RED
Einfache REST-API mit API Gateway / Lambda / DynamoDB
Erhalten Sie Informationen zur virtuellen Währung mit der API coin
Transkribieren Sie WAV-Dateien mit der Cloud Speech API
Automatisches Follow-Back mit Streaming-API mit Tweepy