Ich habe jetzt einen Weg gefunden, um eine symmetrische Kurve zu erzeugen. Der Trick dabei ist es, nur die eine Hälfte der Kontrollpunkte zu nehmen und zu spiegeln. Somit hat man schon einmal ein symmetrisches Kontrollnetz. Im zweiten Schritt nimmt man dann die Methode, um die Kurve aus den Kontrollpunkten zu setzen.
Code: Select all
from FreeCAD import Base
pts=[]
pts.append(Base.Vector(10.106740,-0.173045,110.000000))
pts.append(Base.Vector(10.876900,12.552288,110.000000))
pts.append(Base.Vector(2.146670,24.053253,110.000000))
pts.append(Base.Vector(10.568193,33.859135,110.000000))
pts.append(Base.Vector(22.640881,26.377998,110.000000))
pts.append(Base.Vector(33.179409,29.244604,110.000000))
pts.append(Base.Vector(46.792278,29.475332,110.000000))
pts.append(Base.Vector(57.932823,26.863115,110.000000))
pts.append(Base.Vector(69.864944,32.936234,110.000000))
pts.append(Base.Vector(81.339508,27.226950,110.000000))
pts.append(Base.Vector(93.168350,29.244604,110.000000))
pts.append(Base.Vector(106.781219,29.475332,110.000000))
pts.append(Base.Vector(118.208069,27.469503,110.000000))
pts.append(Base.Vector(129.161713,33.628414,110.000000))
pts.append(Base.Vector(137.698593,24.399343,110.000000))
pts.append(Base.Vector(128.637985,12.673570,110.000000))
pts.append(Base.Vector(129.969254,-0.173045,110.000000))
pts.append(Base.Vector(129.123093,-12.188456,110.000000))
pts.append(Base.Vector(137.813950,-24.283981,110.000000))
pts.append(Base.Vector(129.853882,-34.205227,110.000000))
pts.append(Base.Vector(117.601677,-26.984392,110.000000))
pts.append(Base.Vector(106.550491,-29.013878,110.000000))
pts.append(Base.Vector(93.514435,-29.590694,110.000000))
pts.append(Base.Vector(82.105621,-26.693552,110.000000))
pts.append(Base.Vector(70.095673,-33.282322,110.000000))
pts.append(Base.Vector(59.481319,-26.922842,110.000000))
pts.append(Base.Vector(46.330826,-29.359968,110.000000))
pts.append(Base.Vector(32.948681,-29.244606,110.000000))
pts.append(Base.Vector(22.597166,-25.847414,110.000000))
pts.append(Base.Vector(10.568193,-33.859138,110.000000))
pts.append(Base.Vector(2.377396,-24.168617,110.000000))
pts.append(Base.Vector(11.240733,-13.886350,110.000000))
import Part
spline=Part.BSplineCurve()
spline.interpolate(pts, True)
p=spline.getPoles()[9:26]
spline.translate((-p[0].x,-p[0].y,-p[0].z))
p=spline.getPoles()[9:26]
c=Part.BSplineCurve()
q=[]
q.extend(p)
for i in reversed(p[1:-1]):
q.append(App.Vector(-i.x,i.y,i.z))
c.buildFromPoles(q,True,3)
c.translate((p[0].x,p[0].y,p[0].z))
App.newDocument()
App.ActiveDocument.addObject("Part::Spline","Symmetric").Shape=c.toShape()
App.ActiveDocument.addObject("Part::Spline","Nonsymmetric").Shape=spline.toShape()
Das ist so gewollt.