Toggle Navigation
Hatchery
Eggs
fiee planner
bigdigits.py
Users
Badges
Login
Register
MCH2022 badge?
go to mch2022.badge.team
bigdigits.py
raw
Content
""" from https://github.com/Ferdi265/card10-digiclk """ DIGITS = [ (True, True, True, True, True, True, False), (False, True, True, False, False, False, False), (True, True, False, True, True, False, True), (True, True, True, True, False, False, True), (False, True, True, False, False, True, True), (True, False, True, True, False, True, True), (True, False, True, True, True, True, True), (True, True, True, False, False, False, False), (True, True, True, True, True, True, True), (True, True, True, True, False, True, True) ] def ceil_div(a, b): return (a + (b - 1)) // b def tip_height(w): return ceil_div(w, 2) - 1 def draw_tip(d, x, y, w, c, invert=False, swapAxes=False): h = tip_height(w) for dy in range(h): for dx in range(dy + 1, w - 1 - dy): px = x + dx py = y + dy if not invert else y + h - 1 - dy if swapAxes: px, py = py, px d.pixel(px, py, col=c) def draw_seg(d, x, y, w, h, c, swapAxes=False): tip_h = tip_height(w) body_h = h - 2 * tip_h draw_tip(d, x, y, w, c, invert=True, swapAxes=swapAxes) px1, px2 = x, x + (w - 1) py1, py2 = y + tip_h, y + tip_h + (body_h - 1) if swapAxes: px1, px2, py1, py2 = py1, py2, px1, px2 d.rect(px1, py1, px2, py2, col=c) draw_tip(d, x, y + tip_h + body_h, w, c, invert=False, swapAxes=swapAxes) def draw_Vseg(d, x, y, w, l, c): draw_seg(d, x, y, w, l, c) def draw_Hseg(d, x, y, w, l, c): draw_seg(d, y, x, w, l, c, swapAxes=True) def draw_grid_seg(d, x, y, w, l, c, swapAxes=False): sw = w - 2 tip_h = tip_height(sw) x = x * w y = y * w l = (l - 1) * w draw_seg(d, x + 1, y + tip_h + 3, sw, l - 3, c, swapAxes=swapAxes) def draw_grid_Vseg(d, x, y, w, l, c): draw_grid_seg(d, x, y, w, l, c) def draw_grid_Hseg(d, x, y, w, l, c): draw_grid_seg(d, y, x, w, l, c, swapAxes=True) def draw_grid(d, x1, y1, x2, y2, w, c): for x in range(x1 * w, x2 * w): for y in range(y1 * w, y2 * w): if x % w == 0 or x % w == w - 1 or y % w == 0 or y % w == w - 1: d.pixel(x, y, col=c) def draw_grid_7seg(d, x, y, w, segs, c): if segs[0]: draw_grid_Hseg(d, x, y, w, 4, c) if segs[1]: draw_grid_Vseg(d, x + 3, y, w, 4, c) if segs[2]: draw_grid_Vseg(d, x + 3, y + 3, w, 4, c) if segs[3]: draw_grid_Hseg(d, x, y + 6, w, 4, c) if segs[4]: draw_grid_Vseg(d, x, y + 3, w, 4, c) if segs[5]: draw_grid_Vseg(d, x, y, w, 4, c) if segs[6]: draw_grid_Hseg(d, x, y + 3, w, 4, c) def render_num(d, num, x, c=(255, 255, 255)): draw_grid_7seg(d, x, 0, 7, DIGITS[num // 10], c) draw_grid_7seg(d, x + 5, 0, 7, DIGITS[num % 10], c) def render_colon(d, c=(255, 255, 255)): draw_grid_Vseg(d, 11, 2, 7, 2, c) draw_grid_Vseg(d, 11, 4, 7, 2, c)