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)