78 lines
2.2 KiB
Markdown
78 lines
2.2 KiB
Markdown
|
# `pyjecteur`
|
||
|
|
||
|
## Obtenir un nix-shell avec `pyjecteur` (équivalent d'un virtualenv mais avec nix)
|
||
|
|
||
|
Installer nix (`curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install`) puis executer
|
||
|
|
||
|
```
|
||
|
nix-shell -A prod
|
||
|
```
|
||
|
|
||
|
## Documentation rapide
|
||
|
|
||
|
### `pyjecteur.widget.Widget`
|
||
|
|
||
|
Contient la logique d'interaction avec le module DMX-USB. Pour l'utiliser, il
|
||
|
suffit d'instancier l'objet puis d'appler la méthode `set_dmx`:
|
||
|
```python
|
||
|
def set_dmx(self, addr: int, data: bytes, addr_starting: int = 0) -> None:
|
||
|
"""
|
||
|
Set dmx values that will be sent.
|
||
|
|
||
|
If `auto_commit` is set to false, to provided configuration won't be
|
||
|
sent but memorized until the next call to `Widget.commit()` (or a call
|
||
|
to this function with `auto_commit = True`).
|
||
|
"""
|
||
|
```
|
||
|
|
||
|
Il existe aussi `pyjecteur.dummy.Widget` qui ne requiert pas de device physique.
|
||
|
|
||
|
Pour des interactions à plus haut niveau, continuez de lire
|
||
|
|
||
|
### `pyjecteur.lights.Universe`
|
||
|
|
||
|
Objet représentant un Univers.
|
||
|
|
||
|
```python
|
||
|
class Universe:
|
||
|
"""Represents a DMX universe.
|
||
|
|
||
|
Manages the adress space and responsibles for sending DMX to widget when
|
||
|
`Universe.update_dmx()` is called.
|
||
|
"""
|
||
|
|
||
|
def __init__(self, widget):
|
||
|
"""
|
||
|
Initializes the Universe
|
||
|
|
||
|
widget must be a class providing `widget.set_dmx(data, address)`
|
||
|
"""
|
||
|
|
||
|
def register(self, light: "AbstractLight", address: int) -> None:
|
||
|
"""
|
||
|
Register a light at the specified address
|
||
|
"""
|
||
|
|
||
|
def update_dmx(self, light: "AbstractLight", data: Union[bytearray, bytes]) -> None:
|
||
|
"""
|
||
|
Update the dmx data of the specified light
|
||
|
"""
|
||
|
```
|
||
|
|
||
|
### Interéagir avec un projecteur
|
||
|
|
||
|
Globalement, il faut instancier l'objet représentant le projecteur puis
|
||
|
l'enregister sur son Univers (`Universe.register(light, address)`, ATTENTION
|
||
|
les addresses commencent à 0).
|
||
|
|
||
|
Ensuite il y a deux façon de changer les paramètres:
|
||
|
|
||
|
1. Changer les attributs (`projo.pan = 100`)
|
||
|
2. Changer les addresses directement avec la notation index (change la valeur
|
||
|
à l'addresse `addresse_projo + index`)
|
||
|
|
||
|
|
||
|
## Déclaration d'un nouveau type de projecteur
|
||
|
|
||
|
S'inspirer du fichier `pyjecteur/fixtures.py`
|