SiguiyamaContext.ts 1.7 KB

123456789101112131415161718192021222324252627282930
  1. import Edge from "../../graph/edge/Edge.js"
  2. import Layering from "../../graph/layering/Layering.js";
  3. import Node from "../../graph/node/Node.js"
  4. import { AlgorithmContext } from "../AlgorithmContext.js"
  5. import Grid from "./grid/Grid.js";
  6. import DummyNode from "../../graph/node/DummyNode.js";
  7. /**
  8. * Набор рёбер обратной связи - рёбра, которые были инвертированы на этапе удаления циклов и должны быть восстановлены на этапе назначения координат.
  9. */
  10. export type FeedbackSet = Edge<Node>[];
  11. /**
  12. * Информация о разбиении длинного ребра на сегменты с dummy-вершинами. Содержит ссылку на исходное ребро и, при наличии, ссылки на новые рёбра, образованные в результате разбиения.
  13. */
  14. export type EdgeSubdivision<TNode extends Node> = {
  15. originalEdge: Edge<TNode>;
  16. segments: Edge<TNode>[];
  17. dummies: DummyNode[];
  18. };
  19. /**
  20. * Контекст, передаваемый между шагами алгоритма Сигуямы. Содержит всю необходимую информацию о графе, его разбиении на слои, сетке и рёбрах обратной связи, которая может быть использована и модифицирована на каждом этапе оптимизации.
  21. */
  22. export type SiguiyamaContext = AlgorithmContext & Partial<{
  23. feedbackSet: FeedbackSet,
  24. layering: Layering<Node, Edge<Node>>,
  25. grid: Grid<Node>,
  26. edgeSubdivisions: Map<string, EdgeSubdivision<Node>>
  27. }>