Mehrere Flächen zu einer B-Splinefläche vereinen

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

WICHTIG: Bitte zuerst lesen, bevor Sie posten
freecad-heini-1
Posts: 6003
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby freecad-heini-1 » Thu Jan 24, 2019 8:48 am

apeltauer wrote:
Thu Jan 24, 2019 7:27 am
ich möchte eine einzige Fläche, da manche Funktion von OpenCasCade sich auf eine einzelne Fläche beziehen. Siehe Beispiel.
Capture.PNG
Wenn es eine Fläche ist kann ich einen Solid erstellen. Wenn es mehrere Flächen sind wird die Projektion an der Kante geschnitten...
Hallo apeltauer,
vielen Dank für die gute Beschreibung. Damit kann man etwas anfangen. Bei manch anderen Usern braucht man hellseherische Fähigkeiten wegen mangelnder Problembeschreibung.
Mir ist in der Curves- und Surface Workbench keine Funktion bekannt, die Zwischenberandungskurven entfernt.

Ich hatte vor einiger Zeit die gleiche Frage, Kollege UR_ half mit einem Skript, siehe:
https://forum.freecadweb.org/viewtopic. ... 54#p232154
Ob das in diesem Fall funktioniert, eher nicht. Nachtrag, hab es getestet, es geht leider nicht.

Was auf jeden Fall geht ist die Fläche per Schnitte in U und V Kurven zu zerschneiden. Die Kurven mittels Curves-WB in Bspline-Kurven zu konvertieren, Option Corner Break false und aus den U und V Kurven entweder eine (experimentell aber gut) Gordon-Surface zu erzeugen oder in der Surface-Workbench die Fläche aus den Kurven zu erzeugen.

Für Dich zum Recherchieren, nutze die erweiterte Forensuche und suche nach Corner Break false sowie nach Gordon Surface.
Hier schon mal eine recht gute Beschreibung:
https://forum.freecadweb.org/viewtopic. ... 52#p243552
https://forum.freecadweb.org/viewtopic. ... 62#p206062
https://forum.freecadweb.org/viewtopic. ... 76#p206076

Die Gordon Surface hat Chris_G hier sehr gut beschrieben:
https://forum.freecadweb.org/viewtopic. ... 30#p280130

Kollege Hammax hat den Dreh raus.

Wer die Trickkiste von Freecad kennt, kann damit regelrecht zaubern.

Ich wünsche Dir viel Spaß und Erfolg beim Erforschen von Freecad. Freecad rockt.

Viele Grüße
Wilfried
chrisb
Posts: 19635
Joined: Tue Mar 17, 2015 9:14 am

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby chrisb » Thu Jan 24, 2019 10:08 am

microelly2 wrote:
Thu Jan 24, 2019 8:13 am
Ich denke, in der Curves-WB ist so eine Methode drin.
So ist es. Surface->Join Curve kann die Arcs ersetzen. Die Kurve muss dann unten noch geschlossen werden und kann dann extrudiert werden - ohne die Trennlinien.
herbk
Posts: 1573
Joined: Mon Nov 03, 2014 3:45 pm
Location: Windsbach, Bavarya (Germany)

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby herbk » Thu Jan 24, 2019 12:59 pm

Hi,
apeltauer wrote:
Thu Jan 24, 2019 7:27 am
ich möchte eine einzige Fläche, da manche Funktion von OpenCasCade sich auf eine einzelne Fläche beziehen. Siehe Beispiel.
Wenn es eine Fläche ist kann ich einen Solid erstellen. Wenn es mehrere Flächen sind wird die Projektion an der Kante geschnitten...
Hm, ich kann aus dem Sketch auch ein Solid erstellen wenn er mehrere Flächen hat... - und über die "Flächengrenzen" arbeiten.

Oder hab' ich was falsch verstenden?
Attachments
flaechen_herbk.jpg
flaechen_herbk.jpg (38.58 KiB) Viewed 334 times
flaechen_herbk.FCStd
(18.5 KiB) Downloaded 7 times
Gruß Herbert
User avatar
microelly2
Posts: 4451
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby microelly2 » Thu Jan 24, 2019 1:10 pm

herbk wrote:
Thu Jan 24, 2019 12:59 pm
Hm, ich kann aus dem Sketch auch ein Solid erstellen wenn er mehrere Flächen hat... - und über die "Flächengrenzen" arbeiten.

Oder hab' ich was falsch verstenden?
Es gibt manchmal Methoden, die nur auf einer einzelnen Fläche anwendbar sind und da stört eine Kante, die quer läuft.
Das ist wohl hier der Fall.
User avatar
apeltauer
Posts: 212
Joined: Fri Aug 11, 2017 2:19 pm

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby apeltauer » Thu Jan 24, 2019 1:26 pm

