echte 3D DXF Datei in Freecad zu Solid umwandeln
- bavariaSHAPE
- Posts: 406
- Joined: Tue Jun 10, 2014 8:31 am
- Contact:
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
Ich habe versucht, die Geometrie mit dem Makro Loft von Mario52 getestet.
Leider nur ein Teilerfolg. Vieleicht läßt sich das Makro etwas »aufbohren«.
Leider nur ein Teilerfolg. Vieleicht läßt sich das Makro etwas »aufbohren«.
… for a happy FreeCAD-World … JM2C …
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
Hallo,Danilo0702 wrote: ↑Fri Oct 11, 2019 8:45 pm@usbhub; nein, das ist nicht möglich. Das ist winpcnc, eine NC Software mit ganz einfachen CAM Möglichkeiten. Es gehen nur (nc, cnc, plt und txt).
Der Scan kann theoretisch sofort über das Programm gefräst werden. Was ist aber, wenn mann den Scan noch ein bisschen modifizieren möchte?
deine dxf sagt was anderes
Code: Select all
DXF created by FILOU-NC12 from Backplot
Deine Datei ist eine Ansammlung von Punkten im 3D-Raum. Ob die jetzt mit Linien verbunden sind oder nicht ist gerade mal egal. Und es eine echte 3D Datei zu nennen nutzt ebenso nicht wirklich viel.
Um einen Solid zu bekommen gibt es, meiner Meinung nach, nur den einen Weg: die Punkte mit einem Mesher vernetzen (Punkte in 3-Eck-Flächen überführen) - prüfen und ggf. Fehler reparieren - aus dem geschlossen Oberflächennetz (freecadsprech Shell) eine Solid erzeugen (ein mathematisch beschriebenen Körper). Erst ab hier kannst du mir freecad arbeiten. Ob das ganze Sinn macht ist eine andere Frage.
Es gibt einige Flächenmodellierer die Bearbeitungsfunkionen wie z. B. boolsche Operationen anbieten.
Aber das wurde schon in den beiden vorherigen Threads angesprochen.
Mit freundlichen
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
Anbei mit einer Punktewolke. Aus der sollte sich ein Netz erstellen lassen.
Code: Select all
import Points
grp = []
for ln in result:
if ln.z1() > 0.001:
grp.append(FreeCAD.Vector(ln.x1(),ln.y1(),ln.z1()))
pts = Points.Points()
pts.addPoints(grp)
points = Points.show(pts)
- Attachments
-
- Import.FCStd
- (260.58 KiB) Downloaded 44 times
-
- ImportPoints.jpg (49.11 KiB) Viewed 1481 times
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
Ich habe mir die Datei Import.fcstd heruntergeladen und wenn man die Daten von oben betrachtet, dann bilden die Punkte/Kanten eine perfekte Gitterstruktur. Mit einem Dateiformat, dass die Gitterstruktur und die 3D-Punkte speichert, ist es ein Leichtes daraus ein Netz zu erzeugen und danach ein Part-Objekt. Ein solches Format ist z.B. pcd, das von der Machern der OSS-Bibliothek PointClouds stammt und das FreeCAD unterstützt.
Glücklicherweise kann man mit diesen Daten die Gitterstruktur wiederherstellen, erfordert aber etwas Frickelei.
In der Reverse-Engineering-Wb gibt es eine PointsCloud-Funktion, solch eine Wolke zu vernetzen.
Wenn man das Netz ansieht, erkennt man schnell, dass an Stellen hoher Krümmung die Dreiecke nicht ideal gewählt wurden. Es gibt für jedes Gitterelement zwei Lösungen und die gemeinsame Nachbarkante sollte so gelegt werden, dass sie möglichst in Richtung der minimalen Krümmung verläuft.
Glücklicherweise kann man mit diesen Daten die Gitterstruktur wiederherstellen, erfordert aber etwas Frickelei.
Code: Select all
shape = App.ActiveDocument.Compound001.Shape
p = shape.Vertexes
h = 72.0 # diesen Wert erhält man aus der Bounding-Box
w = 142.0
s = 2.0 # diesen Wert erhält man durch Messen
width = w/s + 1
height = h/s + 1
# Das erzeugt ein dict mit Index-Wert -> Punkt
map={}
for i in p:
x=i.Point.x
y=i.Point.y
xi=x/s
yi=y/s
index=int(yi*width + xi)
map[index]=i.Point
# durch Sortieren kann man das an eine geordnete Punktewolke übergeben
sorted_map={}
for i in sorted(map.keys()):
sorted_map[i] = map[i]
import Points
pts=Points.Points()
pts.addPoints(list(sorted_map.values()))
sp=App.ActiveDocument.addObject("Points::Structured", "Cloud")
sp.Width=int(width)
sp.Height=int(height)
sp.Points=pts
App.ActiveDocument.recompute()
Wenn man das Netz ansieht, erkennt man schnell, dass an Stellen hoher Krümmung die Dreiecke nicht ideal gewählt wurden. Es gibt für jedes Gitterelement zwei Lösungen und die gemeinsame Nachbarkante sollte so gelegt werden, dass sie möglichst in Richtung der minimalen Krümmung verläuft.
- Attachments
-
- Import.FCStd
- (308.17 KiB) Downloaded 46 times
-
- Posts: 57
- Joined: Thu Jan 31, 2019 4:15 pm
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
Danke wmplayer für dein Mühe. Genau so wollte ich es auch haben. Leider habe ich kein Freecad mit dieser Reverse Engineering WB. Ich weiss, das es eine Version gibt, aber ich hab bis jetzt noch keinen Erfolg bei der Suche gehabt. @ jeno, ich bin kein Profi und ich muss sagen, das du mich erst auf die Idee mit Meshlab gebracht hast. Leider werden die Meshes da ungenau verarbeitet. Also habe ich es auf die alte Weise mit Abtasten gemacht. Das NC Programm erstellt mir nur eine nc Datei, welche ich dann über Filou (der gleiche Hersteller- diese Software ist das sehr dürftige Cam Programm dazu)in eine dfx gewandelt habe.Ich war der Ansicht, das sich so ein "Abtastscan" besser macht, da alle Punkte den exakt gleichen Abstand voneinander haben. Ja, das sieht so aus, als wenn das nun das 3. Thema dazu ist. Für meine Begriffe nicht, da ich ja hier nicht mit einer Punktewolke hantiere. Aber egal.... Nun muss ich nur noch rausfinden, wie wmplayer das gemacht hat. Ich habe mir die dfx und die von .txt zu .asc umbenannte Datei eingelesen und versuche nun, auf der Pythonkonsole das script auszuführen---leider ohne grossen Erfolg.
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
Du musst die Import.fcstd-Datei von usbhub nehmen. Dafür sind aber nur die ersten zwei Zeilen im Skript relevant.Aber egal.... Nun muss ich nur noch rausfinden, wie wmplayer das gemacht hat. Ich habe mir die dfx und die von .txt zu .asc umbenannte Datei eingelesen und versuche nun, auf der Pythonkonsole das script auszuführen---leider ohne grossen Erfolg.
Wenn Du die Daten in einem anderen Format vorliegen hast, kann das Skript einfach angepasst werden. Im ersten Schritt geht es nur darum, an die ungeordneten Punktdaten zu kommen.
Im zweiten Schritt werden diese sortiert und schlussendlich einem Points::Structured zugewiesen, das außerdem die Breite/Höhe (in Pixel) kennen muss.
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
An der Stelle irrst du. Deine Datenbasis, das Ergebnis deines Abtastvorgangs, ist eine Punktwolke. Öffne die nc Datei mit einem Editor und du wirst aller Wahrscheinlichkeit nach Informationen in der Art x/y/z mit Werten vorfinden. Falls ich mich richtig erinnere sind das G-Code-Daten. Wenn du deine dxf mit einem Editor öffnest dann findest du nur LINE Entities. Diese beschreiben eine Linie mit Start- und Endpunkt. Start- und Endpunkt sind beide mit irgendwelchen Punkten aus der Datenbasis identisch. Da nun bis zu vier Linien auf einen deiner Messpunkte zeigen hast du die Informationsmenge vervielfacht. Die Qualtiät ist bestenfalls gleich geblieben. Wenn es zu Umrechungsfehlern gekommen ist sogar schlechter. Das macht später beim Vernetzen u. U. Proleme.Danilo0702 wrote: ↑Sat Oct 12, 2019 12:46 pm ...@ jeno, ich bin kein Profi und ich muss sagen, das du mich erst auf die Idee mit Meshlab gebracht hast. Leider werden die Meshes da ungenau verarbeitet. Also habe ich es auf die alte Weise mit Abtasten gemacht. Das NC Programm erstellt mir nur eine nc Datei, welche ich dann über Filou (der gleiche Hersteller- diese Software ist das sehr dürftige Cam Programm dazu)in eine dfx gewandelt habe.Ich war der Ansicht, das sich so ein "Abtastscan" besser macht, da alle Punkte den exakt gleichen Abstand voneinander haben. Ja, das sieht so aus, als wenn das nun das 3. Thema dazu ist. Für meine Begriffe nicht, da ich ja hier nicht mit einer Punktewolke hantiere. Aber egal...
Das was gift und wmayer machen ist folgendes: mit etwas freecad-magic wieder die ursprüngliche Datenbasis (die Punktwolke) extrahieren und daraus ein Mesh erzeugen. Das Mesh ist eine Annäherung an deinen Ursprungskörper und kann ggf deutlich abweichen, da wir ja nur an einer definierten Stelle die Raumkoordinaten haben. Wir wissen nicht was geringfügig links und rechts daneben ist oder ob an dem Messpunkt eine Gerade oder ein Kurve vorliegt. Das gibt die Datenbasis nicht her.
Wenn du auf deine Kollegen aus der CNC-Welt verweist: Egal mit welchen Programmen Sie arbeiten, die Vorgehensweise ist die selbe....und auch die Probleme.
Mit freundlichen
-
- Posts: 57
- Joined: Thu Jan 31, 2019 4:15 pm
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
#jeno, das würde ja bedeuten, dass ich die Punktewolkendatei (also die nc-Datei, welche ich in asc umbenenne, einfach importiere. Aber so hab ich ja angefangen und Freecad öffnet diese ja auch. Nur kann ich da kein Netz erstellen, weil alles in den WBs grau hinterlegt ist. Gehe ich den Weg über Meshlab, erhalte ich eine .ply Datei (Netze). Daraus kann ich in Freecad ein Solid bauen... Nur ist das Surface oft fehlerhaft und löchrig. Das was wmayer und gift gemacht haben, ist perfekt. Genau das suche ich. Bis auf winzige Kleinigkeiten ist das ein super solid. Was mache ich hier falsch?
Ohne Infos werd ich das aber nicht erlernen können.
Ohne Infos werd ich das aber nicht erlernen können.
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
Besser als das was die nc-Datei enthält, wird es nicht. Das was Meshlab oder auch andere Tools wie Cloudcompare erzeugen kann und wird immer wieder Fehler enthalten. Je hochwertiger umso besser wird auch das Ergebnis.Danilo0702 wrote: ↑Sat Oct 12, 2019 5:27 pm #jeno, das würde ja bedeuten, dass ich die Punktewolkendatei (also die nc-Datei, welche ich in asc umbenenne, einfach importiere. Aber so hab ich ja angefangen und Freecad öffnet diese ja auch. Nur kann ich da kein Netz erstellen, weil alles in den WBs grau hinterlegt ist. Gehe ich den Weg über Meshlab, erhalte ich eine .ply Datei (Netze). Daraus kann ich in Freecad ein Solid bauen... Nur ist das Surface oft fehlerhaft und löchrig. Das was wmayer und gift gemacht haben, ist perfekt. Genau das suche ich. Bis auf winzige Kleinigkeiten ist das ein super solid. Was mache ich hier falsch?
Ohne Infos werd ich das aber nicht erlernen können.
Der Render war ursprünglich auch eine Punktwolke und wurde mit Meshlab vernetzt. Aber das waren so um die 200k an Punkten Werner meinte ja
Versuch macht an der Stelle klugIn der Reverse-Engineering-Wb gibt es eine PointsCloud-Funktion, solch eine Wolke zu vernetzen.
Mit freundlichen
-
- Posts: 57
- Joined: Thu Jan 31, 2019 4:15 pm
Re: echte 3D DXF Datei in Freecad zu Solid umwandeln
ich hab es nun rausgefunden. Man braucht keinen extra Mesher. Diese Funktionen hat Freecad. Leider nicht mehr in der 0.18. Ich hab mir die 0.17 installiert und da gehts.... Nun kann ich endlich mit freier Software Modelle scannen und modifizieren-- und schlussendlich fräsen. Problem gelöst.