89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
from casioplot import *
|
|
|
|
sgn = lambda n:(-1,1)[abs(n) == n]
|
|
|
|
def rec(name, base, defaut = None):
|
|
try:
|
|
return base[name]
|
|
except:
|
|
return defaut
|
|
|
|
def fill_auto(x,y,color,param):
|
|
if param == "squared":
|
|
if not ((x-y)%2):set_pixel(x,y,color)
|
|
elif param == "full":
|
|
set_pixel(x,y,color)
|
|
elif param == "opaque":
|
|
set_pixel(x,y,(248,255,248))
|
|
|
|
def circle(x_c, y_c, r, color = (0,0,0)):
|
|
x, y, m = 0, r, 5-4*r
|
|
while x <= y:
|
|
a = 2*[x, y, -x, -y]
|
|
b = [y, x, y, x, -y, -x, -y, -x]
|
|
for i in range(8):
|
|
set_pixel(a[i]+x_c, b[i]+y_c, color)
|
|
|
|
if m > 0:
|
|
y -= 1
|
|
m -= 8*y
|
|
x += 1
|
|
m += 8*x+1
|
|
|
|
def line(x1, y1, x2, y2, color=(0,0,0)):
|
|
d = sorted([abs(x2-x1),abs(y2-y1)])
|
|
if d != [abs(x2-x1),abs(y2-y1)]:
|
|
s = [sgn(y2-y1),sgn(x2-x1)]
|
|
coord = [y1, x1]
|
|
x = 1
|
|
else:
|
|
s = [sgn(x2-x1),sgn(y2-y1)]
|
|
coord = [x1, y1]
|
|
x = 0
|
|
set_pixel(x1,y1,color)
|
|
|
|
cumul = d[1] >> 1
|
|
for i in range(d[1]):
|
|
coord[1] += s[1]
|
|
cumul += d[0]
|
|
if cumul > d[1]:
|
|
cumul -= d[1]
|
|
coord[0] += s[0]
|
|
set_pixel(coord[x],coord[(x+1)%2],color)
|
|
set_pixel(x2,y2,color)
|
|
|
|
def polygon(*coord, **kwargs):
|
|
color = rec("color", kwargs, (0,0,0))
|
|
fill = rec("fill", kwargs, None)
|
|
x, y = list(), list()
|
|
for i in range(len(coord)-1):
|
|
x.append(coord[i][0])
|
|
y.append(coord[i][1])
|
|
line(coord[i][0],coord[i][1],coord[i+1][0],coord[i+1][1],color)
|
|
x.append(coord[-1][0])
|
|
y.append(coord[-1][1])
|
|
line(coord[0][0],coord[0][1],coord[-1][0],coord[-1][1],color)
|
|
if fill:
|
|
for i in range(min(x)+1, max(x)):
|
|
detect = 0
|
|
for j in range(min(y),max(y)):
|
|
if get_pixel(i,j) == color:detect += 1
|
|
elif detect == 1:fill_auto(i,j,(color[0]+8,color[1]+8,color[2]+8),fill)
|
|
|
|
def progress_bar(x,y,long,larg,prct,color = (0,255,0)):
|
|
polygon((x,y),(x+long,y),(x+long,y+larg),(x,y+larg))
|
|
line(x+2,y+larg+1,x+long+1,y+larg+1,(200,200,200))
|
|
line(x+long+1,y+2,x+long+1,y+larg+1,(200,200,200))
|
|
prct = int((long*prct)/100)-1
|
|
if prct < 0:prct = 1
|
|
for i in range(1,larg):
|
|
line(1+x,y+i,x+prct,y+i,(color[0]-7*i,color[1]-7*i,color[2]-7*i))
|
|
|
|
def rectangle(x,y,long,larg,**kwargs):
|
|
fill = rec("fill", kwargs, None)
|
|
color = rec("color", kwargs, (0,0,0))
|
|
polygon((x,y),(x+long,y),(x+long,y+larg),(x,y+larg),color = color)
|
|
if fill:
|
|
for i in range(1,long):
|
|
for j in range(1,larg):
|
|
fill_auto(i+x,j+y,color,fill) |