echte 3D DXF Datei in Freecad zu Solid umwandeln

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
User avatar
bavariaSHAPE
Posts: 406
Joined: Tue Jun 10, 2014 8:31 am
Contact:

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by bavariaSHAPE »

Ich habe versucht, die Geometrie mit dem Makro Loft von Mario52 getestet.
Leider nur ein Teilerfolg. Vieleicht läßt sich das Makro etwas »aufbohren«.

CreaLoft1.png
CreaLoft1.png (254.38 KiB) Viewed 1505 times

CreaLoft2.png
CreaLoft2.png (165.26 KiB) Viewed 1505 times
… for a happy FreeCAD-World … JM2C …
jeno
Veteran
Posts: 1854
Joined: Sun Jun 29, 2014 10:41 am

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by jeno »

Danilo0702 wrote: Fri Oct 11, 2019 8:45 pm
usbhub wrote: Fri Oct 11, 2019 6:40 pm Du hast den Scan ja mit irgendeiner Art von Software erstellt...
Merke: Proprietäre Datenformate soweit irgendwie möglich, vermeiden (auch wenn der Bekanntenkreis das Gegenteil behauptet :) ).
@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?
Hallo,
deine dxf sagt was anderes

Code: Select all

DXF created by FILOU-NC12 from Backplot
Aber das ist nebensächlich. Ich frage mich, warum du mit dem selben Thema jetzt zum dritten mal beginnst (siehe hier und hier)
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
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Gift »

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
ImportPoints.jpg (49.11 KiB) Viewed 1481 times
wmayer
Founder
Posts: 20319
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by wmayer »

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.

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()
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.
Attachments
Import.FCStd
(308.17 KiB) Downloaded 46 times
Danilo0702
Posts: 57
Joined: Thu Jan 31, 2019 4:15 pm

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Danilo0702 »

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.
wmayer
Founder
Posts: 20319
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by wmayer »

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.
Du musst die Import.fcstd-Datei von usbhub nehmen. Dafür sind aber nur die ersten zwei Zeilen im Skript relevant.
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.
jeno
Veteran
Posts: 1854
Joined: Sun Jun 29, 2014 10:41 am

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by jeno »

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...
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.
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
Danilo0702
Posts: 57
Joined: Thu Jan 31, 2019 4:15 pm

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Danilo0702 »

#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.
jeno
Veteran
Posts: 1854
Joined: Sun Jun 29, 2014 10:41 am

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by jeno »

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.
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.
Der Render war ursprünglich auch eine Punktwolke und wurde mit Meshlab vernetzt. Aber das waren so um die 200k an Punkten
meshlab.png
meshlab.png (120.31 KiB) Viewed 1401 times
Werner meinte ja
In der Reverse-Engineering-Wb gibt es eine PointsCloud-Funktion, solch eine Wolke zu vernetzen.
Versuch macht an der Stelle klug
Mit freundlichen
Danilo0702
Posts: 57
Joined: Thu Jan 31, 2019 4:15 pm

Re: echte 3D DXF Datei in Freecad zu Solid umwandeln

Post by Danilo0702 »

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.
Post Reply