Fläche aus Messwerten

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

WICHTIG: Bitte zuerst lesen, bevor Sie posten
Jochen
Posts: 20
Joined: Fri May 29, 2015 12:25 pm

Re: Fläche aus Messwerten

Post by Jochen »

Was bedeutet das für mich?
Für mich klingt das, als ob es ein Work-around gäbe.

Gruß,
Jochen
Jochen

--------------------------------------------
Freecad 0.17 daily build
+Assembly2
+Drawing Dimensioning

Ubuntu 16.04 64 bit
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Fläche aus Messwerten

Post by microelly2 »

Jochen wrote:Was bedeutet das für mich?
Für mich klingt das, als ob es ein Work-around gäbe.

Gruß,
Jochen
Auf die Schnelle fallen mir zwei Wege ein:
viewtopic.php?f=24&t=5893
und
viewtopic.php?f=8&t=6973&start=40#p111992

Ich hab aber heute keine Zeit mehr, am Wochenende kann ich meine geodaten.Methode für deine Daten anpassen.
User avatar
r-frank
Veteran
Posts: 2180
Joined: Thu Jan 24, 2013 6:26 pm
Location: Möckmühl, Germany
Contact:

Re: Fläche aus Messwerten

Post by r-frank »

Hallo.

Du könntest auch Meshlab für so was verwenden.

Deutsches Tutorial auf Youtube.

Roland
Deutsche FreeCAD Tutorials auf Youtube
My GrabCAD FreeCAD-Projects
FreeCAD lessons for beginners in english

Native german speaker - so apologies for my english, no offense intended :)
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Fläche aus Messwerten

Post by bernd »

Jochen wrote:Was bedeutet das für mich?
Für mich klingt das, als ob es ein Work-around gäbe.
wmayer wrote:Allerdings für Versionen neuer als Trusty sollte der pcl-Support grundsätzlich möglich sein.
Damit meinte werner, dass auf neueren ubuntu versionen als trusty es gundätzlich möglich sein sollte FreeCAD mit point cloud zu kompilieren. Sieht wohl so aus als hat das bisher kaum jemand gemacht. Ich muss selber gestehen, das ich auf meinem Debian Jessie es noch nicht versucht habe FreeCAD mit point cloud zu übersetzen. Ich brauche es so selten, dass ich dann immer schnell windows boote und die dev version verwende. Ich werde das mal in einer freien minute versuchen.
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Fläche aus Messwerten

Post by microelly2 »

Hier mal der Skript zurt Erzeugung einer Interpolation deiner Daten,
die Ergebnisdatei war zu gross fürs Forum.
Anwendung:
1. Ein neues Dkument erzeugen und
2. den Skript im Python Fenster ausführen.


Es ist jetzt eine Fläche mit 100 x 100 Punkten Dünnblech interpoliert.


Ich werde den Skript parametrisierbar machen, dann kann er auf beliebige Datenmengen mit Messpunkten angewendet werden.

Am Ende des Skripts kommt nochmal eine Visualisierung der Höhen mit mathplotlib, dieses Fenster muss man schließen und dann ist die Figur "Interpolation 100" fertig.

Code: Select all



import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate

hh=10

datatext='''1 1 1
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1
1 7 1
1 8 1
1 9 1
1 10 1
2 1 1
2 2 1
2 3 1.2
2 4 1.2
2 5 1.2
2 6 1
2 7 1
2 8 1
2 9 1
2 10 1
3 1 1
3 2 1
3 3 1.2
3 4 1.3
3 5 1.2
3 6 1
3 7 1
3 8 1
3 9 1
3 10 1
4 1 1
4 2 1
4 3 1.2
4 4 1.2
4 5 1.2
4 6 1
4 7 1
4 8 1
4 9 1
4 10 1
5 1 1
5 2 1
5 3 1
5 4 1
5 5 1
5 6 1
5 7 1
5 8 1
5 9 1
5 10 1
6 1 1
6 2 0.9
6 3 0.9
6 4 0.9
6 5 1
6 6 1
6 7 1
6 8 1
6 9 1
6 10 1
7 1 1
7 2 0.9
7 3 0.8
7 4 0.9
7 5 1
7 6 1
7 7 1
7 8 1
7 9 1
7 10 1
8 1 1
8 2 0.9
8 3 0.9
8 4 0.9
8 5 1
8 6 1
8 7 1
8 8 1
8 9 1
8 10 1
9 1 1
9 2 1
9 3 1
9 4 1
9 5 1
9 6 1
9 7 1
9 8 1
9 9 1
9 10 1
10 1 1
10 2 1
10 3 1
10 4 1
10 5 1
10 6 1
10 7 1
10 8 1
10 9 1
10 10 1
'''


if 1:
	data=[]
	x=[]; y=[]; z=[]
	if len(datatext) <> 0:
		lines=datatext.split('\n')
		for zn,l in enumerate(lines):
			words=l.split()
			try:
				[xv,yv,zv]=[float(words[0]),float(words[1]),float(words[2])]
				print xv+yv+zv
				x.append(xv)
				y.append(yv)
				z.append(zv)
			except:
				print "Fehler in Zeile ",zn


