Isovists

point1 = Point.ByCoordinates([10, 5, 10], [3, 0, -5]);
t5 = 25;
circle1 = Circle.ByCenterPointRadius(point1, t5);
t4 = [Rectangle.ByWidthLength(60, 30), Rectangle.ByWidthLength(10, 5).Translate(20, 10, 0), Rectangle.ByWidthLength(10, 5).Translate(20, -10, 0), Circle.ByCenterPointRadius(Point.ByCoordinates(-7, -10), 3), NurbsCurve.ByControlPoints(Point.ByCoordinates([-20, -18, 15, -25, 5], [-5, 10, 7, 5, -5]), 3, true)];
t6 = List.AddItemToEnd(circle1@L1<1>, t4);
t7 = (0..1..0.001);
point2 = Curve.PointAtParameter(circle1<1>, t7<2>);
vector1 = Vector.ByTwoPoints(point1, point2);
geometry1 = Point.Project(point1<1L>, t6@@L1<1L>, vector1<1L>);
t8 = List.Transpose(geometry1<1L>);
t9 = List.Flatten(t8@@L3<1L>, -1);
t10 = Geometry.DistanceTo(t9, point1);
t11 = List.SortByKey(t9@@L2<1L>, t10@L2<1L>);
t12 = Dictionary.ValueAtKey(t11, "sorted list");
t13 = Dictionary.ValueAtKey(t11, "sorted keys");
t14 = List.FirstItem(t12@@L2<1L>);
polyCurve1 = PolyCurve.ByPoints(t14, false);
surface1 = Surface.ByPatch(polyCurve1);