import Edge from "../../graph/edge/Edge.js" import Layering from "../../graph/layering/Layering.js"; import Node from "../../graph/node/Node.js" import { AlgorithmContext } from "../AlgorithmContext.js" import Grid from "./grid/Grid.js"; import DummyNode from "../../graph/node/DummyNode.js"; /** * Набор рёбер обратной связи - рёбра, которые были инвертированы на этапе удаления циклов и должны быть восстановлены на этапе назначения координат. */ export type FeedbackSet = Edge[]; /** * Информация о разбиении длинного ребра на сегменты с dummy-вершинами. Содержит ссылку на исходное ребро и, при наличии, ссылки на новые рёбра, образованные в результате разбиения. */ export type EdgeSubdivision = { originalEdge: Edge; segments: Edge[]; dummies: DummyNode[]; }; /** * Контекст, передаваемый между шагами алгоритма Сигуямы. Содержит всю необходимую информацию о графе, его разбиении на слои, сетке и рёбрах обратной связи, которая может быть использована и модифицирована на каждом этапе оптимизации. */ export type SiguiyamaContext = AlgorithmContext & Partial<{ feedbackSet: FeedbackSet, layering: Layering>, grid: Grid, edgeSubdivisions: Map> }>