From 7c6b53d69112f56e977cf3f23f5d7dca4965a2bc Mon Sep 17 00:00:00 2001 From: janion Date: Mon, 17 Sep 2018 20:53:49 +0100 Subject: [PATCH] Updated Sketchy-Etch Added colour picking, circle drawing, and clearing --- SketchyEtch/main.py | 152 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 131 insertions(+), 21 deletions(-) diff --git a/SketchyEtch/main.py b/SketchyEtch/main.py index af66250..4519165 100644 --- a/SketchyEtch/main.py +++ b/SketchyEtch/main.py @@ -1,4 +1,4 @@ -"""Accidentally created etcher sketch...""" +"""Accidentally created etcher sketch...\nThen made it awesome""" ___name___ = "Sketchy-Etch" ___title___ = "Sketchy-Etch" @@ -10,27 +10,133 @@ import ugfx, ugfx_helper, app, dialogs from tilda import Buttons from time import sleep -i = 0 -j = 0 def reset(): global i global j + global maxHeight i = int(ugfx.width() / 2) - j = int(ugfx.height() / 2) - ugfx.area(0, 0, ugfx.width(), ugfx.height(), ugfx.BLACK) - ugfx.area((i - 1) if i > 0 else 0, (j - 1) if j > 0 else 0, 3 if (i > 0 and i < (ugfx.width() - 1)) else 2, 3 if (j > 0 and j < (ugfx.height() - 1)) else 2, ugfx.GREY) + j = int(maxHeight / 2) + ugfx.area(0, 0, ugfx.width(), maxHeight, ugfx.BLACK) + ugfx.area((i - 1) if i > 0 else 0, (j - 1) if j > 0 else 0, 3 if (i > 0 and i < (ugfx.width() - 1)) else 2, 3 if (j > 0 and j < (maxHeight - 1)) else 2, ugfx.GREY) + +def getColour(intensity, angle): + intensity *= 2 + if angle < (1 / 6): + return (intensity, intensity * (angle * 6), 0) if intensity < 1 else (1, (angle * 6) + ((1 - (angle * 6)) * (intensity - 1)), (intensity - 1)) + elif angle < (2 / 6): + return (intensity * (2 - (6 * angle)), intensity, 0) if intensity < 1 else ((2 - (6 * angle)) + ((1 - (2 - (6 * angle))) * (intensity - 1)), 1, (intensity - 1)) + elif angle < (3 / 6): + return (0, intensity, intensity * ((6 * angle) - 2)) if intensity < 1 else ((intensity - 1), 1, ((6 * angle) - 2) + ((1 - ((6 * angle) - 2)) * (intensity - 1))) + elif angle < (4 / 6): + return (0, intensity * (4 - (6 * angle)), intensity) if intensity < 1 else ((intensity - 1), (4 - (6 * angle)) + ((1 - (4 - (6 * angle))) * (intensity - 1)), 1) + elif angle < (5 / 6): + return (intensity * ((6 * angle) - 4), 0, intensity) if intensity < 1 else (((6 * angle) - 4) + ((1 - ((6 * angle) - 4)) * (intensity - 1)), (intensity - 1), 1) + else: + return (intensity, 0, intensity * 6 * (1 - angle)) if intensity < 1 else (1, (intensity - 1), (6 * (1 - angle)) + ((1 - (6 * (1 - angle))) * (intensity - 1))) + +shades = 16 +hues = 20 +scroll = 0 +huesToShow = 2 +colourI = 0 +colourJ = 0 + +def showColourChangeMenu(): + global shades + global hues + global scroll + global huesToShow + global maxHeight + boxHeight = int((ugfx.height() - maxHeight) / huesToShow) + boxWidth = int(ugfx.width() / shades) + for x in range(shades): + for y in range(scroll, scroll + huesToShow): + (r, g, b) = getColour(x / shades, y / hues) + ugfx.area(x * boxWidth, maxHeight + int((y - scroll) * boxHeight), boxWidth, boxHeight, (int(31 * r) << 11) + (int(63 * g) << 5) + int(31 * b)) + +def selectColour(): + global shades + global hues + global scroll + global huesToShow + global colourI + global colourJ + global maxHeight + boxHeight = int((ugfx.height() - maxHeight) / huesToShow) + boxWidth = int(ugfx.width() / shades) + (r, g, b) = getColour(colourI / shades, colourJ / hues) + ugfx.box(colourI * boxWidth, maxHeight + ((colourJ - scroll) * boxHeight), boxWidth, boxHeight, (int(31 * (1 - r)) << 11) + (int(63 * (1 - g)) << 5) + int(31 * (1 - b))) + + while not Buttons.is_pressed(Buttons.JOY_Center): + positionChanged = False + scrollChanged = False + oldI = colourI + oldJ = colourJ + + if Buttons.is_pressed(Buttons.JOY_Right) and (colourI < (shades - 1)): + colourI += 1 + positionChanged = True + while Buttons.is_pressed(Buttons.JOY_Right): + pass + elif Buttons.is_pressed(Buttons.JOY_Left) and (colourI > 0): + colourI -= 1 + positionChanged = True + while Buttons.is_pressed(Buttons.JOY_Left): + pass + + if Buttons.is_pressed(Buttons.JOY_Down) and (colourJ < (hues - 1)): + if (colourJ - scroll) == 1: + scroll += 1 + scrollChanged = True + colourJ += 1 + positionChanged = True + while Buttons.is_pressed(Buttons.JOY_Down): + pass + elif Buttons.is_pressed(Buttons.JOY_Up) and (colourJ > 0): + if (colourJ - scroll) == 0: + scroll -= 1 + scrollChanged = True + colourJ -= 1 + positionChanged = True + while Buttons.is_pressed(Buttons.JOY_Up): + pass + + if scrollChanged or positionChanged: + if scrollChanged: + showColourChangeMenu() + elif positionChanged: + (r, g, b) = getColour(oldI / shades, oldJ / hues) + ugfx.box(oldI * boxWidth, maxHeight + ((oldJ - scroll) * boxHeight), boxWidth, boxHeight, (int(31 * r) << 11) + (int(63 * g) << 5) + int(31 * b)) + + (r, g, b) = getColour(colourI / shades, colourJ / hues) + ugfx.box(colourI * boxWidth, maxHeight + ((colourJ - scroll) * boxHeight), boxWidth, boxHeight, (int(31 * (1 - r)) << 11) + (int(63 * (1 - g)) << 5) + int(31 * (1 - b))) + + sleep(0.05) + + while Buttons.is_pressed(Buttons.JOY_Center): + pass + + (r, g, b) = getColour(colourI / shades, colourJ / hues) + ugfx.box(colourI * boxWidth, maxHeight + ((colourJ - scroll) * boxHeight), boxWidth, boxHeight, (int(31 * r) << 11) + (int(63 * g) << 5) + int(31 * b)) + return (int(31 * r) << 11) + (int(63 * g) << 5) + int(31 * b) ugfx_helper.init() + +maxHeight = int(ugfx.height() * 0.9) +i = 0 +j = 0 + ugfx.clear() -dialogs.notice("Draw with joystick arrows\nHold joystick centre for circle\nA to clear\nB to exit", title="Sketchy-Etch") - -ugfx.area(0, 0, ugfx.width(), ugfx.height(), ugfx.BLACK) +dialogs.notice("Draw with joystick arrows\nHold joystick centre for circle\nA to clear\nMENU to choose colour\nB to exit", title="Sketchy-Etch") +ugfx.area(0, 0, ugfx.width(), maxHeight, ugfx.BLACK) +showColourChangeMenu() circleSize = 3 reset() +colour = ugfx.WHITE while not Buttons.is_pressed(Buttons.BTN_B): changed = False oldI = i @@ -42,28 +148,32 @@ while not Buttons.is_pressed(Buttons.BTN_B): elif Buttons.is_pressed(Buttons.JOY_Left) and (i > 0): i -= 1 changed = True - - if Buttons.is_pressed(Buttons.JOY_Down) and (j < (ugfx.height() - 1)): + + if Buttons.is_pressed(Buttons.JOY_Down) and (j < (maxHeight - 1)): j += 1 changed = True elif Buttons.is_pressed(Buttons.JOY_Up) and (j > 0): j -= 1 changed = True - + if Buttons.is_pressed(Buttons.JOY_Center): circleSize += 1 - ugfx.fill_circle(i, j, circleSize, ugfx.WHITE) - changed = True - else: - circleSize = 3 - + ugfx.fill_circle(i, j, circleSize, colour) + showColourChangeMenu() + if Buttons.is_pressed(Buttons.BTN_A): + circleSize = 3 reset() - + + if Buttons.is_pressed(Buttons.BTN_Menu): + colour = selectColour() + circleSize = 3 + if changed: - ugfx.area((oldI - 1) if oldI > 0 else 0, (oldJ - 1) if oldJ > 0 else 0, 3 if (oldI > 0 and oldI < (ugfx.width() - 1)) else 2, 3 if (oldJ > 0 and oldJ < (ugfx.height() - 1)) else 2, ugfx.WHITE) - ugfx.area((i - 1) if i > 0 else 0, (j - 1) if j > 0 else 0, 3 if (i > 0 and i < (ugfx.width() - 1)) else 2, 3 if (j > 0 and j < (ugfx.height() - 1)) else 2, ugfx.GREY) - + circleSize = 3 + ugfx.area((oldI - 1) if oldI > 0 else 0, (oldJ - 1) if oldJ > 0 else 0, 3 if (oldI > 0 and oldI < (ugfx.width() - 1)) else 2, 3 if (oldJ > 0 and oldJ < (maxHeight - 1)) else 2, colour) + ugfx.area((i - 1) if i > 0 else 0, (j - 1) if j > 0 else 0, 3 if (i > 0 and i < (ugfx.width() - 1)) else 2, 3 if (j > 0 and j < (maxHeight - 1)) else 2, ugfx.GREY) + sleep(0.05) ugfx.clear()