from numpy import sin, cos, sqrt, array, linspace, pi
import FreeCAD as App
import Part
num_points = 100
t = linspace(0, pi * 2. / 3., num_points )
A = array([sin(t), -0.5 - cos(t), 0 * t]).T
B = array([t * 0., 0.5 - cos(t) / (1. + cos(t)), sqrt(1. + 2 * cos(t))/ (1. + cos(t))]).T
D = Part.BSplineSurface()
D.interpolate([[App.Vector(*v) for v in A], [App.Vector(*v) for v in B]])
Part.show(D.toShape())