Option Explicit 'Script written and copyrighted by Ted Ngai Feb 2007 'This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License. 'http://creativecommons.org/licenses/by-sa/3.0/us/ Call Sine() Sub Sine() Dim strObject Dim arrDomU, arrDomV Dim Pi : Pi = Rhino.Pi Dim OffInt : OffInt = -5 Dim Wave_Count : Wave_Count = 5 Dim Pt_Per_Wave : Pt_Per_Wave = 2 Dim Row_Count : Row_Count = 20 strObject = Rhino.GetObject ("Select Surface", 8, True) If IsNull(strObject) Then Exit Sub arrDomU = Rhino.SurfaceDomain(strObject, 0) arrDomV = Rhino.SurfaceDomain(strObject, 1) Dim PtsOnSine : PtsOnSine = Wave_Count*Pt_Per_Wave Dim vSpacing : vSpacing = (arrDomV(1)-arrDomV(0))/(Row_Count+1) Dim uSpacing : uSpacing = (arrDomU(1)-arrDomU(0))/(PtsOnSine) Dim arr3DPts : ReDim arr3DPts(PtsOnSine) Dim arrOffsetPts : ReDim arrOffsetPts(PtsOnSine) Dim u,v,x,y,w,dU,dV,n Dim arrParam Call Rhino.EnableRedraw(False) For v = 0 To Row_Count For u = 0 To PtsOnSine 'Curve Formula If v Mod 2 = 0 Then x=u y=Cos((u/Pt_Per_Wave)*Pi*2)/2 w=OffInt ElseIf v Mod 2 = 1 Then x=u y=Cos(((u/Pt_Per_Wave)*Pi*2)+Pi)/2 w=OffInt End If dU = arrDomU(0)+(x*uSpacing) dV = arrDomV(0)+(y*vSpacing)+(vSpacing*(v+0.5)) arrParam = Array(dU,dV) arr3DPts(u) = Rhino.EvaluateSurface(strObject, arrParam) 'Offset Curve Dim arrNormal,crvScale Dim arrNormalOffset arrNormal = Rhino.SurfaceCurvature(strObject, arrParam) crvScale = (arrNormal(2)* w)- w arrNormalOffset = Rhino.VectorScale(arrNormal(1),-1*w) arrOffsetPts(u) = Rhino.VectorAdd(arr3DPts(u), arrNormalOffset) Next Dim C1, C2 C1 = Rhino.AddPolyline (arr3DPts) C2 = Rhino.AddCurve (arrOffsetPts) Rhino.AddLoftSrf Array(C1,C2) Next Call Rhino.EnableRedraw(True) End Sub