Freiform-Oberfläche scannen/gravieren - Fusion 360

Steuerungssoftware, CAM, 2D/3D CAD, G-Code Editoren
Anton
Beiträge: 186
Registriert: 13.08.2020, 12:34

Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von Anton » 13.03.2023, 20:06

Moin,
in EstlCAM ist es sehr einfach eine Freiform-Oberfläche zu scannen (Zeilen und Spalten) und anschließend zu gravieren.
https://www.youtube.com/watch?v=ApBfHW7AhsM
Mit simCNC geht das nicht, hier muss man den Umweg über eine CAD/CAM-Software gehen.
Das Scannen der Oberfläche bekomme ich mit einem kleinen Python-Skript in simCNC hin.
Die Punkte (x,y,z) der gescannten Oberfläche könnte ich dann auch in einer csv-Datei speichern.

Weiß jemand wie man in Fusion 360 so eine Datei importiert und in ein Fläche (oder Körper) umwandelt?
Oder kennt jemand eine freie Software die so was kann?


Bisher habe ich nur ein Python-Skript in Fusion entdeckt (Dienstprogramme->Zusatzmodule->Beispielskripte->ImportSplineCSV) mit der Punkte einer Zeile als Spline importiert werden könnten.
Dieses Skript lässt sich bestimmt so ändern, dass man auch mehrere Zeilen aus dem Scan importieren kann. Diese müssten dann aber noch über "Erhebung" verbunden werden. Das ist aber insgesamt alles etwas umständlich.
VG
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Benutzeravatar
carbonkid
Beiträge: 235
Registriert: 28.09.2016, 16:08

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von carbonkid » 13.03.2023, 21:06

Hi Anton,
also bei Inventor kann man in einer Skizze Punkte mit einer Excel Tabelle einfügen. Vielleicht geht das bei Fusion360 auch.
Dann kann man ja aus diesen Punkte eine Fläche erzeugen.
Dateianhänge
BildX.jpg
Gruß Daniel

DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear

Anton
Beiträge: 186
Registriert: 13.08.2020, 12:34

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von Anton » 13.03.2023, 22:00

Hallo Daniel,

bisher habe ich zu Fusion nur das gefunden:
https://knowledge.autodesk.com/de/suppo ... lines.html

Erzeugt Dir Inventor aus den Punkten automatische eine Fläche - wahrscheinlich nicht oder!?
In Fusion brauche ich einen Körper oder oder eine Fläche um eine Gravur draufzulegen.

Vielleicht versuche ich mal den Weg über eine per Skript erzeugte STL-Datei - wenn ich mal viel Zeit habe:).

VG
Anton
Zuletzt geändert von Anton am 13.03.2023, 22:08, insgesamt 1-mal geändert.
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Benutzeravatar
carbonkid
Beiträge: 235
Registriert: 28.09.2016, 16:08

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von carbonkid » 13.03.2023, 22:05

Ah das scheint die gleiche Funktion zu sein. Hatte das bisher nur einmal in Verbindung mit Splines gebraucht.
Gruß Daniel

DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear

Anton
Beiträge: 186
Registriert: 13.08.2020, 12:34

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von Anton » 20.03.2023, 18:25

Moin,

ich habe Python-Skript für Fusion 360 erstellt, welches Punkte aus eines CSV-Datei liest, daraus Splines erzeugt und diese durch eine Erhebung (Loft) zu einer Fläche verbindet. Die CSV-Datei soll bei mir über einen Oberflächen-Scan auf der Fräse mit einem 3D-Taster befüllt werden.

Durch Projektion der Eckpunkte auf eine Skizze unterhalb der Freiformfläche erhält man ein Rechteck, mit dem man durch Extrusion bis auf die Freiformfläche (Objekt) einen Körper erstellt.
Nachdem der 3-D-Körper nun vorliegt kann eine Schrift durch Extrusion Teile des Körpers ausschneiden wie z.B. hie gezeigt:
https://www.youtube.com/watch?v=dNWUQ0gUV7s
Im Cam von Fusion können dann die 3D-Routinen genutzt werden.

Leider kann ich hier keine Textdateien wie z.B. .csv oder .py hochladen, deshalb hier der Quellcode der Datei ImportSplineCSV_Boes.py:

Code: Alles auswählen

#Author- Bös
#Description- Generate Splines, the Splines lofted to a surface


