예제 #1
0
    def __init__(self, size):
        Tile.__init__(self)
        frame = self.getFrame()

        # Underlying pattern:
        b = Block(size, size).fill(LampState.ON)

        i = 0
        n = 0
        while i < 8:
            j = 0
            while j < 8:
                if n % 2 == 0: frame.add(ViewPort(b, 0, 0, size, size), i, j)
                n += 1
                j += size

            i += size
            n += 1

        # Top layer which we flip:
        b = Block(8, 8).fill(LampState.FLIP)
        frame.add(b, 0, 0)

        def tick():
            while True:
                frame.hide(b)
                yield None
                frame.show(b)
                yield None
    
        self.__ticker = tick()
예제 #2
0
class Border(Tile):
    '''Animate a border.'''
    
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border): yield (i, border)
                for i in range(1 + border, 8 - border): yield (7 - border, i)
                for i in range(1 + border, 8 - border): yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border): yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)

    def count(self, n):
        self.__bloc.fill(LampState.OFF)

        for g in self.__gens:
            (x, y) = g.next()
            self.__bloc.setLamp(x, y, LampState.ON)
예제 #3
0
class Border(Tile):
    '''Animate a border.'''
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border):
                    yield (i, border)
                for i in range(1 + border, 8 - border):
                    yield (7 - border, i)
                for i in range(1 + border, 8 - border):
                    yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border):
                    yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)

    def count(self, n):
        self.__bloc.fill(LampState.OFF)

        for g in self.__gens:
            (x, y) = g.next()
            self.__bloc.setLamp(x, y, LampState.ON)
예제 #4
0
    def __init__(self):
        DisposableTile.__init__(self, 10)
        self.__random = Random()

        widget = Block('010 111 010')
        self.getFrame().add(widget, 0, 0)
        self.__widget = widget

        # Add the 'blow-up' on top - but hide it.
        bang = Block(8, 8).fill(LampState.ON)
        self.getFrame().add(bang, 0, 0).hide(bang)
        self.__bang = bang
    def __init__(self):
        Tile.__init__(self, 1, 1)
        self.__random = Random()
        b = Block(8, 8)

        for i in range(0, 8):
            for j in range(0, 8):
                if self.__random.nextBoolean():
                    b.setLamp(i, j, LampState.ON)
                else:
                    b.setLamp(i, j, LampState.OFF)

        self.getFrame().add(b, 0, 0)
        self.__block = b
예제 #6
0
    def __init__(self):
        DisposableTile.__init__(self, 3)

        f = self.getFrame()
        b = Block('1')
        f.add(b, 7, 7)
        self.__block = b
예제 #7
0
    def __init__(self):
        def position(block):
            '''
            position generator: for convenience, it draws in a 6 x 6
            block which we then position into the frame.
            '''
            while True:
                for x in range(6):
                    for y in range(5):  # snake
                        block.fill(LampState.OFF)
                        if x % 2 == 0:  # snake up
                            block.setLamp(x, 4 - y, LampState.ON)
                            yield None
                        else:  # snake down
                            block.setLamp(x, y, LampState.ON)
                            yield None

                for x in range(6):
                    block.fill(LampState.OFF).setLamp(5 - x, 5, LampState.ON)
                    yield None

        Tile.__init__(self, 3)
        b = Block(6, 6)
        self.__gen = position(b)
        self.getFrame().add(b, 1, 1)
예제 #8
0
    def __init__(self):
        FlipTile.__init__(self, 1)

        def bouncer():
            while True:
                for i in range(6): yield i
                for i in range(6): yield 6 - i

        self.__hor = Block(8, 2).fill(LampState.FLIP)
        self.getFrame().add(self.__hor, 0, 0)

        self.__ver = Block(2, 8).fill(LampState.FLIP)
        self.getFrame().add(self.__ver, 0, 0)

        self.__xGen = bouncer()
        self.__yGen = bouncer()
