Punkte (bzw. Koordinaten) aus Tabelle importieren

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

WICHTIG: Bitte zuerst lesen, bevor Sie posten
wmayer
Founder
Posts: 20324
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by wmayer »

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.
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.
Attachments
terrain-solid.FCStd
(290.09 KiB) Downloaded 166 times
wmayer
Founder
Posts: 20324
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by wmayer »

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)
markus
Posts: 8
Joined: Mon Oct 12, 2015 3:14 pm

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by markus »

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
Hallo 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
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by bernd »

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.
Wow, ist zwar nicht das womit ich sinnvoll weiterarbeiten kann, aber wie geht das ?!?
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)
YEAH ist genau was ich brauche :D . 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.)
Attachments
baugrubensolid.png
baugrubensolid.png (274.88 KiB) Viewed 3664 times
wmayer
Founder
Posts: 20324
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by wmayer »

Wow, ist zwar nicht das womit ich sinnvoll weiterarbeiten kann, aber wie geht das ?!?
Leider (noch) nicht mit FreeCAD.
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.)
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.

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

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by wmayer »

Leider (noch) nicht mit FreeCAD.
So, jetzt geht's doch noch: git commit 67d8469

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()
Im Property editor kann man sich das Kontrollnetz anzeigen lassen.
wmayer
Founder
Posts: 20324
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by wmayer »

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()
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by bernd »

... Dafür muss man pcl vorher installieren...
Zum glück ist pcl in windows dev version integriert, da konnte ich grad mal schnell testen :D 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 ?

Für debian jessie gibt es pakete ... https://packages.debian.org/source/jessie/pcl
wmayer
Founder
Posts: 20324
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by wmayer »

Ja, es gibt den Schalter FREECAD_USE_PCL, der aktiviert werden muss.
wmayer
Founder
Posts: 20324
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Punkte (bzw. Koordinaten) aus Tabelle importieren

Post by wmayer »

Update:

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