Das folgende Feature kann im Moment nur mit einer einzelnen Fläche umgehen.... siehe (https://forum.freecadweb.org/viewtopic.php?f=9&t=33700)
freecad-heini-1
Posts: 6003
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby freecad-heini-1 » Thu Jan 24, 2019 4:15 pm

apeltauer wrote:
Thu Jan 24, 2019 1:26 pm
Das folgende Feature kann im Moment nur mit einer einzelnen Fläche umgehen.... siehe (https://forum.freecadweb.org/viewtopic.php?f=9&t=33700)
Hallo apeltauer,
die Workbench klingt vielversprechend. Vielen Dank für Deine Arbeit. Ich habe Dir ein Video zur Thematik erstellt.
Bitte mit Ton anschauen und anhören.
https://peertube.mastodon.host/videos/w ... f937efed34
Würde man zwei weitere Schnittkurvem in der quer-Richtung hinzu fügen und vier in die Längsrichtung, wäre das Ergebnis sicher besser.
Meine Absicht ist Dir verschiedene Lösungswege aufzuzeigen. Andererseits muss das Abbilden einer Figur auf eine Fläche nicht so sonderlich genau sein, denn man kann sie Schrift, wenn sie 3mm vertieft sein soll, ruhig um ein- oder zwei zehntel Millimeter verschieben, dann merkt das kaum jemand, im 3D-Druck, Kirche im Dorf lassen.
Viele Grüße
Wilfried
Last edited by freecad-heini-1 on Thu Jan 24, 2019 4:22 pm, edited 1 time in total.
User avatar
microelly2
Posts: 4451
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby microelly2 » Thu Jan 24, 2019 4:17 pm

apeltauer wrote:
Thu Jan 24, 2019 1:26 pm
Das folgende Feature kann im Moment nur mit einer einzelnen Fläche umgehen.... siehe (https://forum.freecadweb.org/viewtopic.php?f=9&t=33700)
Ich dachte mir schon sowas.
Da ist es wirklich einfacher daran zu arbeitn, zwei Flächen zu einer Fläche zu vereinigen als dieses und wahrnscheinlich noch andere Tools zu verallgemeinern.
Wenn wir zwei nicht beschnittene Freiformflächen haben, die sich an einer Segmentgrenze treffen, sollte der Übergang mit gerignem Aufwand machbar sein.
Loft-Seitenflächen haben diese Eigenschaft.
Man muss nur die Grade und Knotenvektoren der gemeinsamen Seite angleichen und dann sollte es gehen, daraus verlustfrei eine Fläche zu machen.
User avatar
apeltauer
Posts: 212
Joined: Fri Aug 11, 2017 2:19 pm

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby apeltauer » Thu Jan 24, 2019 5:01 pm

freecad-heini-1 wrote:
Thu Jan 24, 2019 4:15 pm
apeltauer wrote:
Thu Jan 24, 2019 1:26 pm
Das folgende Feature kann im Moment nur mit einer einzelnen Fläche umgehen.... siehe (https://forum.freecadweb.org/viewtopic.php?f=9&t=33700)
Hallo apeltauer,
die Workbench klingt vielversprechend. Vielen Dank für Deine Arbeit. Ich habe Dir ein Video zur Thematik erstellt.
Bitte mit Ton anschauen und anhören.
https://peertube.mastodon.host/videos/w ... f937efed34
Würde man zwei weitere Schnittkurvem in der quer-Richtung hinzu fügen und vier in die Längsrichtung, wäre das Ergebnis sicher besser.
Meine Absicht ist Dir verschiedene Lösungswege aufzuzeigen. Andererseits muss das Abbilden einer Figur auf eine Fläche nicht so sonderlich genau sein, denn man kann sie Schrift, wenn sie 3mm vertieft sein soll, ruhig um ein- oder zwei zehntel Millimeter verschieben, dann merkt das kaum jemand, im 3D-Druck, Kirche im Dorf lassen.
Viele Grüße
Wilfried
Wie immmer, sehr sehr gut oder besser gesagt der Hammer!
Danke für das Video. Wie du am Schluss schon sagst, wenn die Fläche nicht ganz so kompliziert ist geht es vermutlich richtig gut.
Ich werde morgen mal versuchen ein Logo auf diese Fläche zu setzten....
User avatar
microelly2
Posts: 4451
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby microelly2 » Sat Jan 26, 2019 2:13 pm

Hier mal das Makro, um aus zwei nebeneinander liegenden Loft-Flächen eine zu machen
Man kann dann die Errgebnisfläche mit der nächstne Loft-Flächen verbinden usw.
Ich werde das Makro demnächst erweitern, dass man ganze Ketten nebeneinander liegender Flächen in einem Schritt vereinen kann.

phpBB [video]

Code: Select all

# verbinde zwei Flaechen
import numpy as np
import FreeCADGui as Gui
import FreeCAD,Part

# testcase
#Gui.Selection.clearSelection()
#Gui.Selection.addSelection(App.ActiveDocument.Loft,'Face2')
#Gui.Selection.addSelection(App.ActiveDocument.Shape005,'Face1')

def merge2Faces():
	'''merge two selected faces of a loft to one face'''

	subos=[]
	ss=Gui.Selection.getSelectionEx()
	for s in ss:
		subos += s.SubObjects

	[F1,F2]=subos

	f1=F1.Surface
	f2=F2.Surface

	ud=f1.UDegree
	vd=f1.VDegree
	ud2=f2.UDegree
	vd2=f2.VDegree
	madu=max(ud,ud2)
	madv=max(vd,vd2)

	f1.increaseDegree(madu,madv)
	f2.increaseDegree(madu,madv)

	poles=np.array(f1.getPoles())
	poles2=np.array(f2.getPoles())

	# debug info
	poles.shape
	poles2.shape

	# order data
	poles[0,0]
	poles[0,-1]

	poles[-1,0]
	poles[-1,-1]


	poles2[0,0]
	poles2[0,-1]

	poles2[-1,0]
	poles2[-1,-1]

	mu=f1.getUMultiplicities()
	mv=f1.getVMultiplicities()

	mu2=f2.getUMultiplicities()
	mv2=f2.getVMultiplicities()

	if  ((FreeCAD.Vector(poles[-1,0])-FreeCAD.Vector(poles2[0,0])).Length<0.1)and \
		((FreeCAD.Vector(poles[-1,-1])-FreeCAD.Vector(poles2[0,-1])).Length<0.1):
		pass
	elif ((FreeCAD.Vector(poles[-1,0])-FreeCAD.Vector(poles2[-1,0])).Length<0.1)and \
		((FreeCAD.Vector(poles[-1,-1])-FreeCAD.Vector(poles2[-1,-1])).Length<0.1):
		print "# flip u in f2"
		poles2=poles2[::-1]	
		mu2=mu2[::-1]
	elif ((FreeCAD.Vector(poles[0,0])-FreeCAD.Vector(poles2[-1,0])).Length<0.1)and \
		((FreeCAD.Vector(poles[0,-1])-FreeCAD.Vector(poles2[-1,-1])).Length<0.1):
		print "# flip u in f1,f2"
		poles2=poles2[::-1]
		mu2=mu2[::-1]
		poles=poles[::-1]
		mu=mu[::-1]
	elif ((FreeCAD.Vector(poles[0,0])-FreeCAD.Vector(poles2[0,0])).Length<0.1)and \
		((FreeCAD.Vector(poles[0,-1])-FreeCAD.Vector(poles2[0,-1])).Length<0.1):
		print "# flip u in f1"
		poles=poles[::-1]
		mu=mu[::-1]
	else:
		raise Exception("Flaechen passen noch nicht zusammen")

	assert((FreeCAD.Vector(poles[-1,0])-FreeCAD.Vector(poles2[0,0])).Length<0.1)
	assert((FreeCAD.Vector(poles[-1,-1])-FreeCAD.Vector(poles2[0,-1])).Length<0.1)


	polesall=np.concatenate([poles[:-1],poles2])
	polesall.shape

	assert (mv==mv2)

	mau=mu[:-1]+[mu[-1]-1]+mu2[1:]
	kau=range(len(mau))

	bs=Part.BSplineSurface()
	bs.buildFromPolesMultsKnots(polesall,mau,mv,range(len(mau)),range(len(mv)),False,False,madu,madv)
	Part.show(bs.toShape())
User avatar
apeltauer
Posts: 212
Joined: Fri Aug 11, 2017 2:19 pm

Re: Mehrere Flächen zu einer B-Splinefläche vereinen

Postby apeltauer » Mon Jan 28, 2019 10:01 am

Hab das jetzt auch mal mit "freecad-heini-1"'s Methode versucht.
Ich habe aus einem Loft mit mehreren Flächen eine einzelne erstellt...
@freecad-heini-1 kannst du deine erstellte Fläche hochladen? Ich würde gerne meine neue Funktion testen...

mfG Manuel
Attachments
Capture.PNG
Capture.PNG (94.34 KiB) Viewed 220 times