예제 #9
0
    def __init__(self, interval=10, limit=10):
        Tile.__init__(self, interval, limit)
        b = Block(8, 8).fill(LampState.FLIP)

        self.__masterFrame = Frame()
        self.__masterFrame.add(self.getFrame(), 0, 0).add(b, 0, 0).hide(b)
        self.__flipped = False
        self.__flipper = b
예제 #10
0
    def __init__(self):
        FlipTile.__init__(self, 1)

        sun = Block('011110 111111 111111 111111 111111 011110')
        moon = Block('.00. 0000 0000 .00.')

        self.getFrame().add(sun, 0, 0).add(moon, 0, 0)

        def bouncer(size):
            while True:
                for i in range(8 + 1 - size):
                    yield i
                # for i in range(8 - size): yield 8 - size - i

        self.__sunGen = bouncer(6)
        self.__moonGen = bouncer(4)

        self.__sun = sun
        self.__moon = moon
예제 #11
0
    def __init__(self):
        FlipTile.__init__(self)

        cross1 = Block(8, 8).fill(LampState.OFF)
        cross2 = Block(8, 8).fill(LampState.OFF)

        for i in range(0, 8):
            cross1.setLamp(i, i, LampState.ON)
            cross1.setLamp(i, 7 - i, LampState.ON)

        for i in range(0, 8):
            cross2.setLamp(3, i, LampState.ON)
            cross2.setLamp(4, i, LampState.ON)
            cross2.setLamp(i, 3, LampState.ON)
            cross2.setLamp(i, 4, LampState.ON)

        self.getFrame().add(cross1, 0, 0).add(cross2, 0, 0)

        self.__cross1 = cross1
        self.__cross2 = cross2
예제 #12
0
    def __init__(self):
        Tile.__init__(self, 10, 100)
        digits = [
            '111 101 101 101 111', '110 010 010 010 010',
            '111 001 111 100 111', '111 001 111 001 111',
            '101 101 111 001 001', '111 100 111 001 111',
            '111 100 111 101 111', '111 001 001 001 001',
            '111 101 111 101 111', '111 101 111 001 111'
        ]

        lftBlocks = [Block(digits[i]) for i in range(10)]
        rhtBlocks = [Block(digits[i]) for i in range(10)]

        f = self.getFrame()

        for i in range(10):
            f.add(lftBlocks[i], 0, 0).add(rhtBlocks[i], 5, 0)

        self.__lftBlocks = lftBlocks
        self.__rhtBlocks = rhtBlocks
예제 #13
0
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border):
                    yield (i, border)
                for i in range(1 + border, 8 - border):
                    yield (7 - border, i)
                for i in range(1 + border, 8 - border):
                    yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border):
                    yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)
예제 #14
0
    def __init__(self):
        Tile.__init__(self, 5)
        block = Block(4, 4)

        f = self.getFrame()
        f.add(ViewPort(block, 0, 0, 4, 4), 0, 0)
        f.add(ViewPort(block, 0, 0, 4, 4), 4, 0)
        f.add(ViewPort(block, 0, 0, 4, 4), 0, 4)
        f.add(ViewPort(block, 0, 0, 4, 4), 4, 4)
        f.add(ViewPort(block, 0, 0, 4, 4), 2, 2)

        self.__block = block
        self.__pos = 0
예제 #15
0
    def __init__(self, inSync):
        FlipTile.__init__(self, 5)

        self.__blocks = []
        self.__states = []
        self.__random = Random()

        for border in range(4):
            size = 8 - border * 2
            b = Block(size, size).fill(LampState.FLIP)
            self.getFrame().add(b, border, border)
            self.__blocks.append(b)
            self.__states.append(False)

        self.__inSync = inSync
