Bspline abhängig parametrisch an Sketch hängen, wie?

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

Bspline abhängig parametrisch an Sketch hängen, wie?

Post by freecad-heini-1 »

Gibt es irgend eine Möglichkeit die Stützpunkte eines Bspline nachträglich parametrisch zu ändern?
Super wäre, wenn es an einen Sketch gebunden wäre. Ändert man die Punkte des Sketches soll sich der Bspline bitte auch mit ändern.
Geht das irgendwie?
bspline-an-kurve.gif
bspline-an-kurve.gif (777.82 KiB) Viewed 2380 times
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by microelly2 »

Mir ist nicht klar, warum es diese Funktion in Draft nicht gibt,
hier schon mal mal zum Testen:
Sketch erzeugen,
Skript aufrufen
Wenn man den Sketch ändert, passt sich die BSpline an.

Edit: execute-Methode hizugefügt ..

Code: Select all

# -*- coding: utf-8 -*-
#-------------------------------------------------
#-- bspline on top of a sketch
#--
#-- microelly 2016 v 0.1
#--
#-- GNU Lesser General Public License (LGPL)
#-------------------------------------------------
# bspline von poles erzeugen


class PartFeature:
	def __init__(self, obj):
		obj.Proxy = self


class MyBSpline(PartFeature):
	def __init__(self, obj):
		PartFeature.__init__(self, obj)
		obj.addProperty("App::PropertyLink","wire","Wire","")


	def onChanged(self, fp, prop):
		if prop=="wire" and fp.wire <> None:
			w=fp.wire
			eds=Part.__sortEdges__(w.Shape.Edges)
			pts=[]
			for e in eds:
				ees=e.discretize(2)
				pts += ees[0:-1]

			pts.append(ees[-1])

			sp=Part.BSplineCurve()
			sp.increaseDegree(3)
			sp.buildFromPoles(pts)
			fp.Shape=sp.toShape()

	def execute(self, fp):
		if  fp.wire <> None:
			w=fp.wire
			eds=Part.__sortEdges__(w.Shape.Edges)
			pts=[]
			for e in eds:
				ees=e.discretize(2)
				pts += ees[0:-1]

			pts.append(ees[-1])

			sp=Part.BSplineCurve()
			sp.increaseDegree(3)
			sp.buildFromPoles(pts)
			fp.Shape=sp.toShape()
		pass



class ViewProviderMyBSpline:
	def __init__(self, obj):
		obj.Proxy = self
		self.Object=obj

def makeMySpline():

	a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","MySpline")
	MyBSpline(a)
	ViewProviderMyBSpline(a.ViewObject)
	a.ViewObject.LineColor=(1.00,.00,.00)
	a.ViewObject.LineWidth=1
	return a


a=makeMySpline()
a.wire=App.ActiveDocument.Sketch
Last edited by microelly2 on Mon Oct 24, 2016 6:31 pm, edited 1 time in total.
User avatar
r-frank
Veteran
Posts: 2180
Joined: Thu Jan 24, 2013 6:26 pm
Location: Möckmühl, Germany
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by r-frank »

microelly2 wrote:Mir ist nicht klar, warum es diese Funktion in Draft nicht gibt,
Weil Draft nicht so gedacht war ...
So wie ich es bisher verstanden habe:

Zuerst war da nix (OK, der Geist Gottes schwebte über dem Wasser :D )
Spass beiseite, zuerst kam der Kern, dann zumindest Teile des Mesh-Workbench und dann, nach einer Weile,
die Part-Workbench.
Hauptzweck der Part-Workbench: CSG (Constructive Solid Geometry) Modelling. Also Primitives einfügen und Boolsche Operationen.
Part Extrude und Part Revolve kamen wohl erst später hinzu. Man kann ja Extrude und Revolve auch für Flächenkonstruktion
nehmen (wie Willfried schon gezeigt hat).
Dann kam Part Design mit dem Grundgedanken, Skizzen zu verwenden.
Dann kam Yorik als Architekt ins Spiel. Er bekommt wohl oft Daten von Fremdsystemen und suchte nach einer Möglichkeit,
die Daten für FreeCAD als Arch-Objekte zu definieren und evtl. die Solids noch ein wenig nachbearbeiten zu können (Parametrik
völlig uninteressant) - so entstand die Draft-Workbench mit "fire and forget"-Werkzeugen (Snaps, Wires ...)

