Для кого: интеграторы, добавляющие export/import в host-app.
Что получите: SVG/PNG export, headless render, обзор ImportService.
Предварительные знания: Сервисы движка, Сцены и проекты.
Подключение:
engine.enableServices(["ExportService"])
const exportService = engine.services.ExportService
const svgString = exportService?.toSVG({
// SVGExportOptions — см. типы @etypes/export
})
exportService?.exportSVGFile("drawing.svg")
Реализация: src/engine/services/ExportService/SVGExport/SVGExport.ts.
const blob = await exportService?.toImage("PNG", "byPaper", {
imagePaddings: 10,
withGrid: false,
imageScale: 1,
})
view: "byPaper" — по размеру листаview: "byShapes" — по bbox элементовНизкоуровневый API для рендера снимка сцены без UI — drawSceneToCanvas из @engine/utils/canvas/drawSceneToCanvas. Используется внутри ExportService.toImage.
Для интеграции обычно достаточно ExportService.toImage / toSVG. Прямой вызов drawSceneToCanvas требует контейнер, размер листа, JSON сцены, snapshot элементов, список сервисов и elementsLib — см. сигнатуру в src/engine/utils/canvas/drawSceneToCanvas.ts.
engine.enableServices(["ImportService"])
ImportService и конвертеры (Visio и др.) — src/engine/services/ImportService/, src/engine/converters/.
Scope руководства: импорт доступен как сервис; детали каждого конвертера зависят от формата и лицензии. Для интеграции достаточно включить сервис и вызвать API из UI host-app (см. src/renderer/src/header/main-tool/file/).
| Проблема | Решение |
|---|---|
toImage null |
Нет currentScene или пустая сцена |
| SVG без элементов | Не зарегистрированы types из JSON (elementsLib) |
| Размытый PNG | devicePixelRatio / scale — см. calcMaxImageScale |