예제 #16
0
    def __init__(self):
        Tile.__init__(self)
        letters = [
            '00000011 00000000 00000000 00000000 00000000 00000000 00000000 00000000',  # ---
            '00000000 00000011 00000000 00000000 00000000 00000000 00000000 00000000',  # ---
            '10001000 11011000 10101011 10101000 10001000 10001000 10001000 00000000',  # M
            '01110000 10001000 10001000 10001011 10001000 10001000 01110000 00000000',  # O
            '10001000 11001000 10101000 10011000 10001011 10001000 10001000 00000000',  # N
            '01110000 10001000 10001000 10001000 10001000 10001011 01110000 00000000',  # O
            '10001000 11011000 10101000 10101000 10001000 10001000 10001011 00000000',  # M
            '11111000 10000000 10000000 11110000 10000000 10000000 11111000 00000011'  # E
        ]

        f = self.getFrame()
        self.__blocks = [Block(letters[i]) for i in range(8)]
        for b in self.__blocks:
            f.add(b, 0, 0)
예제 #17
0
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border): yield (i, border)
                for i in range(1 + border, 8 - border): yield (7 - border, i)
                for i in range(1 + border, 8 - border): yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border): yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)
예제 #18
0
    def __init__(self, frame, width, row, interval):
        self.__width = width
        self.__interval = interval
        self.__row = row
        self.__frame = frame
        self.__interval = interval
        self.__count = 0

        def position():
            while True:
                for i in range(8 - width):
                    yield i
                for i in range(8 - width):
                    yield 8 - width - i

        self.__gen = position()

        b = Block(width, 1).fill(LampState.ON)
        frame.add(b, self.__gen.next(), row)
        self.__block = b
예제 #19
0
'''
Animation. (Needs 10msec metro.) Sweeps an
inner XOR block over a button-toggled
background pattern. Contains generator magic.
'''

from __future__ import generators
from net.loadbang.shado import Frame, Block
from net.loadbang.shado.types import LampState
from config import renderer

outer = Block(4, 4).fill(LampState.ON)
inner = Block(2, 2).fill(LampState.FLIP)

def posGenerator():
    while True:
        for i in range(8): yield i

pos = posGenerator()
n = pos.next()
frame = Frame().add(outer, 2, 2).add(inner, n, n)

frame.hide(outer)

count = 0

def bang():
    global count
    count += 1
    if count % 10 == 0: doit()
예제 #20
0
    def __init__(self):
        FlipTile.__init__(self)

        cross1 = Block(8, 8).fill(LampState.OFF)
        cross2 = Block(8, 8).fill(LampState.OFF)

        for i in range(0, 8):
            cross1.setLamp(i, i, LampState.ON)
            cross1.setLamp(i, 7 - i, LampState.ON)

        for i in range(0, 8):
            cross2.setLamp(3, i, LampState.ON)
            cross2.setLamp(4, i, LampState.ON)
            cross2.setLamp(i, 3, LampState.ON)
            cross2.setLamp(i, 4, LampState.ON)

        self.getFrame().add(cross1, 0, 0).add(cross2, 0, 0)

        self.__cross1 = cross1
        self.__cross2 = cross2
예제 #21
0
'''
A slightly smarter version of Simple, using shado's
button-tracking machinery.
'''

from net.loadbang.shado import Block, PressManager, ViewPort, Frame
from net.loadbang.shado.types import LampState
from config import renderer, monomeWidth, monomeHeight

block = Block(4, 4).fill(LampState.ON)

frame = Frame().add(block, 2, 2).hide(block)


class MyViewPort(ViewPort):
    '''
    In order to catch button presses, we'll put a ViewPort around
    the frame, but build it in Python with a callback.
    '''
    def __init__(self, router, x, y, width, height):
        ViewPort.__init__(self, router, x, y, width, height)

    def press(self, x, y, how):
        '''callback from shado: deal with a button press'''
        if how != 0:
            frame.show(block)
        else:
            frame.hide(block)

        renderer.render(self)
        return True
예제 #22
0
 def __init__(self):
     Block.__init__(self, 2, 2)
     self.fill(LampState.OFF)
예제 #23
0
'''
Draw a cross for the last pressed button.
'''

