378 lines
13 KiB
Python
378 lines
13 KiB
Python
|
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
|