import { DebugCurve } from '../../math/geometry/debugCurve'; import { ICurve } from '../../math/geometry/icurve'; import { RBNode } from '../../math/RBTree/rbNode'; import { RBTree } from '../../math/RBTree/rbTree'; import { Algorithm } from '../../utils/algorithm'; import { CdtEdge } from './CdtEdge'; import { CdtFrontElement } from './CdtFrontElement'; import { CdtSite } from './CdtSite'; import { CdtTriangle } from './CdtTriangle'; import { PerimeterEdge } from './PerimeterEdge'; export declare class CdtSweeper extends Algorithm { front: RBTree; triangles: Set; listOfSites: Array; p_2: CdtSite; createEdgeDelegate: (a: CdtSite, b: CdtSite) => CdtEdge; p_1: CdtSite; constructor(listOfSites: Array, p_1: CdtSite, p_2: CdtSite, createEdgeDelegate: (a: CdtSite, b: CdtSite) => CdtEdge); run(): void; FinalizeTriangulation(): void; MakePerimeterConvex(): void; FindConcaveEdge(firstPerimeterEdge: PerimeterEdge): PerimeterEdge; static FindPivot(firstPerimeterEdge: PerimeterEdge): PerimeterEdge; FindFirsePerimeterEdge(): CdtEdge; CreateDoubleLinkedListOfPerimeter(): PerimeterEdge; static FindNextEdgeOnPerimeter(e: CdtEdge): CdtEdge; static CreatePerimeterElementFromEdge(edge: CdtEdge): PerimeterEdge; RemoveP1AndP2Triangles(): void; static RemoveTriangleWithEdges(cdtTriangles: Set, t: CdtTriangle): void; static RemoveTriangleButLeaveEdges(cdtTriangles: Set, t: CdtTriangle): void; ProcessSite(site: CdtSite): void; EdgeEvent(edge: CdtEdge): void; static EdgeIsProcessed(edge: CdtEdge): boolean; ShowFrontWithSite(site: CdtSite, redCurves?: ICurve[]): void; Show(fn: string): void; static ShowCdt(cdtTriangles: CdtTriangle[], cdtFrontElements: RBTree, redCurves: Array, blueCurves: Array, dc: DebugCurve[], fn: string): void; static GetDebugCurveOfCdtEdge(e: CdtEdge): DebugCurve; PointEvent(pi: CdtSite): void; LeftCase(pi: CdtSite, hittedFrontElementNode: RBNode, t: { rightSite: CdtSite; }): CdtSite; MiddleCase(pi: CdtSite, hittedFrontElementNode: RBNode, t: { rightSite: CdtSite; }): CdtSite; TriangulateEmptySpaceToTheLeft(leftLegNode: RBNode): void; ShortcutTwoListElements(a: PerimeterEdge): PerimeterEdge; ShortcutTwoFrontElements(aNode: RBNode, bNode: RBNode): RBNode; TryTriangulateBasinToTheLeft(leftLegNode: RBNode): void; static DropsSharpEnoughToTheLeft(frontElement: CdtFrontElement): boolean; InsertSiteIntoFront(leftSite: CdtSite, pi: CdtSite, rightSite: CdtSite): RBNode; TriangulateEmptySpaceToTheRight(piNode: RBNode): void; TryTriangulateBasinToTheRight(piNode: RBNode): void; static DropsSharpEnoughToTheRight(frontElement: CdtFrontElement): boolean; static FindNodeInFrontBySite(cdtFrontElements: RBTree, piSite: CdtSite): RBNode; InsertAndLegalizeTriangle(pi: CdtSite, frontElement: CdtFrontElement): void; LegalizeEdge(pi: CdtSite, edge: CdtEdge): void; LegalizeEdgeForOtherCwTriangle(pi: CdtSite, edge: CdtEdge): void; LegalizeEdgeForOtherCcwTriangle(pi: CdtSite, edge: CdtEdge): void; ProjectToFront(site: CdtSite): RBNode; /** start of edge insert region */ traversingEdge: CdtEdge; rightPolygon: Array; leftPolygon: Array; addedTriangles: Array; private runEdgeInserter; initEdgeInserter(): void; UpdateFront(): void; AddEdgeToFront(e: CdtEdge): void; TriangulatePolygon0(polygon: Array, a: CdtSite, b: CdtSite, reverseTrangleWhenCompare: boolean): void; TriangulatePolygon1(start: number, end: number, polygon: Array, a: CdtSite, b: CdtSite, reverseTrangleWhenCompare: boolean): void; TraceEdgeThroughTriangles(): void; /** edge tracer region */ a: CdtSite; b: CdtSite; piercedEdge: CdtEdge; piercedTriangle: CdtTriangle; piercedToTheLeftFrontElemNode: RBNode; piercedToTheRightFrontElemNode: RBNode; elementsToBeRemovedFromFront: Array; removedTriangles: Array; Traverse(): void; ProcessLeftFrontPiercedElement(): void; FindPiercedTriangle(v: RBNode): void; FindMoreRemovedFromFrontElements(): void; ProcessPiercedEdge(): void; PrepareNextStateAfterPiercedEdge(): void; removePiercedTriangle(t: CdtTriangle): void; ProcessRightFrontPiercedElement(): void; AddSiteToLeftPolygon(site: CdtSite): void; AddSiteToPolygonWithCheck(site: CdtSite, list: Array): void; AddSiteToRightPolygon(site: CdtSite): void; BIsReached(): boolean; initEdgeTracer(): void; } export declare function InCircle(d: CdtSite, a: CdtSite, b: CdtSite, c: CdtSite): boolean;