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
Veteran
Posts: 7788
Joined: Tue Jan 07, 2014 11:10 am
Contact:

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

Post by freecad-heini-1 »

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
Veteran
Posts: 53919
Joined: Tue Mar 17, 2015 9:14 am

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

Post by chrisb »

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.
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
herbk
Veteran
Posts: 2657
Joined: Mon Nov 03, 2014 3:45 pm
Location: Windsbach, Bavarya (Germany)

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

Post by herbk »

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 1212 times
flaechen_herbk.FCStd
(18.5 KiB) Downloaded 21 times
Gruß Herbert
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

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

Post by microelly2 »

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: 399
Joined: Fri Aug 11, 2017 2:19 pm

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

Post by apeltauer »

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
Veteran
Posts: 7788
Joined: Tue Jan 07, 2014 11:10 am
Contact:

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

Post by freecad-heini-1 »

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
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

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

Post by microelly2 »

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: 399
Joined: Fri Aug 11, 2017 2:19 pm

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

Post by apeltauer »

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
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

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

Post by microelly2 »

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: 399
Joined: Fri Aug 11, 2017 2:19 pm

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

Post by apeltauer »

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 1098 times
Post Reply