Kacheln zeigen Moonraker-Thumbnails; Toolpath-Thinning behält ganze Schichten; Nicht-ASCII-Namen vermeiden 10115 beim Senden.
1.9 KiB
Chargen, Etiketten und 3D-Viewer
Stand 14.10.2026.
Spulen-Chargen
Jede Spule in Grotti bekommt automatisch eine chargen_nr der Form S-YYYYMMDD-0001. Derselbe Wert steht in code und auf dem Etikett. Optional: hersteller_charge vom Rollenetikett.
Scannen: auf Material den Code tippen oder per USB-Handscanner (Tastatur + Enter). Lookup GET /api/v1/spulen/by-code/<code>. QR auf dem Etikett öffnet /material?spool=<id>.
Etikett: /etikett/<id>, Druck über den Browser. QR per lokalem qrcode.min.js (web/static/). Basis-URL für den QR kommt aus Einstellungen → FQDN (config.json Key fqdn); leer = Host der aktuellen Anfrage. Beispiel: https://grotti.example.de/material?spool=12.
3D-Pfad
GET /api/v1/dateien/<id>/pfad liefert einen gedünnten Toolpath (bis ca. 220 000 Punkte, plus layer_breaks, Cache-version 8) aus dem lokalen G-code. Thinning behält ganze Z-Höhen dicht und lässt nur ganze Schichten weg (sonst gesprenkelte Wände). Die Dateien-Seite und das Cockpit zeichnen ihn mit Three.js.
Darstellung: nur Extrusionswege. Preview = orange. Live: gedruckt leicht verdickt grün, offen grau; Schnitt nach progress. Parser akzeptiert E.39/Z.6. Bett: Gitter 10 mm, mm-Sprites, Legende.
Exclude-Object (nur Klipper/Moonraker): Status aus exclude_object. Polygone im Viewer; Liste unter dem Pfad; Zwei-Klick → POST .../steuern Action exclude_object mit confirm. Fehlt Modul/DEFINEs → Panel aus. BambuLab später eigener Adapter.
Cockpit-Live: Kamera-Frames werden unsichtbar vorgeladen (letztes Bild bleibt), no-cam-Layout nur ohne Kamera-URL. 3D-Orbit bleibt beim 5‑s-Poll erhalten (setPath nur beim ersten Laden / Dateiwechsel).
Auf der Wand: Caption Dateiname · % · Schicht a/b, sonst „Datei nicht in Grotti“.
Bedienung: Orbit / Zoom / Schwenken / Doppelklick-Reset; Tippen auf Polygon wählt das Objekt.