diff --git a/CMakeLists.txt b/CMakeLists.txt index d486f68134d8ca80e527ffdb1e432d53276265b6..4bb834f10457b65164b4f21a46177664e0cc1a45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -162,8 +162,8 @@ catkin_install_python(PROGRAMS nodes/visualiser scripts/play_animation.py scripts/reset_display.py - scripts/build_emotion.py - scripts/build_state_cycle.py + scripts/emotion.py + scripts/abstract.py scripts/write.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) diff --git a/scripts/build_state_cycle.py b/scripts/abstract.py similarity index 54% rename from scripts/build_state_cycle.py rename to scripts/abstract.py index c932bf06f528ca2a816b4494ec77b89f572c4903..550b6f4f4108b5b1bdf2edbfd6f3c9bf5fd6804b 100755 --- a/scripts/build_state_cycle.py +++ b/scripts/abstract.py @@ -1,9 +1,13 @@ #!/usr/bin/env python import argparse +import time + from visualising.expression.tool import Tool +from visualising.expression.abstract import Abstract from visualising.communication.arduino import Arduino +from visualising.communication.illustration.animation import Animation from visualising.communication.channel.connection import Connection parser = argparse.ArgumentParser(description="script to play an animation") @@ -14,13 +18,19 @@ args = vars(parser.parse_args()) port = args["port"] baud = args["baud"] -time = args["time"] +delay = args["time"] color = [10, 10, 10] arduino = Arduino(Connection(port, baud)) -states = [0.4, 1, 0.2, 0.3, 0.9, 0.7] -ensemble = Tool.build_state_cycle(states) +states = [0, 1.0, 0.10, 0.15, 0.20, 0.85, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, + 0.70, 0.75, 0.80, 0.25, 0.90, 0.05, 0.95] +text = ["A", "CPU", "A", "A", "A", "ARM", "A", "A", "A", "A", "A", "A", "A", "A", + "A", "A", "A", "A", "RAM", "A", "CAMERA"] +ensemble = Abstract.cycle(states) + +time.sleep(10) -arduino.stream_animation(Tool.highlight(ensemble, states, 4)) +arduino.stream_animations(Abstract.highlight(ensemble, states, text, 4)) +# arduino.stream_animation(Animation([ensemble], 50, 2)) diff --git a/scripts/build_emotion.py b/scripts/emotion.py similarity index 100% rename from scripts/build_emotion.py rename to scripts/emotion.py diff --git a/scripts/play_animation.py b/scripts/play_animation.py index 0542a88ba80b3f7fc4c81b0e9556735ab9b04fe2..fffbd223678ec980152aec71bff2963e03fca51d 100755 --- a/scripts/play_animation.py +++ b/scripts/play_animation.py @@ -21,6 +21,6 @@ time = args["time"] iter = args["iterations"] arduino = Arduino(Connection(port, baud)) -animation = Tool.create_animation(file, time, iter) +animation = Tool.create_animation(file, "alphabet", time, iter) arduino.stream_animation(animation) diff --git a/src/visualising/communication/arduino.py b/src/visualising/communication/arduino.py index c79a4d38c04665996551c440dcc276067e99f043..fecbec8c8d2e1c08bb3a701f0524c353eb99bbea 100755 --- a/src/visualising/communication/arduino.py +++ b/src/visualising/communication/arduino.py @@ -90,3 +90,7 @@ class Arduino: for _ in range(animation.num_iter): for ensemble in animation.ensembles: self.play_animation(Animation([ensemble], animation.ensemble_time, 1)) + + def stream_animations(self, animations): + for animation in animations: + self.stream_animation(animation) diff --git a/src/visualising/communication/channel/connection.py b/src/visualising/communication/channel/connection.py index c6fb34c73c6a2a83c62442141deace33a15ecbe8..332fda5bc3c90084edc841f6c9d7aa0ec3dc5303 100755 --- a/src/visualising/communication/channel/connection.py +++ b/src/visualising/communication/channel/connection.py @@ -3,10 +3,7 @@ import time import serial -from visualising.communication.channel.message.message import Message from visualising.communication.channel.message.response import Response -from visualising.communication.channel.message.msg_frame import MsgFrame -from visualising.communication.channel.message.msg_instr import MsgInstr class ArduinoException(Exception): @@ -27,9 +24,6 @@ class Connection: # Send a message to the Arduino. def send_msg(self, msg): - if not isinstance(msg, Message): - raise TypeError("The parameter msg must be an object of the Message class!") - for byte in msg.export_message(): self.connection.write(byte) @@ -54,12 +48,10 @@ class Connection: # specified. In case any response wasn't even once one of the # expected responses raise an exception. def confirm_msg(self, msg, expectations, resends): - if not isinstance(msg, Message): - raise TypeError("The parameter msg must be an object of the Message class!") - if not isinstance(expectations, list) or not all(isinstance(expectation, Response) for expectation in - expectations): - raise TypeError("The parameter responses must be a list of objects of the Response class!") - if not isinstance(resends, int) or not resends > 0: + if not len(expectations) > 0: + raise ValueError("The parameter expectations must be a lister with objects of the class Response, " + "the length of which must be greater than 1!") + if not resends > 0: raise ValueError("The parameter resends must be an integer greater 0!") def evaluate(): diff --git a/src/visualising/communication/channel/message/msg_frame.py b/src/visualising/communication/channel/message/msg_frame.py index 6403697dcd5342e7f6c227f745ef13ff2158a668..0a0ebe3fa86ecdfe8f6397236201677124388bcf 100644 --- a/src/visualising/communication/channel/message/msg_frame.py +++ b/src/visualising/communication/channel/message/msg_frame.py @@ -1,29 +1,18 @@ #!/usr/bin/env python from visualising.communication.channel.message.message import Message -from visualising.communication.illustration.frame import Frame class MsgFrame(Message): def __init__(self, frame): - self._frame = frame - - @property - def frame(self): - return self._frame - - @frame.setter - def frame(self, frame): - if not isinstance(frame, Frame): - raise TypeError("The parameter frame must be an object of the Frame class!") - self._frame = frame + self.frame = frame # Creates a 50-bit frame message. The first and last bit are intended for authentication # as a frame message. The remaining 48 bits store exactly one frame. def export_message(self): message = [bytes('{', 'ascii')] - for pixel in self._frame.pixels: + for pixel in self.frame.pixels: r = pixel.color.r g = pixel.color.g b = pixel.color.b diff --git a/src/visualising/communication/channel/message/msg_instr.py b/src/visualising/communication/channel/message/msg_instr.py index 9b927edae79ec27fa170c756a9205063990eab50..495e2f9a72d31541c855052f437ef29ff90269f3 100644 --- a/src/visualising/communication/channel/message/msg_instr.py +++ b/src/visualising/communication/channel/message/msg_instr.py @@ -1,13 +1,12 @@ #!/usr/bin/env python from visualising.communication.channel.message.message import Message -from visualising.communication.illustration.animation import Animation class MsgInstr(Message): def __init__(self, instr, animation=None): self._instr = instr - self._animation = animation + self.animation = animation @property def instr(self): @@ -19,33 +18,23 @@ class MsgInstr(Message): raise ValueError("Unknown instruction!") self._instr = instr - @property - def animation(self): - return self._animation - - @animation.setter - def animation(self, animation): - if not isinstance(animation, Animation): - raise TypeError("The parameter animation must be an object of the Animation class!") - self._animation = animation - # Creates a 50-bit instruction message. Since only 7 bits at most are required for the # actual message, most of the message consists only of zeros. The first and last bit # are intended for authentication as an instruction message. def export_message(self): message = [bytes('[', 'ascii'), bytes(self._instr, 'ascii')] - if self._animation is not None: - num_frames = len(self._animation.ensembles) * 2 + if self.animation is not None: + num_frames = len(self.animation.ensembles) * 2 message.append(num_frames.to_bytes(1, byteorder='big')) - ensemble_time_bytes = self._animation.ensemble_time.to_bytes(4, byteorder='big') + ensemble_time_bytes = self.animation.ensemble_time.to_bytes(4, byteorder='big') message.append((ensemble_time_bytes[0]).to_bytes(1, byteorder='big')) message.append((ensemble_time_bytes[1]).to_bytes(1, byteorder='big')) message.append((ensemble_time_bytes[2]).to_bytes(1, byteorder='big')) message.append((ensemble_time_bytes[3]).to_bytes(1, byteorder='big')) - message.append(self._animation.num_iter.to_bytes(1, byteorder='big')) + message.append(self.animation.num_iter.to_bytes(1, byteorder='big')) for _ in range(41): message.append((0).to_bytes(1, byteorder='big')) diff --git a/src/visualising/communication/channel/message/response.py b/src/visualising/communication/channel/message/response.py index 30c439ae5284fc14276da13ba2f3f78154dff605..78aaeb9310195b262137bb681db73ff1e253832a 100644 --- a/src/visualising/communication/channel/message/response.py +++ b/src/visualising/communication/channel/message/response.py @@ -4,17 +4,7 @@ class Response: # Generates an Arduino message, which is composed of a message byte from the Arduino # and a translation of the message byte. def __init__(self, byte): - self._byte = byte - - @property - def byte(self): - return self._byte - - @byte.setter - def byte(self, byte): - if not isinstance(byte, bytes): - raise TypeError("The parameter byte must be an object of the byte class!") - self._byte = byte + self.byte = byte def translate(self): translation = { @@ -40,11 +30,9 @@ class Response: } try: - return translation[int.from_bytes(self._byte, byteorder='big')] + return translation[int.from_bytes(self.byte, byteorder='big')] except KeyError: return "Unknown response!" def compare(self, response): - if not isinstance(response, Response): - raise TypeError("The parameter response must be an object of the Response class!") - return bytes(self._byte) == bytes(response.byte) + return bytes(self.byte) == bytes(response.byte) diff --git a/src/visualising/communication/illustration/animation.py b/src/visualising/communication/illustration/animation.py index e622d90fa7902d30d10e75a8b0bced30a0a82407..3ebf2809a2c279f8f5fe6b9236a07bde67b041fd 100755 --- a/src/visualising/communication/illustration/animation.py +++ b/src/visualising/communication/illustration/animation.py @@ -1,33 +1,20 @@ #!/usr/bin/env python -from visualising.communication.illustration.ensemble import Ensemble - - class Animation: + # The ensemble time is given in milliseconds. def __init__(self, ensembles, ensemble_time=0, num_iter=1): - self._ensembles = ensembles + self.ensembles = ensembles self._ensemble_time = ensemble_time self._num_iter = num_iter - @property - def ensembles(self): - return self._ensembles - - @ensembles.setter - def ensembles(self, ensembles): - if not isinstance(ensembles, Ensemble): - raise TypeError("The parameter ensembles must be an object of the Ensemble class!") - self._ensembles = ensembles - @property def ensemble_time(self): return self._ensemble_time @ensemble_time.setter def ensemble_time(self, ensemble_time): - if not isinstance(ensemble_time, int) or not 0 <= ensemble_time <= 4294967295: + if not 0 <= ensemble_time <= 4294967295: raise ValueError("The parameter ensemble_time must be an integer between 0 an 4294967295!") - # The ensemble time is given in milliseconds. self._ensemble_time = ensemble_time @property @@ -36,6 +23,6 @@ class Animation: @num_iter.setter def num_iter(self, num_iter): - if not isinstance(num_iter, int) or not 1 <= num_iter <= 255: + if not 1 <= num_iter <= 255: raise ValueError("The parameter num_iter must be an integer between 1 an 255!") self._num_iter = num_iter diff --git a/src/visualising/communication/illustration/color/rgb.py b/src/visualising/communication/illustration/color/rgb.py index c874cd13f7822c3c0c8b84ea260176443b49e059..08cab69f159900e3bbb0759374c467d0e578772f 100644 --- a/src/visualising/communication/illustration/color/rgb.py +++ b/src/visualising/communication/illustration/color/rgb.py @@ -15,7 +15,7 @@ class RGB(Color): @r.setter def r(self, r): - if not isinstance(r, int) or not 0 <= r <= 255: + if not 0 <= r <= 255: raise ValueError("The parameter r must be an integer between 0 and 255!") self._r = r @@ -25,7 +25,7 @@ class RGB(Color): @g.setter def g(self, g): - if not isinstance(g, int) or not 0 <= g <= 255: + if not 0 <= g <= 255: raise ValueError("The parameter g must be an integer between 0 and 255!") self._g = g @@ -35,7 +35,7 @@ class RGB(Color): @b.setter def b(self, b): - if not isinstance(b, int) or not 0 <= b <= 255: + if not 0 <= b <= 255: raise ValueError("The parameter b must be an integer between 0 and 255!") self._b = b @@ -44,4 +44,4 @@ class RGB(Color): return self._r + self._g + self._b != 0 def export_color(self): - return [self._r, self._g, self._b] \ No newline at end of file + return [self._r, self._g, self._b] diff --git a/src/visualising/communication/illustration/ensemble.py b/src/visualising/communication/illustration/ensemble.py index 3e175715e32e15b9012711fef2a497192c3b351c..69f3c53a6d70a467f1ee03ff5b27bbbc8cdda6a2 100644 --- a/src/visualising/communication/illustration/ensemble.py +++ b/src/visualising/communication/illustration/ensemble.py @@ -1,29 +1,14 @@ #!/usr/bin/env python -from visualising.communication.illustration.frame import Frame - - class Ensemble: def __init__(self, l_frame, r_frame): - self._l_frame = l_frame - self._r_frame = r_frame - - @property - def l_frame(self): - return self._l_frame - - @l_frame.setter - def l_frame(self, l_frame): - if not isinstance(l_frame, Frame): - raise TypeError("The parameter left must be an object of the Frame class!") - self._l_frame = l_frame - - @property - def r_frame(self): - return self._r_frame - - @r_frame.setter - def r_frame(self, r_frame): - if not isinstance(r_frame, Frame): - raise TypeError("The parameter right must be an object of the Frame class!") - self._r_frame = r_frame + self.l_frame = l_frame + self.r_frame = r_frame + + def replace_pixel(self, index, pixel): + if not 0 <= index <= 31: + raise ValueError("The parameter index must be an integer between 0 and 31!") + if index < 16: + self.l_frame.replace_pixel(index, pixel) + else: + self.r_frame.replace_pixel(index - 16, pixel) diff --git a/src/visualising/communication/illustration/frame.py b/src/visualising/communication/illustration/frame.py index bab4750fdef322706e370c918f8f8408736d280a..315ea427daf34fd1a02ea612d6c79921746509f0 100644 --- a/src/visualising/communication/illustration/frame.py +++ b/src/visualising/communication/illustration/frame.py @@ -1,9 +1,5 @@ #!/usr/bin/env python -from visualising.communication.illustration.pixel import Pixel -from visualising.communication.illustration.color.color import Color - - class Frame: def __init__(self, pixels): self._pixels = pixels @@ -14,18 +10,16 @@ class Frame: @pixels.setter def pixels(self, pixels): - if not isinstance(pixels, list) or not all(isinstance(pixel, Pixel) for pixel in pixels) or len(pixels) != 16: + if len(pixels) != 16: raise ValueError("The parameter pixels must be a list of exactly 16 objects of the Pixel class!") self._pixels = pixels def illuminated(self, index): - if not isinstance(index, int) or not 0 <= index <= 15: + if not 0 <= index <= 15: raise ValueError("The parameter index must be an integer between 0 and 15!") return self._pixels[index].color.illuminated def replace_pixel(self, index, pixel): - if not isinstance(index, int) or not 0 <= index <= 15: + if not 0 <= index <= 15: raise ValueError("The parameter index must be an integer between 0 and 15!") - if not isinstance(pixel, Pixel): - raise TypeError("The parameter pixel must be an object of the Pixel class!") self._pixels[index] = pixel diff --git a/src/visualising/communication/illustration/pixel.py b/src/visualising/communication/illustration/pixel.py index 2e2c97562405eaad1eca9299bee7826f11a15fde..cc811dbc1f8d6e5b01dbfee9097968a612830dce 100644 --- a/src/visualising/communication/illustration/pixel.py +++ b/src/visualising/communication/illustration/pixel.py @@ -1,19 +1,5 @@ #!/usr/bin/env python -from visualising.communication.illustration.color.color import Color - - class Pixel: def __init__(self, color): - self._color = color - - @property - def color(self): - return self._color - - @color.setter - def color(self, color): - if not isinstance(color, Color): - raise TypeError("The parameter color must be an object of the Color class!") - self._color = color - + self.color = color diff --git a/src/visualising/expression/abstract.py b/src/visualising/expression/abstract.py index a352fa14831890188a97c59db2c6e9ae3790cf9d..9aa6fb28f8e8656670caa1f23e7498cc2e6ea962 100644 --- a/src/visualising/expression/abstract.py +++ b/src/visualising/expression/abstract.py @@ -3,12 +3,93 @@ import rospy import numpy as np from visualising.expression.tool import Tool +from visualising.expression.expression import Expression +from visualising.communication.illustration.animation import Animation +from visualising.communication.illustration.color.rgb import RGB -class Abstract: + +class Abstract(Expression): def __init__(self, arduino): self.arduino = arduino self.playback_start = 0 def react(self, state): - if len(state[1]) > 16: - rospy.logwarn("Only displaying the first 16 metric aggregations!") + if len(state[1]) > 32: + rospy.logwarn("Only displaying the first 32 metric aggregations!") + state = state[:32] + + @staticmethod + def cycle(state_vector): + ensemble = Tool.create_empty_ensemble() + index = 0 + for state in state_vector: + color = Tool.state_to_color(state, RGB(0, 50, 0), RGB(50, 0, 0)) + ensemble = Tool.set_pixel_color(ensemble, index, color) + index = index + 1 + + return ensemble + + @staticmethod + def highlight(cycle, states, text, number): + number = min(len(states), number) + highlight = sorted(zip(states, range(len(states))), reverse=True)[:number] + + cycle_animation = Animation([cycle], 5000, 1) + + animations = [cycle_animation] + + for tuple in highlight: + ensembles = [] + highlight = Tool.create_empty_ensemble() + ring = "" + highlight_pixel = None + color = None + for i in range(32): + if tuple[1] != i: + highlight = Tool.set_pixel_color(highlight, i, RGB(0, 0, 0)) + else: + highlight_pixel = i + if i < 16: + ring = "l" + color = cycle.l_frame.pixels[i].color + else: + ring = "r" + color = cycle.r_frame.pixels[i % 16].color + + highlight = Tool.set_pixel_color(highlight, i, color) + + ensembles.append(highlight) + ensembles = ensembles + Abstract.write(text[highlight_pixel], ring, highlight_pixel, color) + animations.append(Animation(ensembles, 1000, 1)) + animations.append(cycle_animation) + + animations.append(Animation([Tool.create_empty_ensemble()], 1000, 1)) + + return animations + + @staticmethod + def write(text, ring, highlight=None, color=None): + if not isinstance(text, str) or not text.isalpha(): + raise ValueError("The parameter text must be a string that only contains alphabetic characters!") + + text = text.upper() + + ensembles = [] + for char in text: + if ring == "l": + file = "l_" + char + ".txt" + elif ring == "r": + file = "r_" + char + ".txt" + else: + raise ValueError("The parameter index must be a string that is either l or r!") + + letter = Tool.create_ensembles(file, "alphabet") + if highlight is not None: + letter = [Tool.set_pixel_color(letter[0], highlight, color)] + ensembles = ensembles + letter + if highlight is not None: + ensembles.append(Tool.set_pixel_color(Tool.create_empty_ensemble(), highlight, color)) + else: + ensembles.append(Tool.create_empty_ensemble()) + + return ensembles diff --git a/src/visualising/expression/library/alphabet/A.txt b/src/visualising/expression/library/alphabet/l_A.txt similarity index 70% rename from src/visualising/expression/library/alphabet/A.txt rename to src/visualising/expression/library/alphabet/l_A.txt index 23b7df9b0aa82254ef9c3e67dfaa292a236bed7e..fdab9361363b9e2bc7985bed66b4373a6b714036 100644 --- a/src/visualising/expression/library/alphabet/A.txt +++ b/src/visualising/expression/library/alphabet/l_A.txt @@ -1,2 +1,2 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,10,10,10 +10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10 diff --git a/src/visualising/expression/library/alphabet/B.txt b/src/visualising/expression/library/alphabet/l_B.txt similarity index 100% rename from src/visualising/expression/library/alphabet/B.txt rename to src/visualising/expression/library/alphabet/l_B.txt diff --git a/src/visualising/expression/library/alphabet/C.txt b/src/visualising/expression/library/alphabet/l_C.txt similarity index 68% rename from src/visualising/expression/library/alphabet/C.txt rename to src/visualising/expression/library/alphabet/l_C.txt index ee479a4abaffe885abd64b97b99ff0c131babc21..fa8f35a0389263a3f071aa072f6e1e935045f5b8 100644 --- a/src/visualising/expression/library/alphabet/C.txt +++ b/src/visualising/expression/library/alphabet/l_C.txt @@ -1,2 +1,2 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10 \ No newline at end of file +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/D.txt b/src/visualising/expression/library/alphabet/l_D.txt similarity index 100% rename from src/visualising/expression/library/alphabet/D.txt rename to src/visualising/expression/library/alphabet/l_D.txt diff --git a/src/visualising/expression/library/alphabet/E.txt b/src/visualising/expression/library/alphabet/l_E.txt similarity index 100% rename from src/visualising/expression/library/alphabet/E.txt rename to src/visualising/expression/library/alphabet/l_E.txt diff --git a/src/visualising/expression/library/alphabet/G.txt b/src/visualising/expression/library/alphabet/l_G.txt similarity index 100% rename from src/visualising/expression/library/alphabet/G.txt rename to src/visualising/expression/library/alphabet/l_G.txt diff --git a/src/visualising/expression/library/alphabet/H.txt b/src/visualising/expression/library/alphabet/l_H.txt similarity index 100% rename from src/visualising/expression/library/alphabet/H.txt rename to src/visualising/expression/library/alphabet/l_H.txt diff --git a/src/visualising/expression/library/alphabet/I.txt b/src/visualising/expression/library/alphabet/l_I.txt similarity index 100% rename from src/visualising/expression/library/alphabet/I.txt rename to src/visualising/expression/library/alphabet/l_I.txt diff --git a/src/visualising/expression/library/alphabet/J.txt b/src/visualising/expression/library/alphabet/l_J.txt similarity index 100% rename from src/visualising/expression/library/alphabet/J.txt rename to src/visualising/expression/library/alphabet/l_J.txt diff --git a/src/visualising/expression/library/alphabet/L.txt b/src/visualising/expression/library/alphabet/l_L.txt similarity index 100% rename from src/visualising/expression/library/alphabet/L.txt rename to src/visualising/expression/library/alphabet/l_L.txt diff --git a/src/visualising/expression/library/alphabet/M.txt b/src/visualising/expression/library/alphabet/l_M.txt similarity index 100% rename from src/visualising/expression/library/alphabet/M.txt rename to src/visualising/expression/library/alphabet/l_M.txt diff --git a/src/visualising/expression/library/alphabet/N.txt b/src/visualising/expression/library/alphabet/l_N.txt similarity index 100% rename from src/visualising/expression/library/alphabet/N.txt rename to src/visualising/expression/library/alphabet/l_N.txt diff --git a/src/visualising/expression/library/alphabet/O.txt b/src/visualising/expression/library/alphabet/l_O.txt similarity index 100% rename from src/visualising/expression/library/alphabet/O.txt rename to src/visualising/expression/library/alphabet/l_O.txt diff --git a/src/visualising/expression/library/alphabet/l_P.txt b/src/visualising/expression/library/alphabet/l_P.txt new file mode 100644 index 0000000000000000000000000000000000000000..91ec9569a90c5aea866b0e8af782892068abf0e5 --- /dev/null +++ b/src/visualising/expression/library/alphabet/l_P.txt @@ -0,0 +1,2 @@ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,10,10,10,10,10,10 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/R.txt b/src/visualising/expression/library/alphabet/l_R.txt similarity index 100% rename from src/visualising/expression/library/alphabet/R.txt rename to src/visualising/expression/library/alphabet/l_R.txt diff --git a/src/visualising/expression/library/alphabet/S.txt b/src/visualising/expression/library/alphabet/l_S.txt similarity index 100% rename from src/visualising/expression/library/alphabet/S.txt rename to src/visualising/expression/library/alphabet/l_S.txt diff --git a/src/visualising/expression/library/alphabet/T.txt b/src/visualising/expression/library/alphabet/l_T.txt similarity index 100% rename from src/visualising/expression/library/alphabet/T.txt rename to src/visualising/expression/library/alphabet/l_T.txt diff --git a/src/visualising/expression/library/alphabet/l_U.txt b/src/visualising/expression/library/alphabet/l_U.txt new file mode 100644 index 0000000000000000000000000000000000000000..1388e68da1683f38db7308d3d4ae3fcf96357c93 --- /dev/null +++ b/src/visualising/expression/library/alphabet/l_U.txt @@ -0,0 +1,2 @@ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_A.txt b/src/visualising/expression/library/alphabet/r_A.txt new file mode 100644 index 0000000000000000000000000000000000000000..f220779edff4a42d85b52f318f96c12a330647e5 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_A.txt @@ -0,0 +1,2 @@ +10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_B.txt b/src/visualising/expression/library/alphabet/r_B.txt new file mode 100644 index 0000000000000000000000000000000000000000..a82ab07087aa7af824ba83ec47d53a845475bec9 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_B.txt @@ -0,0 +1,2 @@ +10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,10,10,10,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_C.txt b/src/visualising/expression/library/alphabet/r_C.txt new file mode 100644 index 0000000000000000000000000000000000000000..f5d41bdb34405e2ca908f67b4ac0a0f6e071d459 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_C.txt @@ -0,0 +1,2 @@ +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_D.txt b/src/visualising/expression/library/alphabet/r_D.txt new file mode 100644 index 0000000000000000000000000000000000000000..82b9c956c192f66117f23f4f7a82247521e499c7 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_D.txt @@ -0,0 +1,2 @@ +10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_E.txt b/src/visualising/expression/library/alphabet/r_E.txt new file mode 100644 index 0000000000000000000000000000000000000000..c561035ae247e713e12350b8a86424b511cf93bd --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_E.txt @@ -0,0 +1,2 @@ +10,0,0,10,0,0,10,0,0,10,0,0,10,0,0,10,0,0,10,0,0,10,0,0,10,0,0,10,0,0,0,0,0,0,0,0,10,10,10,10,0,0,10,0,0,10,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_G.txt b/src/visualising/expression/library/alphabet/r_G.txt new file mode 100644 index 0000000000000000000000000000000000000000..972ec8a1795113e127aa7660d3f3feb7acdedb6b --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_G.txt @@ -0,0 +1,2 @@ +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_H.txt b/src/visualising/expression/library/alphabet/r_H.txt new file mode 100644 index 0000000000000000000000000000000000000000..31e3acd2e11cfcd5a66754a6ee0c4d4c8f34c9d5 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_H.txt @@ -0,0 +1,2 @@ +0,0,0,0,0,0,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_I.txt b/src/visualising/expression/library/alphabet/r_I.txt new file mode 100644 index 0000000000000000000000000000000000000000..a1400d28e11a966e402b02dda56fe6eea556f844 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_I.txt @@ -0,0 +1,2 @@ +10,0,0,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,0,0,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_J.txt b/src/visualising/expression/library/alphabet/r_J.txt new file mode 100644 index 0000000000000000000000000000000000000000..022044287f2cde4ce10b4658a772d58dc158493d --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_J.txt @@ -0,0 +1,2 @@ +1,1,1,1,1,1,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_L.txt b/src/visualising/expression/library/alphabet/r_L.txt new file mode 100644 index 0000000000000000000000000000000000000000..cbf17fe8ad266d501f939b4c6bc67fcf3de3f5f4 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_L.txt @@ -0,0 +1,2 @@ +10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_M.txt b/src/visualising/expression/library/alphabet/r_M.txt new file mode 100644 index 0000000000000000000000000000000000000000..09a6e66d1be75cc006da36c3d0724c9f1d3ce3e1 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_M.txt @@ -0,0 +1,2 @@ +0,0,0,0,0,0,10,0,0,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_N.txt b/src/visualising/expression/library/alphabet/r_N.txt new file mode 100644 index 0000000000000000000000000000000000000000..76b354c9071d0c2f8d0fb78b05562c36de490177 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_N.txt @@ -0,0 +1,2 @@ +0,0,0,0,0,0,10,0,0,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,0,0,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_O.txt b/src/visualising/expression/library/alphabet/r_O.txt new file mode 100644 index 0000000000000000000000000000000000000000..7a17d8bb8eed54e51a2e2f6724fefc4610686a76 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_O.txt @@ -0,0 +1,2 @@ +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_P.txt b/src/visualising/expression/library/alphabet/r_P.txt new file mode 100644 index 0000000000000000000000000000000000000000..db065c2020feea5c971bd2c9fb64df6ac1d65264 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_P.txt @@ -0,0 +1,2 @@ +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_R.txt b/src/visualising/expression/library/alphabet/r_R.txt new file mode 100644 index 0000000000000000000000000000000000000000..4f5be09f8040eb813e20f15ca3c1cf27cf407bba --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_R.txt @@ -0,0 +1,2 @@ +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,10,0,0,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_S.txt b/src/visualising/expression/library/alphabet/r_S.txt new file mode 100644 index 0000000000000000000000000000000000000000..57fd5310dbe3346625bade655581a20f8fc8bb51 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_S.txt @@ -0,0 +1,2 @@ +10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,10,10,10,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_T.txt b/src/visualising/expression/library/alphabet/r_T.txt new file mode 100644 index 0000000000000000000000000000000000000000..6f88750662e3807a6f96d6c34f6f00fdcf118e08 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_T.txt @@ -0,0 +1,2 @@ +10,0,0,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/alphabet/r_U.txt b/src/visualising/expression/library/alphabet/r_U.txt new file mode 100644 index 0000000000000000000000000000000000000000..35c20b398e5a8af36e1f1333e0e4b89c1c5a3417 --- /dev/null +++ b/src/visualising/expression/library/alphabet/r_U.txt @@ -0,0 +1,2 @@ +0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/src/visualising/expression/library/emotion/expression_happy.txt b/src/visualising/expression/library/emotion/expression_happy.txt index 213cbe601d399f8a79167ae24c33e80fc7a78ff9..dd59d3129540ed86a5f9a09b072232b0f92b1a8b 100644 --- a/src/visualising/expression/library/emotion/expression_happy.txt +++ b/src/visualising/expression/library/emotion/expression_happy.txt @@ -1,2 +1,2 @@ -50,0,0,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,50,50 -50,0,0,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,50,50 +50,0,0,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,50,50,50,50,50,50,50,50,50,50,50 +50,0,0,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,50,50,50,50,50,50,50,50,50,50,50 diff --git a/src/visualising/expression/tool.py b/src/visualising/expression/tool.py index de188c95da78b97170501c23542b97d84945b12d..284b29d5ed62a5ac3db00a56f100a247653d9aba 100644 --- a/src/visualising/expression/tool.py +++ b/src/visualising/expression/tool.py @@ -122,58 +122,3 @@ class Tool: return RGB(int(color[0]), int(color[1]), int(color[2])) - @staticmethod - def build_state_cycle(state_vector): - ensemble = Tool.create_empty_ensemble() - pixel = 0 - for state in state_vector: - color = Tool.state_to_color(state, [0, 50, 0], [50, 0, 0]) - ensemble = Tool.set_pixel_color(ensemble, pixel, color[0], color[1], color[2]) - pixel = pixel + 1 - - return ensemble - - @staticmethod - def highlight(ensemble, states, number): - number = min(len(states), number) - highlight = sorted(zip(states, range(len(states))), reverse=True)[:number] - - ensembles = [ensemble] - for tuple in highlight: - empty = Tool.create_empty_ensemble() - for i in range(16): - if ensemble.l_frame.is_colored(i): - - r = ensemble.l_frame.pixels[i].r - g = ensemble.l_frame.pixels[i].g - b = ensemble.l_frame.pixels[i].b - - off = [0, 0, 0] - - if tuple[1] != i: - empty = Tool.set_pixel_color(empty, i, off[0], off[1], off[2]) - else: - empty = Tool.set_pixel_color(empty, i, r, g, b) - - ensembles.append(empty) - ensembles = ensembles + Tool.write("HALLO") - ensembles.append(ensemble) - - ensembles.append(Tool.create_empty_ensemble()) - - return Animation(ensembles, 1000, 1) - - @staticmethod - def write(text): - if not text.isalpha(): - raise ValueError("Text must contain only alphabetic characters!") - - text = text.upper() - - ensembles = [] - for char in text: - file = char + ".txt" - ensembles = ensembles + Tool.create_ensembles(file) - ensembles.append(Tool.create_empty_ensemble()) - - return ensembles