Wenn man am Ende ohnehin ein Part-Objekt haben möchte, kann die Triangulierung auch entfallen. Stattdessen versucht man mit einem Flächenfit eine NURBS-Fläche aus den Punkten zu approximieren.Anbei eine FreeCAD datei mit einer Punktwolke, wie kann ich daraus eine Fläche und letztenendes einen Solid (compound) mit einer Basishöhe (untere Face des Körpers) von bsw 380000 (380 m) erstellen.
Punkte (bzw. Koordinaten) aus Tabelle importieren
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
- Attachments
-
- terrain-solid.FCStd
- (290.09 KiB) Downloaded 166 times
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Der Vollständigkeit halber hier die Triangulierung dazu (dafür benötigt man git commit 62da383):
Code: Select all
import ReverseEngineering as Reen
points=App.ActiveDocument.terrain.Points
mesh=Reen.triangulate(points, 10000, 3.5)
import Mesh
Mesh.show(mesh)
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Hallo Roland,r-frank wrote:Hallo Markus.
Beim Erstellen eines neuen Dokumentes in FreeCAD ist die Ansicht "Oben" eingestellt.
Da sich die Punkte nur in den Z-Koordinaten unterscheiden erscheint da zuerst nur ein Punkt.
Wechsle mal auf axometrische Ansicht ...
Gruß
Roland
das hab ich wohl übersehen.
Kaum wechsle ich in die axometrische Ansicht, erscheinen, wie gewünscht fünf Punkte.
Problem gelöst.
Vielen Dank für eure Mühen!
Gruß,
Markus
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Wow, ist zwar nicht das womit ich sinnvoll weiterarbeiten kann, aber wie geht das ?!?wmayer wrote:Wenn man am Ende ohnehin ein Part-Objekt haben möchte, kann die Triangulierung auch entfallen. Stattdessen versucht man mit einem Flächenfit eine NURBS-Fläche aus den Punkten zu approximieren.
YEAH ist genau was ich brauche . Mit Part --> create shape from mesh kann man daraus wunderbar eine shell erzeugen. Nun fehllen nur noch die seitenflächen und die grundfläche für einen terrainsolid. Die Grundfläche wüsste ich noch, aber mit den seitenflächen hab ich meine mühe. Wie kann ich die mit python erstellen. Das endziel wäre ein solid wie im beigefügten screen. (der ist importiert mittels ifc.)wmayer wrote:Der Vollständigkeit halber hier die Triangulierung dazu (dafür benötigt man git commit 62da383):Code: Select all
import ReverseEngineering as Reen points=App.ActiveDocument.terrain.Points mesh=Reen.triangulate(points, 10000, 3.5) import Mesh Mesh.show(mesh)
- Attachments
-
- baugrubensolid.png (274.88 KiB) Viewed 3664 times
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Leider (noch) nicht mit FreeCAD.Wow, ist zwar nicht das womit ich sinnvoll weiterarbeiten kann, aber wie geht das ?!?
Mit Python ist das durchaus machbar, aber ich habe (für das obige Beispiel) den Shape builder verwendet. Dazu muss man zuerst aus dem Mesh in Shape erzeugen, dann geht man zu den vier Eckpunkten um die Koordinaten zu erfahren. Da die Fläche (mehr oder weniger) in Richtung z-Achse zeigt, erstellt man vier neue Punkte mit jeweils denselben x-,y-Koordinaten und z entsprechend so, dass die vier Punkte auf einer Ebene liegen.Die Grundfläche wüsste ich noch, aber mit den seitenflächen hab ich meine mühe. Wie kann ich die mit python erstellen. Das endziel wäre ein solid wie im beigefügten screen. (der ist importiert mittels ifc.)
Nun hat man alles beisammen, um den Shape builder zu starten. Zunächst erstellt man sich die acht Kanten und dann die fünf Flächen. Danach baut man aus den Flächen eine Shell und dann ein Solid.
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
So, jetzt geht's doch noch: git commit 67d8469Leider (noch) nicht mit FreeCAD.
Beispiel:
Code: Select all
import ReverseEngineering as Reen
points = App.ActiveDocument.terrain.Points
data = [(i.x,i.y,i.z) for i in points.Points]
# erster Versuch mit Standardwerten, d.h. Polynom der Ordnung 4 (d.h. Grad 3) und 6 Kontrollpunkten jeweils in u und v
surf=Reen.approxSurface(data)
shape=App.ActiveDocument.addObject("Part::Spline")
shape.Shape=surf.toShape()
# zweiter Versuch mit Polynom der Ordnung 5 und 16 Kontrollpunkten jeweils in u und v
surf=Reen.approxSurface(data,5,5,16,16)
shape=App.ActiveDocument.addObject("Part::Spline")
shape.Shape=surf.toShape()
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Mit git commit fe7c3cd
Code: Select all
import ReverseEngineering as Reen
points = App.ActiveDocument.terrain.Points
data = [(i.x,i.y,i.z) for i in points.Points]
surf=Reen.approxSurface(data,5,5,16,16,True,0.1,0.5,0.2,0.3,5,True,1.2)
shape=App.ActiveDocument.addObject("Part::Spline")
shape.Shape=surf.toShape()
# Keywords
surf=Reen.approxSurface(Points=data,OrderU=5,OrderV=5,PolesU=16,PolesV=16,Smooth=True,Weight=0.1,First=0.5,Second=0.2,Third=0.3,Iterations=5,Correction=True,PatchFactor=1.2)
shape=App.ActiveDocument.addObject("Part::Spline")
shape.Shape=surf.toShape()
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Zum glück ist pcl in windows dev version integriert, da konnte ich grad mal schnell testen Wie sieht das auf linux aus, muss FreeCAD mit pcl übersetzt werden oder muss eine bestimmte pcl library oder binary installiert werden ? Braucht es eine bestimmte version ?... Dafür muss man pcl vorher installieren...
Für debian jessie gibt es pakete ... https://packages.debian.org/source/jessie/pcl
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Ja, es gibt den Schalter FREECAD_USE_PCL, der aktiviert werden muss.
Re: Punkte (bzw. Koordinaten) aus Tabelle importieren
Update:
git commit c336f0757c ändert die Keywords, so dass sie mit den Attributen einer Part.BSplineSurface übereinstimmen.
Die Änderungen:
OrderU => UDegree (Achtung: es gilt: Ordnung = Grad + 1)
OrderV => VDegree
PolesU => NbUPoles
PolesV => NbVPoles
und:
First => Grad (Gewichtung des quadrierten Gradienten, 1. Glättungsterm)
Second => Bend (Gewichtung der Biegeenergie (2. Glättungsterm))
Third => gestrichen, da gelten muss: Grad, Bend, Grad+Bend € [0, 1] (Krümmungsänderung, 3. Glättungsterm)
git commit c336f0757c ändert die Keywords, so dass sie mit den Attributen einer Part.BSplineSurface übereinstimmen.
Code: Select all
surf=Reen.approxSurface(Points=data,UDegree=4,VDegree=4,NbUPoles=16,NbVPoles=16,Smooth=True,Weight=0.1,Grad=0.5,Bend=0.2,Iterations=5,Correction=True,PatchFactor=1.2)
OrderU => UDegree (Achtung: es gilt: Ordnung = Grad + 1)
OrderV => VDegree
PolesU => NbUPoles
PolesV => NbVPoles
und:
First => Grad (Gewichtung des quadrierten Gradienten, 1. Glättungsterm)
Second => Bend (Gewichtung der Biegeenergie (2. Glättungsterm))
Third => gestrichen, da gelten muss: Grad, Bend, Grad+Bend € [0, 1] (Krümmungsänderung, 3. Glättungsterm)