Flatten Solid onto plane

//Reference Surface that exceeds the extents of the Object and normal to projection direction
s1 = Line.ByStartPointEndPoint(Point.ByCoordinates(0,20,-20),Point.ByCoordinates(20,0,-20)).Extrude(Vector.ZAxis(),40);
n1 = (s1.NormalAtParameter(0.5,0.5));


p1 = s1<1>.PointAtParameter((0..1..#n)<2>,(0..1..#n)<3>);
b1 = List.Count(p1.Project(o1,n1)<1><2>)>0;
p2 = List.FilterByBoolMask(p1,b1)["in"];
p3 = List.Clean(List.FirstItem(p2<1>),false);
p4 = List.Reverse(List.Clean(List.LastItem(p2<1>),false));
p5 = PolyCurve.ByPoints(Flatten({p3,p4}),true);
5 Likes