Для кого: интеграторы UI, синхронизирующие React/store с состоянием движка.
Что получите: ключевые события, режимы Mode, паттерн подписки.
Предварительные знания: Сервисы движка.
EulerGraph наследует EventEmitter. Типы: EngineEvents, payload — EngineEventsPayloads.
import type { EngineEventsPayloads } from "@eulergraph/types"
function onSelectionChanged(cells: EngineEventsPayloads["selection_changed"]) {
console.log("Selected:", cells.map((c) => c.id))
}
engine.on("selection_changed", onSelectionChanged)
// Отписка
engine.off("selection_changed", onSelectionChanged)
Эталон множественных подписок: src/renderer/src/hooks/useEngine.ts.
| Событие | Payload (кратко) | Use case |
|---|---|---|
started |
EulerGraph |
Инициализация сцены |
restart |
EulerGraph |
Потеря canvas context — пересоздать engine |
selection_changed |
GraphicElement[] |
Панель свойств |
cell_transformed |
ChangedCell |
Live preview transform |
cells_removed |
GraphicElement[] |
Обновить списки |
set_current_scene |
{ pageName, currentScene } |
Табы страниц |
scenes_updated |
{ sceneNames } |
Список листов |
mode_changed |
Mode |
Активный инструмент |
zoom_update |
number |
Индикатор масштаба (подписка на engine.canvasControls, не на engine) |
undoRedo |
{ hasUndo, hasRedo } |
Кнопки undo/redo |
libs_updated |
StencilGroup[] |
Панель Stencil |
layers_changed |
{ layers } |
Панель слоёв |
services_changed |
AvailableServices |
Доступные сервисы |
line_draw_start |
{ figure } |
Начало рисования линии |
beforeSceneChange |
{ save } |
Автосохранение |
Полный список — src/engine/types/events/events.ts.
import { Mode } from "@eulergraph/types"
engine.mode = Mode.select
engine.mode = Mode.draw
engine.mode = Mode.pan
engine.mode = Mode.rotate
| Mode | Назначение |
|---|---|
select |
Выделение и перемещение |
draw |
Рисование через DrawService |
pan |
Панорамирование |
move / scale / rotate |
Transform (часто через Editor) |
addText |
Добавление текста |
copyStyle |
Копирование стиля |
comment |
Комментарии |
Смена режима эмитит mode_changed.
engine.on("restart", (newEngine) => {
// EulergraphCanvas пересоздаёт engine автоматически
onEngineSet(newEngine)
})
useEffect при появлении eulerEngine.useEngine.off(...).off при unmount.