LegoLeague/hub/display.py

378 lines
13 KiB
Python
Raw Permalink Normal View History

from __future__ import annotations
from typing import Callable, Iterable
"""
The Image class lets you create and modify images that you can show on the hub matrix display using the hub.display module.
"""
class Image:
def __init__(self, *args):
"""
Create a new image object for use with the hub.display.show() function.
```
Image(string: str)
Image(width: int, height: int)
Image(width: int, height: int, buffer: bytes)
```
You can use one of the signatures above to initialize an image, depending on what you need.
### Parameters
- `string` - String of the form "00900:09990:99999:09990:09090:", representing the brightness of each pixel (0 to 9). Pixels are listed row by row, separated by a colon (:) or line break (\\n).
- `width` - Number of pixels in one row of the new image.
- `height` - Number of pixels in one column of the new image.
- `buffer` - Bytes representing the brightness values of each pixel in the new image. The buffer size must be equal to width * height. If you give a with and height but no buffer, you will get an image where all pixels are zero.
"""
pass
def width(self) -> int:
"""
Gets the width of the image as a number of pixels.
"""
pass
def height(self) -> int:
"""
Gets the width of the image as a number of pixels.
"""
pass
def shift_left(n: int) -> 'Image':
"""
Shifts the image to the left.
### Parameters
- `n1 - By how many pixels to shift the image.
### Returns
- A new, shifted image.
"""
pass
def shift_right(n: int) -> 'Image':
"""
Shifts the image to the right.
### Parameters
- `n` - By how many pixels to shift the image.
### Returns
- A new, shifted image.
"""
pass
def shift_up(n: int) -> 'Image':
"""
Shifts the image up.
### Parameters
- `n` - By how many pixels to shift the image.
### Returns
- A new, shifted image.
"""
pass
def shift_down(n: int) -> 'Image':
"""
Shifts the image down.
### Parameters
- `n` - By how many pixels to shift the image.
### Returns
- A new, shifted image.
"""
pass
def get_pixel(x: int, y: int, brightness: int) -> int:
"""
Gets the brightness of one pixel in the image.
### Parameters
- `x` - Pixel position counted from the left, starting at zero.
- `y` - Pixel position counted from the top, starting at zero.
### Returns
- Brightness (0-9) of the requested pixel.
"""
pass
def set_pixel(x: int, y: int, brightness: int) -> None:
"""
Sets the brightness of one pixel in the image.
### Parameters
- `x` - Pixel position counted from the left, starting at zero.
- `y` - Pixel position counted from the top, starting at zero.
- `brightness` - Brightness between 0 (fully off) and 9 (fully on).
### Raises
- `ValueError` - If x or y are negative or larger than the image size.
- `TypeError` - If you try to modify a built-in image such as HEART.
"""
pass
ANGRY: Image
ARROW_E: Image
ARROW_N: Image
ARROW_NE: Image
ARROW_NW: Image
ARROW_S: Image
ARROW_SE: Image
ARROW_SW: Image
ARROW_W: Image
ASLEEP: Image
BUTTERFLY: Image
CHESSBOARD: Image
CLOCK1: Image
CLOCK2: Image
CLOCK3: Image
CLOCK4: Image
CLOCK5: Image
CLOCK6: Image
CLOCK7: Image
CLOCK8: Image
CLOCK9: Image
CLOCK10: Image
CLOCK11: Image
CLOCK12: Image
CONFUSED: Image
COW: Image
DIAMOND: Image
DIAMOND_SMALL: Image
DUCK: Image
FABULOUS: Image
GHOST: Image
GIRAFFE: Image
GO_DOWN: Image
GO_LEFT: Image
GO_RIGHT: Image
GO_UP: Image
HAPPY: Image
HEART: Image
HEART_SMALL: Image
HOUSE: Image
MEH: Image
MUSIC_CROTCHET: Image
MUSIC_QUAVER: Image
MUSIC_QUAVERS: Image
NO: Image
PACMAN: Image
PITCHFORK: Image
RABBIT: Image
ROLLERSKATE: Image
SAD: Image
SILLY: Image
SKULL: Image
SMILE: Image
SNAKE: Image
SQUARE: Image
SQUARE_SMALL: Image
STICKFIGURE: Image
SURPRISED: Image
SWORD: Image
TARGET: Image
TORTOISE: Image
TRIANGLE: Image
TRIANGLE_LEFT: Image
TSHIRT: Image
UMBRELLA: Image
XMAS: Image
YES: Image
ALL_CLOCKS: Image
ALL_ARROWS: Image
#Built-in images
Image.ANGRY = Image('90009:09090:00000:99999:90909:')
Image.ARROW_E = Image('00900:00090:99999:00090:00900:')
Image.ARROW_N = Image('00900:09990:90909:00900:00900:')
Image.ARROW_NE = Image('00999:00099:00909:09000:90000:')
Image.ARROW_NW = Image('99900:99000:90900:00090:00009:')
Image.ARROW_S = Image('00900:00900:90909:09990:00900:')
Image.ARROW_SE = Image('90000:09000:00909:00099:00999:')
Image.ARROW_SW = Image('00009:00090:90900:99000:99900:')
Image.ARROW_W = Image('00900:09000:99999:09000:00900:')
Image.ASLEEP = Image('00000:99099:00000:09990:00000:')
Image.BUTTERFLY = Image('99099:99999:00900:99999:99099:')
Image.CHESSBOARD = Image('09090:90909:09090:90909:09090:')
Image.CLOCK1 = Image('00090:00090:00900:00000:00000:')
Image.CLOCK2 = Image('00000:00099:00900:00000:00000:')
Image.CLOCK3 = Image('00000:00000:00999:00000:00000:')
Image.CLOCK4 = Image('00000:00000:00900:00099:00000:')
Image.CLOCK5 = Image('00000:00000:00900:00090:00090:')
Image.CLOCK6 = Image('00000:00000:00900:00900:00900:')
Image.CLOCK7 = Image('00000:00000:00900:09000:09000:')
Image.CLOCK8 = Image('00000:00000:00900:99000:00000:')
Image.CLOCK9 = Image('00000:00000:99900:00000:00000:')
Image.CLOCK10 = Image('00000:99000:00900:00000:00000:')
Image.CLOCK11 = Image('09000:09000:00900:00000:00000:')
Image.CLOCK12 = Image('00900:00900:00900:00000:00000:')
Image.CONFUSED = Image('00000:09090:00000:09090:90909:')
Image.COW = Image('90009:90009:99999:09990:00900:')
Image.DIAMOND = Image('00900:09090:90009:09090:00900:')
Image.DIAMOND_SMALL = Image('00000:00900:09090:00900:00000:')
Image.DUCK = Image('09900:99900:09999:09990:00000:')
Image.FABULOUS = Image('99999:99099:00000:09090:09990:')
Image.GHOST = Image('99999:90909:99999:99999:90909:')
Image.GIRAFFE = Image('99000:09000:09000:09990:09090:')
Image.GO_DOWN = Image('00000:99999:09990:00900:00000:')
Image.GO_LEFT = Image('00090:00990:09990:00990:00090:')
Image.GO_RIGHT = Image('09000:09900:09990:09900:09000:')
Image.GO_UP = Image('00000:00900:09990:99999:00000:')
Image.HAPPY = Image('00000:09090:00000:90009:09990:')
Image.HEART = Image('09090:99999:99999:09990:00900:')
Image.HEART_SMALL = Image('00000:09090:09990:00900:00000:')
Image.HOUSE = Image('00900:09990:99999:09990:09090:')
Image.MEH = Image('09090:00000:00090:00900:09000:')
Image.MUSIC_CROTCHET = Image('00900:00900:00900:99900:99900:')
Image.MUSIC_QUAVER = Image('00900:00990:00909:99900:99900:')
Image.MUSIC_QUAVERS = Image('09999:09009:09009:99099:99099:')
Image.NO = Image('90009:09090:00900:09090:90009:')
Image.PACMAN = Image('09999:99090:99900:99990:09999:')
Image.PITCHFORK = Image('90909:90909:99999:00900:00900:')
Image.RABBIT = Image('90900:90900:99990:99090:99990:')
Image.ROLLERSKATE = Image('00099:00099:99999:99999:09090:')
Image.SAD = Image('00000:09090:00000:09990:90009:')
Image.SILLY = Image('90009:00000:99999:00909:00999:')
Image.SKULL = Image('09990:90909:99999:09990:09990:')
Image.SMILE = Image('00000:00000:00000:90009:09990:')
Image.SNAKE = Image('99000:99099:09090:09990:00000:')
Image.SQUARE = Image('99999:90009:90009:90009:99999:')
Image.SQUARE_SMALL = Image('00000:09990:09090:09990:00000:')
Image.STICKFIGURE = Image('00900:99999:00900:09090:90009:')
Image.SURPRISED = Image('09090:00000:00900:09090:00900:')
Image.SWORD = Image('00900:00900:00900:09990:00900:')
Image.TARGET = Image('00900:09990:99099:09990:00900:')
Image.TORTOISE = Image('00000:09990:99999:09090:00000:')
Image.TRIANGLE = Image('00000:00900:09090:99999:00000:')
Image.TRIANGLE_LEFT = Image('90000:99000:90900:90090:99999:')
Image.TSHIRT = Image('99099:99999:09990:09990:09990:')
Image.UMBRELLA = Image('09990:99999:00900:90900:09900:')
Image.XMAS = Image('00900:09990:00900:09990:99999:')
Image.YES = Image('00000:00009:00090:90900:09000:')
#Built-in tuples of images
Image.ALL_CLOCKS = (Image('00900:00900:00900:00000:00000:'), Image('00090:00090:00900:00000:00000:'), Image('00000:00099:00900:00000:00000:'), Image('00000:00000:00999:00000:00000:'), Image('00000:00000:00900:00099:00000:'), Image('00000:00000:00900:00090:00090:'), Image('00000:00000:00900:00900:00900:'), Image('00000:00000:00900:09000:09000:'), Image('00000:00000:00900:99000:00000:'), Image('00000:00000:99900:00000:00000:'), Image('00000:99000:00900:00000:00000:'), Image('09000:09000:00900:00000:00000:'))
Image.ALL_ARROWS = (Image('00900:09990:90909:00900:00900:'), Image('00999:00099:00909:09000:90000:'), Image('00900:00090:99999:00090:00900:'), Image('90000:09000:00909:00099:00999:'), Image('00900:00900:90909:09990:00900:'), Image('00009:00090:90900:99000:99900:'), Image('00900:09000:99999:09000:00900:'), Image('99900:99000:90900:00090:00009:'))
"""
The display module lets you control the light matrix display on the hub.
"""
def clear():
"""
Turns off all the pixels.
"""
pass
def rotation(rotation: int) -> None:
"""
Rotates the display clockwise relative to its current orientation.
DEPRECATION WARNING - In the next release this is a do-nothing operation. Use the def align() API instead!
Following the next release this call will be removed.
"""
pass
def align() -> int:
pass
def align(face: int) -> int:
"""
Rotates the display by aligning the top with the given face of the hub.
### Parameters
- `face` - Choose hub.FRONT, hub.BACK, hub.LEFT, or hub.RIGHT.
### Returns
- The new or current alignment.
"""
pass
def invert() -> bool:
pass
def invert(invert: bool) -> bool:
"""
Inverts all pixels. This affects what is currently displayed, as well as everything you display afterwards.
In the inverted state, the brightness of each pixel is the opposite of the normal state. If a pixel has brightness b, it will be displayed with brightness 9 - b.
### Parameters
- `invert` - Choose True to activate the inverted state. Choose False to restore the normal state.
### Returns
- The new or current inversion state.
"""
pass
def callback(self, function: Callable[[int], None]) -> None:
"""
Sets the callback function that is called when a display operation is completed or interrupted.
The function must accept one argument, which indicates why the callback was called. It will receive 0 if a display operation completed successfully, or 1 if it was interrupted.
### Parameters
- `function` - Callable function that takes one argument. Choose None to disable the callback.
"""
pass
def pixel(x: int, y: int) -> int:
pass
def pixel(x: int, y: int, brightness: int) -> None:
"""
Gets or sets the brightness of one pixel.
### Parameters
- `x` - Pixel position counted from the left, starting at zero.
- `y` - Pixel position counted from the top, starting at zero.
- `brightness` - Brightness between 0 (fully off) and 9 (fully on).
### Returns
- If no brightness is given, this returns the brightness of the selected pixel. Otherwise it returns None.
"""
pass
def show(image: Image) -> None:
pass
def show(image: Iterable[Image], delay=400, level=9, clear=False, wait=True, loop=False, fade=0) -> None:
"""
Shows an image or a sequence of images.
Except for image, all arguments must be specified as keywords.
### Parameters
- `image` - The image or iterable of images to be displayed.
### Keyword Arguments
- `delay` - Delay between each image in the iterable.
- `level` - Scales the brightness of each pixel in and image or character to a value between 0 (fully off) and 9 (fully on).
- `clear` - Choose `True` to clear the display after showing the last image in the iterable.
- `wait` - Choose `True` to block your program until all images are shown. Choose `False` to show all images in the background while your program continues.
- `loop` - Choose `True` repeat the sequence of images for ever. Choose `False` to show it only once.
- `fade` -
Sets the transitional behavior between images in the sequence:
The image will appear immediately.
The image will appear immediately.
The image fades out while the next image fades in.
Images will scroll to the right.
Images will scroll to the left.
Images will fade in, starting from an empty display.
Images will fade out, starting from the original image.
"""
pass