Woven
Script
n = Slider(1, 9, 1, 1, 200, false, true, false, false)
SetValue(n, 5)
Ln = 1..n
Lm = 1..(2*n)
PointsL = Zip(Zip((If(Mod(k,2)!=0,2*j-1, 2*j), k), j, Ln), k, Lm)
PointsCenterL = Zip(Zip((2*j, 2*k), j, 1..(n)), k, 1..(n))
Radius = Slider(0.01, 0.5, 0.01, 1, 200, false, true, false, false)
CirclesL = Zip(Circle(P, Radius), P, Flatten(PointsL))
PointsOnCircle = Zip((Radius*cos(2*pi* k/4 + pi/4), Radius*sin(2*pi* k/4 + pi/4)), k, 0..3)
PointsOffCircle = Zip(((Radius+sqrt(2))*cos(2*pi* k/4 + pi/4), (Radius+sqrt(2))*sin(2*pi* k/4 + pi/4)), k, 0..3)
SegmentsOnCircle = Zip(Rotate(Segment(P, Q), pi/2, P), P, PointsOnCircle, Q, PointsOffCircle)
Woven = Zip(Translate(SegmentsOnCircle, Vector(P)), P, Flatten(PointsCenterL))