Архитектура экспортёра
Экспортёр — это мост между данными drawtonomy внутри редактора и внешними форматами — OpenDRIVE, OpenSCENARIO, Lanelet2 или чем угодно, что вы подключите следующим. Понимание пайплайна — это предусловие для добавления нового целевого формата.
Пайплайн
Заголовок раздела «Пайплайн»Состояние редактора ──► DrawtonomySnapshot ──► Экспортёр ──► Файл / blob (сериализуемый) (чистый)1. DrawtonomySnapshot
Заголовок раздела «1. DrawtonomySnapshot»Снимок — это обычный объект: список фигур плюс штамп версии и временная метка. Он сериализуем, не имеет ссылок на DOM и является единственным входом, который принимает экспортёр.
interface DrawtonomySnapshot { version: string timestamp: string shapes: BaseShape[]}Снимок строится через createSnapshot(shapes) или парсингом
сохранённого drawtonomy.svg через parseDrawtonomySvg(svg).
2. Модули экспортёра
Заголовок раздела «2. Модули экспортёра»Каждый целевой формат — отдельная чистая функция:
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 }
Они принимают снимок и возвращают строку или blob. Никакого доступа к редактору, DOM или асинхронных зависимостей. Тот же вход — тот же выход.
3. Обмен
Заголовок раздела «3. Обмен»Для Lanelet2 SDK также поставляет парсер:
exporter.parseOsmXml(osm) → ParsedOsmexporter.osmToShapes(parsed) → BaseShape[]
Это то, что обеспечивает работу импорта Lanelet2.
Почему чистые функции
Заголовок раздела «Почему чистые функции»Экспортёр выполняет один и тот же путь кода в браузере, в Node-CI-скрипте, в серверном пайплайне или в браузерном расширении. Тесты прогоняются против фикстур-снимков без headless-браузера.
Поэтому экспортёр живёт в @drawtonomy/sdk, а не внутри редактора —
редактор зависит от SDK, а не наоборот.
Добавление целевого формата
Заголовок раздела «Добавление целевого формата»Экспортёр — это основная точка расширения для новых целей — CARLA, Unity, SUMO, кастомные DSL. Рецепт:
- Добавьте новый модуль под
packages/drawtonomy-sdk/src/exporter/. - Принимайте
DrawtonomySnapshotна входе, возвращайте строку или blob. - Добавьте тесты под
packages/drawtonomy-sdk/__tests__/exporter/, используя фикстуры-снимки. - Подключите UI-точку входа, если хотите, чтобы меню Export редактора знало о ней (опционально — многие пользователи будут вызывать программно).
Полное руководство разработчика — в публичном репозитории: Exporter Developer Guide.
См. также
Заголовок раздела «См. также»- Экспорт в OpenDRIVE / OpenSCENARIO / esmini — пользовательский поток.
- Обзор
@drawtonomy/sdk - API SDK экспортёра