Files
HexTrails/scripts/render-flat-icons.py

36 lines
2.0 KiB
Python

# Newly authored geometric icon artwork, rendered to a portable PNG atlas.
from PIL import Image,ImageDraw
from math import sin,cos,pi
S=4; im=Image.new('RGBA',(1024*S,1024*S));d=ImageDraw.Draw(im)
for i in range(16):
ox=(i%4)*256;oy=(i//4)*256
def p(x,y):return ((ox+32+x*8)*S,(oy+32+y*8)*S)
def poly(pts,fill='white'):d.polygon([p(*v) for v in pts],fill=fill)
def line(pts,w=2.3):
d.line([p(*v) for v in pts],fill='white',width=int(w*8*S),joint='curve')
for x,y in [pts[0],pts[-1]]:ell(x-w/2,y-w/2,x+w/2,y+w/2)
def ell(a,b,c,e,fill='white'):d.ellipse([p(a,b),p(c,e)],fill=fill)
def rect(a,b,c,e,r=1.4):d.rounded_rectangle([p(a,b),p(c,e)],radius=r*8*S,fill='white')
def turn(clock=True):
pts=[(12+7*cos((-60+j*290/60)*pi/180),12+7*sin((-60+j*290/60)*pi/180)) for j in range(61)]
if not clock:pts=[(24-x,y)for x,y in pts]
line(pts);x,y=pts[-1];vx=x-pts[-2][0];vy=y-pts[-2][1];n=(vx*vx+vy*vy)**.5;vx/=n;vy/=n
poly([(x+vx*2,y+vy*2),(x-vx*3-vy*3,y-vy*3+vx*3),(x-vx*3+vy*3,y-vy*3-vx*3)])
if i==0:
poly([(12+(9 if j%4 in [0,1] else 7)*cos(j*pi/16),12+(9 if j%4 in [0,1] else 7)*sin(j*pi/16))for j in range(32)]);ell(8.5,8.5,15.5,15.5,(0,0,0,0))
elif i==1:
for x,y in [(3,3),(14,3),(3,14),(14,14)]:rect(x,y,x+7,y+7)
elif i==2:line([(15,4),(7,12),(15,20)],3)
elif i==3:line([(5,5),(19,19)],3);line([(19,5),(5,19)],3)
elif i in [4,5,7]:turn(i!=4)
elif i==6:line([(5,8),(14,8),(18,10),(19,14),(17,18),(13,19)]);poly([(2,8),(9,2),(9,14)])
elif i==8:ell(5,2,19,16);rect(9,14,15,19);line([(10,22),(14,22)],2)
elif i==9:poly([(12+(10 if j%2==0 else 4.8)*cos(-pi/2+j*pi/5),12+(10 if j%2==0 else 4.8)*sin(-pi/2+j*pi/5))for j in range(10)])
elif i==10:poly([(4,16),(16,4),(20,8),(8,20),(3,21)])
elif i==11:poly([(6,3),(21,12),(6,21)])
elif i==12:poly([(12,2),(22,12),(16,12),(16,22),(8,22),(8,12),(2,12)])
elif i==13:poly([(3,15),(14,3),(22,11),(12,21),(9,21)])
elif i==14:line([(5,20),(8,19),(10,16),(12,8),(14,5),(19,4)],3)
else:poly([(12+10*cos(j*pi/3),12+10*sin(j*pi/3))for j in range(6)])
im.resize((1024,1024),Image.Resampling.LANCZOS).save('assets/ui-icons-flat.png')