Similar to Adobe Illustrators 2d curve blend, this tool takes a series of curves and creates interpolated steps between them.
Rhino Script
Option Explicit 'Script written by <David Mans> 'Script copyrighted by <NeoArchaic Design> 'Script version Sunday, May 03, 2009 1:54:38 PM Call Main() Sub Main() Dim Curves, SM, DN Curves = Rhino.GetObjects("Select Curves", 4) If isNull(Curves) Then Exit Sub SM = Rhino.GetBoolean("Blend Type", array("Type", "Straight", "Smooth"), array(False)) If isNull(SM) Then Exit Sub DN = Rhino.GetReal("Blend Density", 5, 1) If isNull(SM) Then Exit Sub Call Rhino.EnableRedraw(False) If uBound(Curves) > 0 Then Call BlendCurves(Curves, SM(0), DN) Else Call Rhino.Print("2 or more curves required") End If Call Rhino.EnableRedraw(True) End Sub Function BlendCurves(arrCurves, blnSmooth, dblDensity) BlendCurves = Null Dim i,j,p Dim count, max, dMax Dim arrptCount(), arrCrvDeg(), arrPointSet(),arrPts(), arrCrvDom(),arrCrvStep(),arrBlndCrvPt() Dim arrBlendCurve(), arrCtrlCrv() Dim dblSmoothness If blnSmooth = False Then dblSmoothness = 1 Else dblSmoothness = 3 End If count = Ubound(arrCurves) ReDim arrptCount(count), arrCrvDeg(count), arrCrvDom(count), arrPointSet(count), arrPts(count) 'get control point count For i = 0 To count Step 1 arrptCount(i) = Rhino.CurvePointCount(arrCurves(i)) arrCrvDeg(i) = Rhino.CurveDegree(arrCurves(i)) Next 'determine max point count max = Rhino.Max(arrptCount) dMax = Rhino.Max(arrCrvDeg) 'rebuild curves with max control point count For i = 0 To count Step 1 Call Rhino.RebuildCurve(arrCurves(i), dMax, max) arrPointSet(i) = Rhino.CurvePoints(arrCurves(i)) Next max = max - 1 ReDim arrCtrlCrv(max), arrCrvDom(max), arrCrvStep(max), arrBlndCrvPt(max) 'create control curves For i = 0 To max Step 1 For j = 0 To count Step 1 arrPts(j) = arrPointSet(j)(i) Next arrCtrlCrv(i) = Rhino.AddInterpCurve(arrPts, dblSmoothness) arrCrvDom(i) = Rhino.CurveDomain(arrCtrlCrv(i)) arrCrvStep(i) = (arrCrvDom(i)(1) - arrCrvDom(i)(0)) / (count * dblDensity) Next 'create blended curves ReDim arrBlendCurve(count*dblDensity) For i = 0 To count * dblDensity Step 1 For j = 0 To max Step 1 arrBlndCrvPt(j) = Rhino.EvaluateCurve(arrCtrlCrv(j), arrCrvDom(j)(0) + i * arrCrvStep(j)) Next arrBlendCurve(i) = Rhino.addcurve(arrBlndCrvPt, dMax) Next 'delete control curves Call Rhino.DeleteObjects(arrCtrlCrv) Call Rhino.DeleteObjects(arrCurves) BlendCurves = array(arrBlendCurve, arrCtrlCrv) End Function