import adsk.core, adsk.fusion, traceback
import 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)
        rootComp = design.rootComponent
        sketch = rootComp.sketches.add(rootComp.xYConstructionPlane)
        title = 'Import Spline csv'
        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
        with io.open(filename, 'r', encoding='utf-8-sig') as f:
            points = adsk.core.ObjectCollection.create()
            splines = adsk.core.ObjectCollection.create()
            line = f.readline()
            data = []
            while line:
                pntStrArr = line.split(',')
                for pntStr in pntStrArr:
                    try:
                        data.append(float(pntStr))
                    except:
                        break
            
                if len(data) >= 3 :
                    point = adsk.core.Point3D.create(data[0], data[1], data[2])
                    points.add(point)
                data.clear() 
                line = f.readline()
               # ui.messageBox(line)
                if line.startswith('createSpline'):
                    #ui.messageBox("Create Spline")
                    #root = design.rootComponent     
                    splines.add(sketch.sketchCurves.sketchFittedSplines.add(points))
                    points.clear()
                    line = f.readline()        
        # Create loft feature input
        loftFeats = rootComp.features.loftFeatures
        loftInput = loftFeats.createInput(adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
        loftSectionsObj = loftInput.loftSections
        for spline in splines:
            loftSectionsObj.add(spline)
        loftInput.isSolid = False
        loftInput.isClosed = False
        loftInput.isTangentEdgesMerged = True

        # Create loft feature
        loftFeats.add(loftInput)

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
Dateianhänge
_0CSV_DateiBeispiel.JPG
_0CSV_DateiBeispiel.JPG (29.63 KiB) 7738 mal betrachtet
_1Splines.JPG
_2Loft.JPG
_3SkizzeFuerExtrusion.JPG
_4Volumenkoerper.JPG
_5Gravur.JPG
_6Scriptauswahl.JPG
_6Scriptauswahl.JPG (30.11 KiB) 7738 mal betrachtet
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Benutzeravatar
carbonkid
Beiträge: 235
Registriert: 28.09.2016, 16:08

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von carbonkid » 20.03.2023, 21:34

Krass...einfach mal schnell ein script programmiert.
Ich wünschte ich könnte auch bissl Python programmieren.
Aber sehr gut wer weiß für was man das mal gebrauchen kann.
Gruß Daniel

DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear

Anton
Beiträge: 186
Registriert: 13.08.2020, 12:34

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von Anton » 17.06.2023, 10:37

Moin,
jetzt gibt es auch das Video zu diesem Thread:
https://www.youtube.com/watch?v=-wAh6Fes7Dg
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Anton
Beiträge: 186
Registriert: 13.08.2020, 12:34

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von Anton » 26.06.2023, 13:12

Moin,

bin gerade dabei den Surface Scan in simCNC einzubauen.
Hier schon mal ein Filmchen zur GUI.

https://www.youtube.com/embed/unPx1o5FfoM

Die Skripte, die den G-Code für das Abtasten erzeugen gibt´s im nächsten Filmchen.
Danach noch ein Filmchen zur Erzeugung eines Körpers aus den Abtastdaten und das Anbringen einer 3D Gravur auf diesen Körper.
Den Screen und die Skripte werde ich demnächst hier einstellen.



VG
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Benutzeravatar
carbonkid
Beiträge: 235
Registriert: 28.09.2016, 16:08

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von carbonkid » 28.06.2023, 13:41

Hey Anton super Arbeit! Das mit dem Flächen abtasten kommt wie gerufen.
Gruß Daniel

DiY Fräse : CSMIO-IP-M / JMC-iHSS57 / simCNC-CS-Lab / intel NUC6i3
3D Drucker: Anycubic Delta Linear

Anton
Beiträge: 186
Registriert: 13.08.2020, 12:34

Re: Freiform-Oberfläche scannen/gravieren - Fusion 360

Beitrag von Anton » 29.06.2023, 10:39

Moin,

hier findet Ihr das Filmchen zum Skript surfaceScan.py:
https://www.youtube.com/watch?v=5roFQ9pYijQ

Und hier den Python-Code:

Code: Alles auswählen

import math
import sys


xStart = d.getMachineParam(190)
xEnde = d.getMachineParam(191)
if xEnde < xStart:
    temp = xEnde
    xEnde = xStart
    xStart = temp
print("xStart = " +str(xStart) )
print("xEnde = " +str(xEnde) )
xDelta = abs(xStart - xEnde)
#print("Delta X = "  + str(xDelta))
xAnzahlPunkte = d.getMachineParam(192)
#print("Anzahl Punkte x = " +str(xAnzahlPunkte) )

yStart = d.getMachineParam(193)
yEnde = d.getMachineParam(194)
if yEnde < yStart:
    temp = yEnde
    yEnde = yStart
    yStart = temp

#print("yStart = " +str(yStart) )
#print("yEnde = " +str(yEnde) )
yDelta = abs(yStart - yEnde)
#print("Delta Y = "  + str(yDelta))
yAnzahlPunkte = d.getMachineParam(195)
#print("Anzahl Punkte y = " +str(yAnzahlPunkte) )

sichereHoehe = d.getMachineParam(199)
#print("Sichere Höhe = " + str(sichereHoehe))

vorschubXY =  d.getMachineParam(198)
#print("Voschub XY = " + str(vorschubXY))

vorschubZplus =  d.getMachineParam(196)
#print("Voschub Zplus = " + str(vorschubZplus))

x=xStart
y=yStart
G_Code = "G90 G17 G80\n"
G_Code += "G21\n" #Unit mm
G_Code += "G90 G49\n"  #Tool length compensation off

#go to Startposition
G_Code += "G01 Z" + str(sichereHoehe) + " F"+str(vorschubZplus)+"\n"
G_Code += "x"+str(xStart) + " y" + str(yStart) + " F"+str(vorschubXY)+"\n"

counterX = 0;
counterY = 0;


while x <= xEnde:
    while y <= yEnde:
        G_Code += "M42\n"
        counterY +=1;
        y= yStart + counterY * yDelta / (yAnzahlPunkte - 1)
        if y <= yEnde: #nicht in y weiterfahren, wenn yEnde erreicht
            G_Code += "G01 Y"+ str(y) + "  F" + str(vorschubXY)+"\n"
    G_Code +="M43 \n" #M43 write createSpline to File
    y=yStart
    counterY = 0
    counterX += 1;
    x = xStart + counterX * xDelta / (xAnzahlPunkte -1)
    if x <= xEnde: #nicht in x weiterfahren, falls xEnde erreicht
        G_Code += "G01 Y" + str(y) +"\n"
        print("x=" + str(x))
        G_Code += "G01 X" + str(x) + " F" + str(vorschubXY)+"\n"

# Filepathe for points.csv
File_path = gui.scanTXTfileGcode.getText() ;

try:
    File = open(File_path, "w+")
except IOError:
    sys.exit("\n No access to file !!!\n" + File_path)

# Write String G_Code to file
try:
    File.write(G_Code)
    File.close()
    # load G-Code from file
    d.openGCodeFile(File_path)
    print("---     CNC program successfully created!      ---")
    print(">>>  click on Yes (reload G-code) <<<\n")

except IOError:
    File.close()
    sys.exit("\n File write error !!!")

#print(G_Code)

M42 führt an der Position (X,Y) ein Probing durch und speichert den Tastpunkt in der Datei points.csv.
M43 wird am Ende einer Abtastzeile ausgeführt und schreibt "createSpline" in die Datei points.csv.
Ein Skript in Fusion liest die Datei points.csv und erzeugt daraus die abgetastete Oberfläche.

So sieht der erzeugte G-Code für
xStart 0, xEnde 5, anzahlPunkteX 6
yStart 0, yEnde 4, anzahlPunkteY 5

Code: Alles auswählen

G90 G17 G80
G21
G90 G49
G01 Z0.0 F3000.0
x0.0 y0.0 F2000.0
M42
G01 Y1.0  F2000.0
M42
G01 Y2.0  F2000.0
M42
G01 Y3.0  F2000.0
M42
G01 Y4.0  F2000.0
M42
M43 
G01 Y0.0
G01 X1.0 F2000.0
M42
G01 Y1.0  F2000.0
M42
G01 Y2.0  F2000.0
M42
G01 Y3.0  F2000.0
M42
G01 Y4.0  F2000.0
M42
M43 
G01 Y0.0
G01 X2.0 F2000.0
M42
G01 Y1.0  F2000.0
M42
G01 Y2.0  F2000.0
M42
G01 Y3.0  F2000.0
M42
G01 Y4.0  F2000.0
M42
M43 
G01 Y0.0
G01 X3.0 F2000.0
M42
G01 Y1.0  F2000.0
M42
G01 Y2.0  F2000.0
M42
G01 Y3.0  F2000.0
M42
G01 Y4.0  F2000.0
M42
M43 
G01 Y0.0
G01 X4.0 F2000.0
M42
G01 Y1.0  F2000.0
M42
G01 Y2.0  F2000.0
M42
G01 Y3.0  F2000.0
M42
G01 Y4.0  F2000.0
M42
M43 
G01 Y0.0
G01 X5.0 F2000.0
M42
G01 Y1.0  F2000.0
M42
G01 Y2.0  F2000.0
M42
G01 Y3.0  F2000.0
M42
G01 Y4.0  F2000.0
M42
M43 
VG
DIY Fräse Mineralguss-ALU / simCNC-CS-Lab / CSMIO-IP-M / JMC-Servos / GDK80-12Z-2.2 - Spindel
https://www.youtube.com/@boessi

Antworten

Wer ist online?

Mitglieder in diesem Forum: KarlG, WroDo und 17 Gäste