| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import Edge from "../../graph/edge/Edge.js";
- import Graph from "../../graph/Graph.js";
- import Node from "../../graph/node/Node.js";
- import Step from "../AlgorithmStep.js";
- import { SiguiyamaContext } from "./SiguiyamaContext.js";
- /**
- * Реализоция алгоритма послойного рисования графа, основанного на алгоритме Сигуямы
- * @see [Послойное рисование графа](https://ru.wikipedia.org/wiki/Послойное_рисование_графа)
- */
- export default class SiguiyamaAlgorithm {
- /**
- * Шаги алгоритма рисования графа
- * @protected
- */
- protected readonly _steps: Step<SiguiyamaContext>[] = [];
- /**
- * Добавление шага в алгоритм Сигуямы
- * @param step Шаг, который нужно добавить
- */
- public addStep(step: Step<SiguiyamaContext>): this {
- this._steps.push(step)
- return this;
- }
- /**
- * Запуск алгоритма Сигуямы
- * @param graph Граф, который нужно послойно отрисовать
- */
- public run(graph: Graph<Node, Edge<Node>>): SiguiyamaContext {
- const context: SiguiyamaContext = { graph, config: {} };
- this._steps.forEach((step) => {
- step.onBeforeRun();
- step.run(context);
- step.onAfterRun();
- })
- return context;
- }
- }
|