diff options
| -rw-r--r-- | DummyRig.py | 72 | ||||
| -rw-r--r-- | bridge.py | 15 | ||||
| -rw-r--r-- | color.py | 20 | ||||
| -rw-r--r-- | constants.py | 2 |
4 files changed, 95 insertions, 14 deletions
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) @@ -1,11 +1,17 @@ -#!/usr/bin/python +#!/usr/bin/python2 """Simple demo of oscillating colors.""" from __future__ import division, unicode_literals import color import constants +from DummyRig import DummyRig import fish_render -import lumiversepython import time +try: + import lumiversepython +except ImportError: + have_lumiversepython = False +else: + have_lumiversepython = True def get_all_lights(rig): """Return a list of all panels.""" @@ -28,7 +34,10 @@ def demo(lights, rig): def main(): """Run show.""" - rig = lumiversepython.Rig('/home/teacher/Lumiverse/PBridge.rig.json') + if have_lumiversepython: + rig = lumiversepython.Rig('/home/teacher/Lumiverse/PBridge.rig.json') + else: + rig = DummyRig(200, 2) rig.init() lights = get_all_lights(rig) demo(lights, rig) @@ -11,19 +11,19 @@ class Vector(object): def __add__(self, other): """Add two vectors.""" - return Vector( - *map(lambda x, y: x + y, zip(self.components, other.components)) + return self.__class__( + *map(lambda (x, y): x + y, zip(self.components, other.components)) ) def __sub__(self, other): """Subtract two vectors.""" - return Vector( - *map(lambda x, y: x - y, zip(self.components, other.components)) + return self.__class__( + *map(lambda (x, y): x - y, zip(self.components, other.components)) ) def __mul__(self, other): """Multiply a vector by a constant.""" - return Vector(*map(lambda x: x * other, self.components)) + return self.__class__(*map(lambda x: x * other, self.components)) def __rmul__(self, other): """Multiply a constant by a vector.""" @@ -33,16 +33,16 @@ class Vector(object): """Return the 2-norm of the vector.""" return math.sqrt(sum(map(lambda x: x * x, self.components))) - def __div__(self, scalar): + def __truediv__(self, scalar): """Return self * 1 / scalar.""" return self * (1 / scalar) -def HSV(Vector): +class HSV(Vector): """HSV 3-vector.""" def __init__(self, hue, saturation, value): """Initialize with hue, saturation, and value.""" - super(Vector, self).__init__(hue, saturation, value) + super(HSV, self).__init__(hue, saturation, value) def to_RGB(self): """Convert to an RGB vector.""" @@ -61,11 +61,11 @@ def HSV(Vector): return self.components[2] -def RGB(Vector): +class RGB(Vector): """RGB 3-vector.""" def __init__(self, r, g, b): """Initialize with red green and blue.""" - super(Vector, self).__init__(r, g, b) + super(RGB, self).__init__(r, g, b) def to_HSV(self): """Convert to HSV vector.""" diff --git a/constants.py b/constants.py index 162b3be..e19c127 100644 --- a/constants.py +++ b/constants.py @@ -1,7 +1,7 @@ """Constants that may be tweaked in the future.""" from __future__ import division, unicode_literals -FRAME_RATE = 44 +FRAME_RATE = 10 #44 MIN_VALUE = 0 MAX_VALUE = 1 MAX_TIME = 4 |
