Architektura eksportera
Eksporter to most między danymi w edytorze drawtonomy a zewnętrznymi formatami — OpenDRIVE, OpenSCENARIO, Lanelet2 lub czymkolwiek podłączysz dalej. Zrozumienie potoku jest warunkiem wstępnym do dodania nowego formatu docelowego.
Stan edytora ──► DrawtonomySnapshot ──► Eksporter ──► Plik / blob (serializowalny) (czysty)1. DrawtonomySnapshot
Dział zatytułowany „1. DrawtonomySnapshot”Migawka to zwykły obiekt: lista kształtów plus znacznik wersji i sygnatura czasowa. Jest serializowalna, nie ma odwołań do DOM i jest jedynym wejściem, jakie pobiera eksporter.
interface DrawtonomySnapshot { version: string timestamp: string shapes: BaseShape[]}Migawkę budujesz za pomocą createSnapshot(shapes) lub przez
parsowanie zapisanego drawtonomy.svg za pomocą
parseDrawtonomySvg(svg).
2. Moduły eksportera
Dział zatytułowany „2. Moduły eksportera”Każdy format docelowy to osobna czysta funkcja:
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 }
Pobierają migawkę, zwracają ciąg lub blob. Brak dostępu do edytora, brak DOM, brak zależności asynchronicznych. To samo wejście, to samo wyjście.
3. Round-trip
Dział zatytułowany „3. Round-trip”Dla Lanelet2 SDK dostarcza również parser:
exporter.parseOsmXml(osm) → ParsedOsmexporter.osmToShapes(parsed) → BaseShape[]
To zasila przepływ importu Lanelet2.
Dlaczego czyste funkcje
Dział zatytułowany „Dlaczego czyste funkcje”Eksporter uruchamia tę samą ścieżkę kodu w przeglądarce, w skrypcie CI Node, w potoku po stronie serwera lub w rozszerzeniu przeglądarki. Testy uruchamiają się względem fixture’ów migawek bez headless browser.
Dlatego eksporter żyje w @drawtonomy/sdk, a nie wewnątrz edytora —
edytor zależy od SDK, a nie odwrotnie.
Dodawanie formatu docelowego
Dział zatytułowany „Dodawanie formatu docelowego”Eksporter to główny punkt rozszerzenia dla nowych celów — CARLA, Unity, SUMO, niestandardowych DSL. Receptura:
- Dodaj nowy moduł pod
packages/drawtonomy-sdk/src/exporter/. - Pobierz
DrawtonomySnapshotna wejście, zwróć ciąg lub blob. - Dodaj testy pod
packages/drawtonomy-sdk/__tests__/exporter/z użyciem fixture’ów migawek. - Podłącz punkt wejścia UI, jeśli chcesz, aby menu Eksportu edytora o nim wiedziało (opcjonalne — wielu użytkowników wywoła go programistycznie).
Pełny przewodnik dewelopera znajduje się w publicznym repo: Przewodnik Dewelopera Eksportera.
Zobacz także
Dział zatytułowany „Zobacz także”- Eksport do OpenDRIVE / OpenSCENARIO / esmini — przepływ dla użytkownika.
- Przegląd
@drawtonomy/sdk - API Exporter SDK