summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DummyRig.py72
-rw-r--r--bridge.py15
-rw-r--r--color.py20
-rw-r--r--constants.py2
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)
diff --git a/bridge.py b/bridge.py
index 76f3043..7271db8 100644
--- a/bridge.py
+++ b/bridge.py
@@ -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)
diff --git a/color.py b/color.py
index 2b51701..84ece9d 100644
--- a/color.py
+++ b/color.py
@@ -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