from config import renderer
from net.loadbang.shado import Frame, Block
from net.loadbang.shado.types import LampState

vertical = Block(1, 16).fill(LampState.ON)
horizontal = Block(16, 1).fill(LampState.ON)

frame = Frame().add(vertical, 0, 0).add(horizontal, 0, 0)


def hide():
    frame.hide(vertical)
    frame.hide(horizontal)
    renderer.render(frame)


hide()


def bang():
    pass


def press(x, y, n):
    if n == 1:
        frame.moveTo(vertical, x, 0).show(vertical)
        frame.moveTo(horizontal, 0, y).show(horizontal)
예제 #24
0
'''
A demo of the "extended shado" scheduler. We blink four
exclusive-OR panels at different speeds.
'''

from net.loadbang.shado import Frame, Block, ViewPort
from net.loadbang.shado.types import LampState
from net.loadbang.shadox import DisplayTaskManager, XFrame
from config import renderer

# Task manager at 10Hz.
taskManager = DisplayTaskManager(renderer, 100)

block = Block(4, 4).fill(LampState.FLIP)

frame = XFrame(taskManager)

vp1 = ViewPort(block, 0, 0, 4, 4)
vp2 = ViewPort(block, 0, 0, 4, 4)
vp3 = ViewPort(block, 0, 0, 4, 4)
vp4 = ViewPort(block, 0, 0, 4, 4)

frame.add(vp1, 1, 1).hide(vp1).blink(vp1, 1, 5, None)
frame.add(vp2, 3, 3).hide(vp1).blink(vp2, 7, 8, None)
frame.add(vp3, 1, 3).hide(vp3).blink(vp3, 1, 10, None)
frame.add(vp4, 3, 1).hide(vp4).blink(vp4, 9, 11, None)

taskManager.mainFrame.add(frame, 0, 0)

def _cleanup(): taskManager.clear()
engine.addCleanup(_cleanup)
예제 #25
0
'''
When launched, this script turns on all LEDs.
'''

from net.loadbang.shado import Block
from net.loadbang.shado.types import LampState
from config import renderer

lightBlock = Block(8, 8)
lightBlock.fill(LampState.ON)
renderer.render(lightBlock)
예제 #26
0
from config import renderer

digits = [
    '111 101 101 101 111', '110 010 010 010 010', '111 001 111 100 111',
    '111 001 111 001 111', '101 101 111 001 001', '111 100 111 001 111',
    '111 100 111 101 111', '111 001 001 001 001', '111 101 111 101 111',
    '111 101 111 001 111'
]

frame = Frame()
renderer.render(frame)

mainframe = Frame()
f = mainframe.add(frame, 0, 0)

lftBlocks = [Block(digits[i]) for i in range(10)]
rhtBlocks = [Block(digits[i]) for i in range(10)]

for i in range(10):
    frame.add(lftBlocks[i], 0, 0).add(rhtBlocks[i], 5, 0)

counter = 99
interval = 0


def bang():
    global interval
    global counter

    interval += 1
예제 #27
0
'''
Simple animation. Turn on the 10msec
metronome to see things move.
'''

from net.loadbang.shado import Frame, Block, ViewPort
from net.loadbang.shado.types import LampState
from config import renderer

block = Block(4, 4).fill(LampState.THRU)

# We can no longer add a block to a frame more than once (we don't use stamps
# any more) so we have to add a sub-frame to each instance.

frame = Frame()

position = 0

frame.add(Frame().add(block, 0, 0), 0, 0)
frame.add(Frame().add(block, 0, 0), 4, 0)
frame.add(Frame().add(block, 0, 0), 0, 4)
frame.add(Frame().add(block, 0, 0), 4, 4)
frame.add(Frame().add(block, 0, 0), 2, 2)

count = 0


def bang():
    global count
    count += 1
    if count % 10 == 0: doit()
예제 #28
0
 def __init__(self):
     Block.__init__(self, 2, 2)
     self.fill(LampState.OFF)