UNPKG

@maxgraph/core

Version:

maxGraph is a fully client side JavaScript diagramming library that uses SVG and HTML for rendering.

213 lines (212 loc) 7.92 kB
import GraphLayout from './GraphLayout.js'; import type { DirectionValue } from '../../types.js'; import GraphHierarchyModel from './hierarchical/GraphHierarchyModel.js'; import type { AbstractGraph } from '../AbstractGraph.js'; import type Cell from '../cell/Cell.js'; import { HierarchicalGraphLayoutTraverseArgs } from './types.js'; /** * A hierarchical layout algorithm. * * @category Layout */ declare class HierarchicalLayout extends GraphLayout { /** * Constructs a new hierarchical layout algorithm. * * @param graph Reference to the enclosing {@link AbstractGraph}. * @param orientation Optional constant that defines the orientation of this layout. Default is 'north'. * @param deterministic Optional boolean that specifies if this layout should be deterministic. Default is true. */ constructor(graph: AbstractGraph, orientation?: DirectionValue, deterministic?: boolean); deterministic: boolean; parentX: number | null; parentY: number | null; /** * Holds the array of <Cell> that this layout contains. */ roots: Cell[] | null; /** * Specifies if the parent should be resized after the layout so that it * contains all the child cells. Default is false. See also <parentBorder>. */ resizeParent: boolean; /** * Specifies if the parent location should be maintained, so that the * top, left corner stays the same before and after execution of * the layout. Default is false for backwards compatibility. */ maintainParentLocation: boolean; /** * Specifies if the parent should be moved if <resizeParent> is enabled. * Default is false. */ moveParent: boolean; /** * The border to be added around the children if the parent is to be * resized using <resizeParent>. Default is 0. */ parentBorder: number; /** * The spacing buffer added between cells on the same layer. Default is 30. */ intraCellSpacing: number; /** * The spacing buffer added between cell on adjacent layers. Default is 100. */ interRankCellSpacing: number; /** * The spacing buffer between unconnected hierarchies. Default is 60. */ interHierarchySpacing: number; /** * The distance between each parallel edge on each ranks for long edges. * Default is 10. */ parallelEdgeSpacing: number; /** * The position of the root node(s) relative to the laid out graph in. * @default north */ orientation: DirectionValue; /** * Whether or not to perform local optimisations and iterate multiple times * through the algorithm. Default is true. */ fineTuning: boolean; /** * Whether or not to tighten the assigned ranks of vertices up towards * the source cells. Default is true. */ tightenToSource: boolean; /** * Specifies if the STYLE_NOEDGESTYLE flag should be set on edges that are * modified by the result. Default is true. */ disableEdgeStyle: boolean; /** * Whether or not to drill into child cells and layout in reverse * group order. This also cause the layout to navigate edges whose * terminal vertices have different parents but are in the same * ancestry chain. Default is true. */ traverseAncestors: boolean; /** * The internal <GraphHierarchyModel> formed of the layout. */ model: GraphHierarchyModel | null; /** * A cache of edges whose source terminal is the key */ edgesCache: Map<Cell, Cell[]>; /** * A cache of edges whose source terminal is the key */ edgeSourceTermCache: Map<Cell, Cell>; /** * A cache of edges whose source terminal is the key */ edgesTargetTermCache: Map<Cell, Cell>; /** * The style to apply between cell layers to edge segments. * Default is {@link HierarchicalEdgeStyle#POLYLINE}. */ edgeStyle: number; /** * Returns the internal <GraphHierarchyModel> for this layout algorithm. */ getDataModel(): GraphHierarchyModel | null; /** * Executes the layout for the children of the specified parent. * * @param parent Parent <Cell> that contains the children to be laid out. * @param roots Optional starting roots of the layout. */ execute(parent: Cell, roots?: Cell[] | Cell | null): void; /** * Returns all visible children in the given parent which do not have * incoming edges. If the result is empty then the children with the * maximum difference between incoming and outgoing edges are returned. * This takes into account edges that are being promoted to the given * root due to invisible children or collapsed cells. * * @param parent <Cell> whose children should be checked. * @param vertices array of vertices to limit search to */ findRoots(parent: Cell, vertices: Cell[]): Cell[]; /** * Returns the connected edges for the given cell. * * @param cell <Cell> whose edges should be returned. */ getEdges(cell: Cell): Cell[]; /** * Helper function to return visible terminal for edge allowing for ports * * @param edge <Cell> whose edges should be returned. * @param source Boolean that specifies whether the source or target terminal is to be returned */ getVisibleTerminal(edge: Cell, source: boolean): Cell | null; /** * The API method used to exercise the layout upon the graph description * and produce a separate description of the vertex position and edge * routing changes made. It runs each stage of the layout that has been * created. */ run(parent: any): void; /** * Creates an array of descendant cells */ filterDescendants(cell: Cell, result: { [key: string]: Cell; }): void; /** * Returns true if the given cell is a "port", that is, when connecting to * it, its parent is the connecting vertex in terms of graph traversal * * @param cell <Cell> that represents the port. */ isPort(cell: Cell): boolean; /** * Returns the edges between the given source and target. This takes into * account collapsed and invisible cells and ports. * * source - * target - * directed - */ getEdgesBetween(source: Cell, target: Cell, directed: boolean): Cell[]; /** * Traverses the (directed) graph invoking the given function for each * visited vertex and edge. The function is invoked with the current vertex * and the incoming edge as a parameter. This implementation makes sure * each vertex is only visited once. The function may return false if the * traversal should stop at the given vertex. * * @param vertex <Cell> that represents the vertex where the traversal starts. * @param directed boolean indicating if edges should only be traversed * from source to target. Default is true. * @param edge Optional <Cell> that represents the incoming edge. This is * null for the first step of the traversal. * @param allVertices Array of cell paths for the visited cells. */ traverse({ vertex, directed, allVertices, currentComp, hierarchyVertices, filledVertexSet, }: HierarchicalGraphLayoutTraverseArgs): { [key: string]: Cell | null; }; /** * Executes the cycle stage using mxMinimumCycleRemover. */ cycleStage(parent: any): void; /** * Implements first stage of a Sugiyama layout. */ layeringStage(): void; /** * Executes the crossing stage using mxMedianHybridCrossingReduction. */ crossingStage(parent: any): void; /** * Executes the placement stage using mxCoordinateAssignment. */ placementStage(initialX: number, parent: any): number; } export default HierarchicalLayout;