import { Point, Rectangle } from '../..'; import { Direction, LineSegment } from '../../math/geometry'; import { HitTestBehavior } from '../../math/geometry/RTree/hitTestBehavior'; import { RectangleNode } from '../../math/geometry/RTree/rectangleNode'; import { Shape } from '../shape'; import { GroupBoundaryCrossingMap } from './GroupBoundaryCrossingMap'; import { Obstacle } from './obstacle'; import { PointAndCrossingsList } from './PointAndCrossingsList'; import { ScanDirection } from './ScanDirection'; export declare class ObstacleTree { insideHitTestIgnoreObstacle1: Obstacle; insideHitTestIgnoreObstacle2: Obstacle; insideHitTestScanDirection: ScanDirection; Root: RectangleNode; get GraphBox(): Rectangle; AncestorSets: Map>; SpatialAncestorsAdjusted: boolean; private shapeIdToObstacleMap; CurrentGroupBoundaryCrossingMap: GroupBoundaryCrossingMap; private allObstacles; private overlapPairs; private hasOverlaps; private lookupIntPair; Init(obstacles: Iterable, ancestorSets: Map>, idToObstacleMap: Map): void; private CreateObstacleListAndOrdinals; private OrdinalToObstacle; private CreateRoot; private OverlapsExist; private OverlapPairAlreadyFound; private CheckForInitialOverlaps; private AccreteClumps; private AccreteConvexHulls; static CalculateHierarchy(obstacles: Iterable): RectangleNode; private AccumulateObstaclesForClumps; private EvaluateOverlappedPairForClump; private AccumulateObstaclesForConvexHulls; private EvaluateOverlappedPairForConvexHull; GrowGroupsToAccommodateOverlaps(): void; private AccumulateObstaclesForGroupOverlaps; private EvaluateOverlappedPairForGroup; private static FirstRectangleContainsACornerOfTheOther; private static FirstPolylineStartIsInsideSecondPolyline; private AddClumpToConvexHull; private AddConvexHullToConvexHull; private CreateClumps; private CreateConvexHulls; private GrowGroupsToResolveOverlaps; private static ResolveGroupAndGroupOverlap; private static ResolveGroupAndObstacleOverlap; private static GrowGroupAroundLoosePolyline; static ObstaclesIntersect(a: Obstacle, b: Obstacle, t: { aIsInsideB: boolean; bIsInsideA: boolean; }): boolean; private static ObstaclesAreCloseEnoughToBeConsideredTouching; AdjustSpatialAncestors(): boolean; GetAllGroups(): Array; Clear(): void; CreateMaxVisibilitySegment(startPoint: Point, dir: Direction, t: { pacList: PointAndCrossingsList; }): LineSegment; GetAllObstacles(): Array; GetAllPrimaryObstacles(): Iterable; IntersectionIsInsideAnotherObstacle(sideObstacle: Obstacle, eventObstacle: Obstacle, intersect: Point, scanDirection: ScanDirection): boolean; PointIsInsideAnObstaclePD(intersect: Point, direction: Direction): boolean; PointIsInsideAnObstacle(intersect: Point, scanDirection: ScanDirection): boolean; InsideObstacleHitTest(location: Point, obstacle: Obstacle): HitTestBehavior; SegmentCrossesAnObstacle(startPoint: Point, endPoint: Point): boolean; SegmentCrossesANonGroupObstacle(startPoint: Point, endPoint: Point): boolean; RestrictSegmentWithObstacles(startPoint: Point, endPoint: Point): LineSegment; private RestrictSegmentPrivate; private GetRestrictedIntersectionTestSegment; restrictedIntersectionTestSegment: LineSegment; currentRestrictedRay: LineSegment; wantGroupCrossings: boolean; stopAtGroups: boolean; restrictedRayLengthSquared: number; private RecurseRestrictRayWithObstacles; private LookForCloserNonGroupIntersectionToRestrictRay; private AddGroupIntersectionsToRestrictedRay; }