Array along Curve
Last updated
Last updated
n = 61;
p = Point.ByCoordinates({-1000, -750, -200, -150}, 0, {0, 250, 400, 450});
ns = Surface.ByRevolve(NurbsCurve.ByControlPoints(p, 2),
Point.Origin(), Vector.ZAxis(), 0, 360);
il = ns.GetIsoline(1, {0, 0.075, 0.15, 0.2, 0.35, 0.5, 0.65, 0.8, 1});
il1 = List.DropItems(il,3);
pn1 = il1<1>.PointAtParameter((0..1..#n)<2>);
il2 = List.TakeItems(il,3);
pn2 = il2<1>.PointAtParameter((0..1..#(n*2)-1)<2>);
ln1 = Line.ByStartPointEndPoint(pn1[4],pn1[5]);
pn3 = pn1[0..4];
pn4 = List.ShiftIndices(pn1[1..4]<1>,1);
pn5 = List.ShiftIndices(pn1[1..4]<1>,-1);
ln2 = List.DropItems(Line.ByStartPointEndPoint(pn3,pn4)<1>,1);
ln3 = List.DropItems(Line.ByStartPointEndPoint(pn3,pn5)<1>,-1);
pn6 = List.DropItems(List.Sublists(pn1[0],0..3,3),-1);
pn7 = List.TakeEveryNthItem(List.ShiftIndices(pn2[2],-3),6,1);
ln4 = Line.ByStartPointEndPoint(pn6,pn7);
pn8 = List.TakeEveryNthItem(pn2[1],6,1);
pn9 = List.ShiftIndices(pn8,-1);
ln5 = List.DropItems(Line.ByStartPointEndPoint(pn7,pn8),-1);
ln6 = List.DropItems(Line.ByStartPointEndPoint(pn7,pn9),-1);
p10 = List.TakeEveryNthItem(pn2[0],6,1);
ln7 = Line.ByStartPointEndPoint(pn8,p10);
{il1,ln1,ln2,ln3,ln4,ln5,ln6,ln7};