Pookkalam by Amal Paul

Code

# Circle
def bubbles():
    c1 = circle(r=144,stroke="#FE6600",fill="#FE6600")
    c2 = circle(r=3,stroke="blue",fill="blue") | translate(x=-138) | repeat(120,rotate(3))
    c3 = circle(r=135,stroke="#FDEB03",fill="#FDEB03")
    return c1 + c2 + c3

# Rhombus Shape
def rhombus():
    p1 = point(15,0)
    p2 = point(0,20)
    p3 = point(-15,0)
    p4 = point(0,-20)

    y1 = polygon([p1,p2,p3,p4],stroke="#FE6600",fill="#FE6600") # Rhombus
    y2 = polygon([p1,p2,p3,p4],stroke="#FF0101",fill="#FF0101") | scale(.7)
    
    y3 = circle(x=4,r=2,stroke="#FFA500",fill="#FFA500") | repeat(2,rotate(180))
    
    l2 = y1 + y2 + y3
    return l2

# Semi Arch
def arch():
    p1 = point(12.5,0)
    p2 = point(0,22)
    p3 = point(-12.5,0)

    z1 = ellipse(w=60,h=30,stroke="green",fill="green")

    z3 = ellipse(w=78,h=38,stroke="blue",fill="blue")

    return (z3 + z1 | scale(.8) )


# Layer 1
x1 = circle(r=150,stroke="#820A0A",fill="#FDD02A")
x2 = bubbles()
x3 = circle(r=130,stroke="#FDD02A",fill="#FDD02A")

l1 = x1 + x2 + x3

# Layer 2
y1 = arch() | translate(x=-95) | rotate(18) | repeat (4,rotate(18)) | repeat(4,rotate(90))
y2 = circle(stroke_width=3,stroke="red",fill="#FDD02A",r=107)
y3 = ellipse(x=-99,w=10,h=15,fill="green",stroke="green") | rotate(15) | repeat(4,rotate(20)) | repeat(4,rotate(90))
y4 = bubbles() | scale(0.635)
y5 = rhombus() | translate(y=110) | repeat(4,rotate(90))

l2 = y1 + y2 + y3 + y4 + y5

# Layer 3
z1 = arch() | translate(x=-95) | rotate(18) | repeat(18,rotate(20)) | scale(.6)
z2 = y4 | scale(.7)
z3 = y4  | scale(.5)
z4 = y4 | scale(.3)
z5 = rhombus() | scale(1.1) | translate(y=24) | repeat(4,rotate(90))
l3 = z1 + z2 + z3 + z4 + z5

pookalam = l1 + l2 + l3
show(pookalam)