SiguiyamaAlgorithm.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import Edge from "../../graph/edge/Edge.js";
  2. import Graph from "../../graph/Graph.js";
  3. import Node from "../../graph/node/Node.js";
  4. import Step from "../AlgorithmStep.js";
  5. import { SiguiyamaContext } from "./SiguiyamaContext.js";
  6. /**
  7. * Реализоция алгоритма послойного рисования графа, основанного на алгоритме Сигуямы
  8. * @see [Послойное рисование графа](https://ru.wikipedia.org/wiki/Послойное_рисование_графа)
  9. */
  10. export default class SiguiyamaAlgorithm {
  11. /**
  12. * Шаги алгоритма рисования графа
  13. * @protected
  14. */
  15. protected readonly _steps: Step<SiguiyamaContext>[] = [];
  16. /**
  17. * Добавление шага в алгоритм Сигуямы
  18. * @param step Шаг, который нужно добавить
  19. */
  20. public addStep(step: Step<SiguiyamaContext>): this {
  21. this._steps.push(step)
  22. return this;
  23. }
  24. /**
  25. * Запуск алгоритма Сигуямы
  26. * @param graph Граф, который нужно послойно отрисовать
  27. */
  28. public run(graph: Graph<Node, Edge<Node>>): SiguiyamaContext {
  29. const context: SiguiyamaContext = { graph, config: {} };
  30. this._steps.forEach((step) => {
  31. step.onBeforeRun();
  32. step.run(context);
  33. step.onAfterRun();
  34. })
  35. return context;
  36. }
  37. }