if 1:

	x=np.array(x)
	y=np.array(y)
	z=np.array(z)

	# Set up a regular grid of interpolation points
	grids=50 # 100  0.93
	grids=100 # 100  
	
	
	xi, yi = np.linspace(x.min(), x.max(), grids), np.linspace(y.min(), y.max(), grids)
	xi, yi = np.meshgrid(xi, yi)

	# Interpolate rbf
#	rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
	rbf = scipy.interpolate.Rbf(x, y, z, function='cubic')
	rbf = scipy.interpolate.Rbf(x, y, z, function='thin_plate')
#	rbf = scipy.interpolate.Rbf(x, y, z, function='multiquadradic')
#	rbf = scipy.interpolate.Rbf(x, y, z, function='gaussian')


	# interpolate 2d
 	# rbf = scipy.interpolate.interp2d(x, y, z, kind='cubic')
 	# rbf = scipy.interpolate.interp2d(x, y, z)

	zi = rbf(xi, yi)
	# zi ist grids * grids

if 1:
	import Draft

	lx,ly=zi.shape
	ws=[]

	for ix in range(lx):
		points=[]
		for iy in range(ly):
			points.append(FreeCAD.Vector(ix,iy,hh*zi[ix,iy]))

		w=Draft.makeWire(points,closed=False,face=False,support=None)
		ws.append(w)
		FreeCAD.activeDocument().recompute()
		FreeCADGui.updateGui()
		Gui.SendMsgToActiveView("ViewFit")

	ll=FreeCAD.activeDocument().addObject('Part::Loft','elevation')
	ll.Sections=ws
	ll.Ruled = True
	ll.ViewObject.ShapeColor = (0.00,0.67,0.00)
	ll.ViewObject.LineColor = (0.00,0.67,0.00)
	for w in ws:
		w.ViewObject.Visibility=False
	ll.Placement.Base=FreeCAD.Vector(10.0*grids/100,10.0*grids/100,0)


	lc=Draft.clone(ll)
	ll.ViewObject.Visibility=False
	lc.Label="Interpolation Gitter " + str(grids)
	#lc.Scale=(0.95,0.95,1.0)
	lc.Scale=(0.92,0.92,1.0)
	
	FreeCAD.activeDocument().recompute()
	FreeCADGui.updateGui()


for n in range(x.shape[0]):
	a=App.ActiveDocument.addObject("Part::Cylinder","YY" + str(n) )
	a.Radius=1.0*grids/100
	a.Height=1.0/100
	a.Placement.Base=FreeCAD.Vector(10*y[n]*grids/100,10*x[n]*grids/100,hh*z[n])
	
	a.ViewObject.ShapeColor=(1.0,0.0,1.0)
	App.activeDocument().recompute()




if 1:
	plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower',
			   extent=[x.min(), x.max(), y.min(), y.max()])
	plt.scatter(x, y, c=z)
	plt.colorbar()
	plt.show()


bp_010.png
bp_010.png (75.02 KiB) Viewed 2560 times
Am Ende des Skripts kommt nochmal eine Visualisierung der Höhen mit mathplotlib, dieses Fenster muss man schließen und dann ist die Figur "Interpolation 100" fertig.
bp_011.png
bp_011.png (64.55 KiB) Viewed 2560 times
Jochen
Posts: 20
Joined: Fri May 29, 2015 12:25 pm

Re: Fläche aus Messwerten

Post by Jochen »

Hallo microelly2,
ich weiß gar nicht was ich sagen soll! Perfekt!
Ich habe nur SciPy nachinstallieren müssen und dann hat's auch schon funktioniert. Bin gespannt, was ich damit noch alles machen kann.

Vielen Dank und Gruß,
Jochen
Jochen

--------------------------------------------
Freecad 0.17 daily build
+Assembly2
+Drawing Dimensioning

Ubuntu 16.04 64 bit
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Fläche aus Messwerten

Post by freecad-heini-1 »

Phantastisch! Super Leute hier!
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Fläche aus Messwerten

Post by microelly2 »

Freut mich, dass es bei euch funktioniert,
es sind noch einige bugs drin
aber ich glaube, mein nächstes gartenbauprojekt bekomm ich damit simuliert:
markante punkte messen, dann flächenmodell als vierecksmesh ausrechen lassen und dann kann man beliebig genau planen.

ich stell den skript jetzt mal in meine rekonstruktions workbench
https://raw.githubusercontent.com/micro ... iongrid.py
dort wird er die kommenden tage aktualisiert: dialog mit parametren, datenimport der pointcloud.

mittlerweile passen die messpunkte schon genau.
Attachments
bp_012.png
bp_012.png (121.89 KiB) Viewed 2547 times
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Fläche aus Messwerten

Post by microelly2 »

Ich habe mal pcl auf ubuntu installiert und die pcl-python bindings von http://strawlab.github.io.
Mit der Python-Schnittstelle funktioniert schon mal: Segmentation und Filter.
http://pointclouds.org/documentation/tu ... n-tutorial

Damit kann man geometrische Strukturen (Ebene, Zylinder ..) erkennen und nachbearbeiten.
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Fläche aus Messwerten

Post by bernd »

Gibt es denn irgendwo auch etwas um aus so einer "Gartenlandschaft" (einer triangulierten Punktoberfläche) dann in FreeCAD Höhenlinien zu errechnen?
Post Reply