Ir al contenido

Arquitectura del exportador

El exportador es el puente entre los datos en el editor de drawtonomy y los formatos externos — OpenDRIVE, OpenSCENARIO, Lanelet2 o lo que conectes a continuación. Entender el pipeline es el prerrequisito para añadir un nuevo formato de destino.

Estado del editor ──► DrawtonomySnapshot ──► Exportador ──► Archivo / blob
(serializable) (puro)

Un snapshot es un objeto plano: una lista de formas más una marca de versión y una marca de tiempo. Es serializable, no tiene referencias al DOM y es la única entrada que toma el exportador.

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

Construyes un snapshot con createSnapshot(shapes), o parseando un drawtonomy.svg guardado con parseDrawtonomySvg(svg).

Cada formato de destino es una función pura separada:

  • 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 }

Toman un snapshot, devuelven una cadena o un blob. Sin acceso al editor, sin DOM, sin dependencias asíncronas. Misma entrada, misma salida.

Para Lanelet2, el SDK también incluye un parser:

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

Esto es lo que impulsa el flujo de Importación Lanelet2.

El exportador ejecuta el mismo camino de código en el navegador, en un script de CI de Node, en un pipeline del lado del servidor o en una extensión del navegador. Las pruebas se ejecutan contra fixtures de snapshot sin navegador headless.

Por eso el exportador vive en @drawtonomy/sdk y no dentro del editor — el editor depende del SDK, no al revés.

El exportador es el principal punto de extensión para nuevos destinos — CARLA, Unity, SUMO, DSLs personalizados. La receta:

  1. Añadir un nuevo módulo bajo packages/drawtonomy-sdk/src/exporter/.
  2. Tomar DrawtonomySnapshot como entrada, devolver una cadena o blob.
  3. Añadir pruebas bajo packages/drawtonomy-sdk/__tests__/exporter/ usando fixtures de snapshot.
  4. Conectar un punto de entrada de UI si quieres que el menú Exportar del editor lo conozca (opcional — muchos usuarios lo llamarán programáticamente).

La guía completa para desarrolladores está en el repo público: Guía de Desarrollador del Exportador.