import { ICurve, Point } from '../../..';
import { EdgeGeometry } from '../../../layout/core/edgeGeometry';
import { Port } from '../../../layout/core/port';
import { Polyline } from '../../../math/geometry';
import { RectangleNode } from '../../../math/geometry/RTree/RectangleNode';
import { GenericBinaryHeapPriorityQueue } from '../../../structs/genericBinaryHeapPriorityQueue';
import { BundlingSettings } from '../../BundlingSettings';
import { Cdt } from '../../ConstrainedDelaunayTriangulation/Cdt';
import { CdtEdge } from '../../ConstrainedDelaunayTriangulation/CdtEdge';
import { CdtTriangle } from '../../ConstrainedDelaunayTriangulation/CdtTriangle';
import { Shape } from '../../shape';
import { VisibilityGraph } from '../../visibility/VisibilityGraph';
import { VisibilityVertex } from '../../visibility/VisibilityVertex';
import { SdBoneEdge } from './SdBoneEdge';
import { SdVertex } from './SdVertex';
export declare class SdShortestPath {
    VisibilityGraph: VisibilityGraph;
    MakeTransparentShapesOfEdgeGeometry: (eg: EdgeGeometry) => Array<Shape>;
    BundlingSettings: BundlingSettings;
    EdgeGeometries: EdgeGeometry[];
    ObstacleHierarchy: RectangleNode<Polyline, Point>;
    vertexArray: SdVertex[];
    CdtProperty: Cdt;
    Gates: Set<CdtEdge>;
    EdgesToRoutes: Map<EdgeGeometry, Array<SdBoneEdge>>;
    EdgesToRouteSources: Map<EdgeGeometry, SdVertex>;
    CurrentEdgeGeometry: EdgeGeometry;
    VisibilityVerticesToSdVerts: Map<VisibilityVertex, SdVertex>;
    LengthCoefficient: number;
    Queue: GenericBinaryHeapPriorityQueue<SdVertex>;
    LowestCostToTarget: number;
    ClosestTargetVertex: SdVertex;
    capacityOverlowPenaltyMultiplier: number;
    sourceLoosePoly: Polyline;
    targetLoosePoly: Polyline;
    constructor(makeTransparentShapesOfEdgeGeometryAndGetTheShapes: (e: EdgeGeometry) => Array<Shape>, cdt: Cdt, gates: Set<CdtEdge>);
    CreateGraphElements(): void;
    CreateRoutingGraph(): void;
    RouteEdges(): void;
    SetEdgeGeometryCurve(edgeGeometry: EdgeGeometry): void;
    static ExtendPolylineEndToClusterBoundary(poly: Polyline, curve: ICurve): void;
    static ExtendPolylineStartToClusterBoundary(poly: Polyline, curve: ICurve): void;
    RerouteEdges(): void;
    RestoreCapacities(): void;
    RerouteEdge(edgeGeometry: EdgeGeometry): Array<SdBoneEdge>;
    RouteEdge(edgeGeometry: EdgeGeometry): Array<SdBoneEdge>;
    RouteEdgeWithGroups(): Array<SdBoneEdge>;
    RouteOnKnownSourceTargetVertices(pathDirection: Point, lookingForMonotonePath: boolean): Array<SdBoneEdge>;
    ProcessOutcomingBoneEdge(v: SdVertex, outBoneEdge: SdBoneEdge, pathDirection: Point, lookingForMonotonePath: boolean): void;
    ProcessIncomingBoneEdge(v: SdVertex, inBoneEdge: SdBoneEdge, pathDirection: Point, lookingForMonotonePath: boolean): void;
    ProcessBoneEdge(v: SdVertex, queueCandidate: SdVertex, boneEdge: SdBoneEdge): void;
    GetPathAndUpdateRelatedCosts(): Array<SdBoneEdge>;
    RegisterPathInBoneEdge(boneEdge: SdBoneEdge): void;
    UpdateResidualCostsOfCrossedCdtEdges(boneEdge: SdBoneEdge): void;
    H(v: SdVertex): number;
    GetEdgeAdditionalCost(boneEdge: SdBoneEdge, previousCost: number): number;
    CapacityOverflowCost(boneEdge: SdBoneEdge): number;
    CrossedCdtEdgesOfBoneEdge(boneEdge: SdBoneEdge): Array<CdtEdge>;
    ThreadBoneEdgeThroughCdt(boneEdge: SdBoneEdge): Set<CdtEdge>;
    static CostOfCrossingCdtEdge(capacityOverflMult: number, bundlingSettings: BundlingSettings, currentEdgeGeometry: EdgeGeometry, e: CdtEdge): number;
    CostOfCrossingCdtEdgeLocal(capacityOverflMult: number, bundlingSettings: BundlingSettings, currentEdgeGeometry: EdgeGeometry, e: CdtEdge): number;
    AdjacentToSourceOrTarget(e: CdtEdge): boolean;
    SetLengthCoefficient(): void;
    GetIdealDistanceBetweenSourceAndTarget(edgeGeometry: EdgeGeometry): number;
    SetPortVerticesAndObstacles(port: Port, sources: boolean): Polyline;
    Enqueue(simpleSdVertex: SdVertex): void;
    AddAndEnqueueVertexToEnds(point: Point, isSource: boolean, initialCost: number): void;
    FindVertex(p: Point): VisibilityVertex;
    Initialize(): void;
    CalculateCapacitiesOfTrianglulation(): void;
    static CalculateCdtEdgeCapacityForEdge(e: CdtEdge): void;
    SetVertexTriangles(): void;
    TryToAssigenTriangleToVertex(triangle: CdtTriangle, vertex: SdVertex): void;
    static CapacityOverflowPenaltyMultiplier(bundlingSettings: BundlingSettings): number;
    FillCrossedCdtEdges(crossedCdtEdges: Map<EdgeGeometry, Set<CdtEdge>>): void;
}
