I did a quick setup to test the interpolator
here it is fwiw:
import rhinoscriptsyntax as rs
import Rhino
def InterpolateCosineMissingXYZ(start_index,missing_steps,x_interpolator,y_interpolator,z_interpolator):
for T in xrange(1,missing_steps):
x = x_interpolator.InterpolateCosine(start_index + (T/missing_steps) )
y = y_interpolator.InterpolateCosine(start_index+ (T/missing_steps) )
z = z_interpolator.InterpolateCosine(start_index+ (T/missing_steps) )
rs.AddPoint(x,y,z)
def InterpolateCatmullRomMissingXYZ(start_index,missing_steps,x_interpolator,y_interpolator,z_interpolator):
for T in xrange(1,missing_steps):
x = x_interpolator.InterpolateCatmullRom(start_index + (T/missing_steps) )
y = y_interpolator.InterpolateCatmullRom(start_index+ (T/missing_steps) )
z = z_interpolator.InterpolateCatmullRom(start_index+ (T/missing_steps) )
rs.AddPoint(x,y,z)
def InterpolateCubicMissingXYZ(start_index,missing_steps,x_interpolator,y_interpolator,z_interpolator):
for T in xrange(1,missing_steps):
x = x_interpolator.InterpolateCubic(start_index + (T/missing_steps) )
y = y_interpolator.InterpolateCubic(start_index+ (T/missing_steps) )
z = z_interpolator.InterpolateCubic(start_index+ (T/missing_steps) )
rs.AddPoint(x,y,z)
def Main():
pt_objs = rs.GetObjects('select points',filter = 1)
pts = [rs.PointCoordinates(obj) for obj in pt_objs]
#sort the points along the x axis to sanitize input for testing
pts.sort(key = lambda pt : pt.X)
x_interpolator = Rhino.Geometry.Interpolator([pt.X for pt in pts])
y_interpolator = Rhino.Geometry.Interpolator([pt.Y for pt in pts])
z_interpolator = Rhino.Geometry.Interpolator([pt.Z for pt in pts])
startA,stepsA = 7,3
startB,stepsB = 22,4
startC,stepsC = 36,5
if True:
InterpolateCosineMissingXYZ(startA,stepsA,x_interpolator,y_interpolator,z_interpolator)
InterpolateCosineMissingXYZ(startB,stepsB,x_interpolator,y_interpolator,z_interpolator)
InterpolateCosineMissingXYZ(startC,stepsC,x_interpolator,y_interpolator,z_interpolator)
if True:
InterpolateCatmullRomMissingXYZ(startA,stepsA,x_interpolator,y_interpolator,z_interpolator)
InterpolateCatmullRomMissingXYZ(startB,stepsB,x_interpolator,y_interpolator,z_interpolator)
InterpolateCatmullRomMissingXYZ(startC,stepsC,x_interpolator,y_interpolator,z_interpolator)
if True:
InterpolateCubicMissingXYZ(startA,stepsA,x_interpolator,y_interpolator,z_interpolator)
InterpolateCubicMissingXYZ(startB,stepsB,x_interpolator,y_interpolator,z_interpolator)
InterpolateCubicMissingXYZ(startC,stepsC,x_interpolator,y_interpolator,z_interpolator)
Main()
result with lines for clarity:
I think there is more to it than my setup so maybe it’s worth digging deeper, let me know what you find
-Willem