Trotzdem bin ich auch dafür, solche Möglichkeiten zu nutzen, danke Thomas ...

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 :)
freecad-heini-1
Veteran
Posts: 7790
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by freecad-heini-1 »

Vielen Dank Thomas.
Leider funktioniert das Skript bei mir nicht, siehe:
bspline-aktualisieren.gif
bspline-aktualisieren.gif (561.91 KiB) Viewed 2358 times
Ich bin jetzt gleich in der Singstunde für 2-3 Std..
freecad-heini-1
Veteran
Posts: 7790
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by freecad-heini-1 »

Ein kurzes animiertes Gif wie es funktioniert wäre fein.
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by microelly2 »

freecad-heini-1 wrote:Ein kurzes animiertes Gif wie es funktioniert wäre fein.
Ich habe die letze Änderung nicht ins Forum übernommen :oops:
Jetzt ist die execute-Methode dabei und es sollte gehen
https://youtu.be/gX3URZQGz4c

Ich werde den Skript, wenn er fertig ist, in die Nurbs WB stellen
Da kann man dann Skizzen machen und daraus die Bsplines und die Nurbs erzeugen und Part Design als Editor für die Kontrollpunkte benutzen.
Aber erstmal testen
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by microelly2 »

Ich hab den Skript jetzt mal hier
https://github.com/microelly2/freeCAD_m ... bspline.py
Es gibt drei Möglickkeiten, die Punkte zu interpretieren
Pole, Interpolation und Approximation
Bei Approximation gibts noch viele Schräubchen, ich muss aber erstmal verstehen, was die alle bringen,
dann kommen die weiteren Paramewter
Attachments
bp_167.png
bp_167.png (40.09 KiB) Viewed 2320 times
bp_168.png
bp_168.png (39.69 KiB) Viewed 2320 times
bp_169.png
bp_169.png (38.83 KiB) Viewed 2320 times
freecad-heini-1
Veteran
Posts: 7790
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by freecad-heini-1 »

Vielen Dank Thomas. Ich habe das heute morgen vor der Arbeit zuhause am Notebook getestet, mit neuem github Skript. Leider hat es nicht funktioniert. Nach dem Ändern des Sketches und Anwenden des Skriptes ändert sich der Bspline leider nicht. Ich sehe Body und Body Origin in Deiner Combo-Ansicht, d.h. Du nutzt die 0.17.
Was heißt Nurbs WB, gibt es die schon irgendwo und ich habe sie übersehen?

Welche Vorraussetzungen benötige ich damit das Skript funktioniert?
User avatar
microelly2
Veteran
Posts: 4688
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by microelly2 »

Ich hab in den Skript alle Testdaten rein. Einfach im leeren FreeCAD ausführen.
Dann ist ein Sketch und ein Bspline da
Sketch ändern -> BSpline ändert sich.
BSpline-Parameter ändern -> BSpline ändert sich.
Mit der 0.16 läuft er auch - nur die Approximationsmethoden außer Default gibt es da noch nicht

Was in der 0.17 geht:
http://freecadbuch.de/doku.php?id=blog: ... roximieren

Die Nurbs WB:
https://github.com/microelly2/freecad-nurbs
viewtopic.php?f=3&t=16473
freecad-heini-1
Veteran
Posts: 7790
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Bspline abhängig parametrisch an Sketch hängen, wie?

Post by freecad-heini-1 »

Ein kurzes 10 minütiges Video zum Skript von heute morgen:
http://www.dailymotion.com/video/x4yzrz9
Wo liegt mein Fehler?
Post Reply