Zum Inhalt springen

Exporter-Architektur

Der Exporter ist die Brücke zwischen den Editor-internen Daten von drawtonomy und externen Formaten — OpenDRIVE, OpenSCENARIO, Lanelet2 oder was auch immer Sie als Nächstes anschließen. Verständnis der Pipeline ist Voraussetzung dafür, ein neues Zielformat hinzuzufügen.

Editor-Zustand ──► DrawtonomySnapshot ──► Exporter ──► Datei / Blob
(serialisierbar) (rein)

Ein Snapshot ist ein einfaches Objekt: eine Liste von Formen plus einen Versionsstempel und einen Zeitstempel. Er ist serialisierbar, hat keine DOM-Referenzen und ist die einzige Eingabe, die der Exporter entgegennimmt.

interface DrawtonomySnapshot {
version: string
timestamp: string
shapes: BaseShape[]
}

Sie erzeugen einen Snapshot mit createSnapshot(shapes) oder durch Parsen einer gespeicherten drawtonomy.svg mit parseDrawtonomySvg(svg).

Jedes Zielformat ist eine eigene reine Funktion:

  • exporter.exportToOpenDrive(snapshot, options) → string (XML)
  • exporter.exportToOpenScenario(snapshot, options) → string (XML)
  • exporter.exportToLanelet2(snapshot, options) → string (OSM-XML)
  • exporter.buildEsminiZip(snapshot, options) → { blob, baseName }

Sie nehmen einen Snapshot entgegen und liefern einen String oder ein Blob. Kein Editor-Zugriff, kein DOM, keine asynchronen Abhängigkeiten. Gleiche Eingabe, gleiche Ausgabe.

Für Lanelet2 liefert das SDK zusätzlich einen Parser:

  • exporter.parseOsmXml(osm) → ParsedOsm
  • exporter.osmToShapes(parsed) → BaseShape[]

Das treibt den Ablauf des Lanelet2-Imports an.

Der Exporter durchläuft denselben Codepfad im Browser, in einem Node-CI-Skript, in einer serverseitigen Pipeline oder in einer Browser-Erweiterung. Tests laufen gegen Snapshot-Fixtures ohne Headless-Browser.

Deshalb lebt der Exporter in @drawtonomy/sdk und nicht im Editor — der Editor hängt vom SDK ab, nicht umgekehrt.

Der Exporter ist der Haupterweiterungspunkt für neue Ziele — CARLA, Unity, SUMO, eigene DSLs. Das Rezept:

  1. Ein neues Modul unter packages/drawtonomy-sdk/src/exporter/ anlegen.
  2. DrawtonomySnapshot als Eingabe nehmen, einen String oder ein Blob zurückgeben.
  3. Tests unter packages/drawtonomy-sdk/__tests__/exporter/ mit Snapshot-Fixtures hinzufügen.
  4. Optional einen UI-Einstiegspunkt verkabeln, wenn das Export-Menü des Editors davon wissen soll (viele Anwender werden ihn programmatisch aufrufen).

Die vollständige Entwickleranleitung liegt im öffentlichen Repo: Exporter Developer Guide.