Rayforge-Paket-Entwicklerleitfaden
Rayforge verwendet ein Paketsystem basierend auf pluggy, um Entwicklern zu ermöglichen, Funktionalität zu erweitern, neue Maschinentreiber hinzuzufügen oder benutzerdefinierte Logik zu integrieren, ohne den Kern-Code zu ändern.
1. Schnellstart
Der schnellste Weg zum Starten ist die Verwendung des offiziellen Templates.
- Forken oder Klonen Sie das rayforge-package-template.
- Benennen Sie das Verzeichnis um und aktualisieren Sie die Metadaten.
2. Paketstruktur
Der PackageManager scannt das packages-Verzeichnis. Ein gültiges Paket muss ein Verzeichnis sein, das mindestens zwei Dateien enthält:
rayforge_package.yaml(Metadaten)- Einen Python-Einstiegspunkt (z.B.
package.py)
Verzeichnisstruktur:
mein-rayforge-paket/
├── rayforge_package.yaml <-- Erforderliches Manifest
├── package.py <-- Einstiegspunkt (Logik)
├── assets/ <-- Optionale Ressourcen
└── README.md
3. Das Manifest (rayforge_package.yaml)
Diese Datei teilt Rayforge mit, wie Ihr Paket geladen werden soll.
# rayforge_package.yaml
# Eindeutiger Bezeichner für Ihr Paket
name: mein_benutzerdefiniertes_paket
# Menschenlesbarer Anzeigename
display_name: "Mein Benutzerdefiniertes Paket"
# Versionszeichenfolge
version: 0.1.0
# Im UI angezeigte Beschreibung
description: "Fügt Unterstützung für den XYZ-Laserschneider hinzu."
# Abhängigkeiten (Paket und Versionseinschränkungen)
depends:
- rayforge>=0.27.0,~0.27
# Die zu ladende Python-Datei (relativ zum Paketordner)
entry_point: package.py
# Autorenmetadaten
author: Max Mustermann
url: https://github.com/username/mein-benutzerdefiniertes-paket
4. Den Paketcode schreiben
Rayforge verwendet pluggy-Hooks. Um sich in Rayforge einzuklinken, definieren Sie Funktionen, die mit @pluggy.HookimplMarker("rayforge") dekoriert sind.
Grundlegendes Boilerplate (package.py)
import logging
import pluggy
from rayforge.context import RayforgeContext
# Den Hook-Implementierungs-Marker definieren
hookimpl = pluggy.HookimplMarker("rayforge")
logger = logging.getLogger(__name__)
@hookimpl
def rayforge_init(context: RayforgeContext):
"""
Wird aufgerufen, wenn Rayforge vollständig initialisiert ist.
Dies ist Ihr Haupteinstiegspunkt für den Zugriff auf Manager.
"""
logger.info("Mein Benutzerdefiniertes Paket wurde gestartet!")
# Auf Kernsysteme über den Kontext zugreifen
machine = context.machine
camera = context.camera_mgr
if machine:
logger.info(f"Paket läuft auf Maschine: {machine.id}")
@hookimpl
def register_machines(machine_manager):
"""
Wird während des Starts aufgerufen, um neue Maschinentreiber zu registrieren.
"""
# from .my_driver import MyNewMachine
# machine_manager.register("my_new_machine", MyNewMachine)
pass
Verfügbare Hooks
Definiert in rayforge/core/hooks.py:
rayforge_init (context)
: Haupteinstiegspunkt. Wird nach dem Laden von Konfiguration, Kamera und Hardware aufgerufen.
Verwenden Sie dies für Logik, UI-Injektionen oder Listener.
register_machines (machine_manager)
: Wird früh im Boot-Prozess aufgerufen. Verwenden Sie dies, um neue Hardwareklassen/Treiber zu registrieren.
5. Auf Rayforge-Daten zugreifen
Der rayforge_init-Hook stellt den RayforgeContext bereit. Über dieses Objekt können Sie auf Folgendes zugreifen:
context.machine: Die aktuell aktive Maschineninstanz.context.config: Globale Konfigurationseinstellungen.context.camera_mgr: Zugriff auf Kamera-Feeds und Computer-Vision-Tools.context.material_mgr: Zugriff auf die Materialbibliothek.context.recipe_mgr: Zugriff auf Verarbeitungsrezepte.
6. Entwicklung & Testen
Um Ihr Paket lokal zu testen ohne es zu veröffentlichen:
-
Lokalisieren Sie Ihr Konfigurationsverzeichnis: Rayforge verwendet
platformdirs.- Windows:
C:\Users\<User>\AppData\Local\rayforge\rayforge\packages - macOS:
~/Library/Application Support/rayforge/packages - Linux:
~/.config/rayforge/packages(Prüfen Sie die Logs beim Start aufConfig dir is ...)
- Windows:
-
Verlinken Sie Ihr Paket symbolisch: Anstatt Dateien hin- und her zu kopieren, erstellen Sie einen symbolischen Link von Ihrem Entwicklungsordner zum Rayforge-Paketeordner.
Linux/macOS:
ln -s /pfad/zu/mein-rayforge-paket ~/.config/rayforge/packages/mein-rayforge-paket -
Rayforge neu starten: Die Anwendung scannt das Verzeichnis beim Start. Prüfen Sie die Konsolen-Logs auf:
Loaded package: mein_benutzerdefiniertes_paket
7. Veröffentlichung
Um Ihr Paket mit der Community zu teilen:
- Auf Git hosten: Pushen Sie Ihren Code in ein öffentliches Git-Repository (GitHub, GitLab, etc.).
- Bei der Registry einreichen:
- Gehen Sie zu rayforge-registry.
- Forken Sie das Repository.
- Fügen Sie die Git-URL und Metadaten Ihres Pakets zur Registry-Liste hinzu.
- Reichen Sie einen Pull Request ein.
Sobald akzeptiert, können Benutzer Ihr Paket direkt über die Rayforge-UI oder mit der Git-URL installieren.