From 6e265cfa5002a5667681733eae08357f2b9695e5 Mon Sep 17 00:00:00 2001 From: Aaron Perley Date: Tue, 27 Sep 2016 21:39:02 -0400 Subject: Add bridge simulator and cleanup code --- DummyRig.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 DummyRig.py (limited to 'DummyRig.py') diff --git a/DummyRig.py b/DummyRig.py new file mode 100644 index 0000000..093a655 --- /dev/null +++ b/DummyRig.py @@ -0,0 +1,72 @@ +from Tkinter import * +import re +import threading +import time + +def rgbToTkColor(r, g, b): + if not (0 <= r <= 1 and 0 <= g <= 1 and 0 <= b <= 1): + print "invalid r={}, g={}, b={}".format(r, g, b) + assert(False) + + r_hex = int(r * 0xFF) + g_hex = int(g * 0xFF) + b_hex = int(b * 0xFF) + return "#{:02x}{:02x}{:02x}".format(r_hex, g_hex, b_hex) + +class DummyLight(object): + WIDTH_PX = 8 + HEIGHT_PX = 20 + + def __init__(self, canvas): + self.canvas = canvas + self.color = (0, 0, 0) + + def setRGBRaw(self, r, g, b): + self.color = (r, g, b) + self.canvas.itemconfig(self.rect_id, fill=rgbToTkColor(*self.color)) + + +class DummyRig(object): + def __init__(self, width, height): + self.width = width + self.height = height + self.margin = 5 + + def init(self): + self.root = Tk() + self.canvas = Canvas(self.root, + width=self.width*DummyLight.WIDTH_PX + self.margin*2, + height=self.height*DummyLight.HEIGHT_PX + self.margin*2) + self.canvas.pack() + self.root.resizable(width=0, height=0) + + self.lights = [[DummyLight(self.canvas) for _ in xrange(self.height)] + for _ in xrange(self.width)] + + self.rootThread = threading.Thread(target=self.root.mainloop) + self.rootThread.start() + + self.initRects() + + def select(self, pattern): + match = re.search("\$side=(.*?)\[\$sequence=(.*?)\]", pattern) + if match.group(1) == "bot": + y = 1 + elif match.group(1) == "top": + y = 0 + + x = int(match.group(2)) - 1 + return self.lights[x][y] + + def updateOnce(self): + pass + + def initRects(self): + for x in xrange(self.width): + for y in xrange(self.height): + light = self.lights[x][y] + x0 = self.margin + x * DummyLight.WIDTH_PX + y0 = self.margin + y * DummyLight.HEIGHT_PX + light.rect_id = self.canvas.create_rectangle(x0, y0, x0 + DummyLight.WIDTH_PX, + y0 + DummyLight.HEIGHT_PX, + width=1) -- cgit v1.3.1