/** @packageDocumentation
 * @module Tiles
 */
import { BeTimePoint } from "@itwin/core-bentley";
import { ClipVector, IndexedPolyface, Point3d, Transform } from "@itwin/core-geometry";
import { ColorDef } from "@itwin/core-common";
import { GraphicBuilder } from "../render/GraphicBuilder";
import { RenderGraphic } from "../render/RenderGraphic";
import { RenderSystem } from "../render/RenderSystem";
import { ViewingSpace } from "../ViewingSpace";
import { Viewport } from "../Viewport";
import { RealityTileRegion, RealityTileTree, Tile, TileContent, TileDrawArgs, TileGeometryCollector, TileGraphicType, TileParams, TileRequest, TileRequestChannel, TileUser, TraversalDetails, TraversalSelectionContext } from "./internal";
/** @internal */
export interface RealityTileParams extends TileParams {
    readonly transformToRoot?: Transform;
    readonly additiveRefinement?: boolean;
    readonly noContentButTerminateOnSelection?: boolean;
    readonly rangeCorners?: Point3d[];
    readonly region?: RealityTileRegion;
    readonly geometricError?: number;
}
/** The geometry representing the contents of a reality tile. Currently only polyfaces are returned.
 * @see [[RealityTile.geometry]] to access a particular tile's geometry.
 * @public
 */
export interface RealityTileGeometry {
    /** Polyfaces representing the tile's geometry. */
    polyfaces?: IndexedPolyface[];
}
/** @internal */
export interface RealityTileContent extends TileContent {
    geometry?: RealityTileGeometry;
}
/** A [[Tile]] within a [[RealityTileTree]], representing part of a reality model (e.g., a point cloud or photogrammetry mesh) or 3d terrain with map imagery.
 * @public
 */
export declare class RealityTile extends Tile {
    /** @internal */
    readonly transformToRoot?: Transform;
    /** @internal */
    readonly additiveRefinement?: boolean;
    /** @internal */
    readonly noContentButTerminateOnSelection?: boolean;
    /** @internal */
    readonly rangeCorners?: Point3d[];
    /** @internal */
    readonly region?: RealityTileRegion;
    /** @internal */
    protected _geometry?: RealityTileGeometry;
    private _everDisplayed;
    /** @internal */
    protected _reprojectionTransform?: Transform;
    private _reprojectedGraphic?;
    private readonly _geometricError?;
    /** @internal */
    constructor(props: RealityTileParams, tree: RealityTileTree);
    /** @internal */
    setContent(content: RealityTileContent): void;
    /** @internal */
    freeMemory(): void;
    /** @internal */
    get realityChildren(): RealityTile[] | undefined;
    /** @internal */
    get realityParent(): RealityTile;
    /** @internal */
    get realityRoot(): RealityTileTree;
    /** @internal */
    get graphicType(): TileGraphicType | undefined;
    /** @internal */
    get maxDepth(): number;
    /** @internal */
    get isPointCloud(): boolean;
    /** @internal */
    get isLoaded(): boolean;
    /** A representation of the tile's geometry.
     * This property is only available when using [[TileGeometryCollector]].
     */
    get geometry(): RealityTileGeometry | undefined;
    /** @internal */
    get isDisplayable(): boolean;
    /** @internal */
    markUsed(args: TileDrawArgs): void;
    /** @internal */
    markDisplayed(): void;
    /** @internal */
    isOccluded(_viewingSpace: ViewingSpace): boolean;
    /** @internal */
    get channel(): TileRequestChannel;
    /** @internal */
    requestContent(isCanceled: () => boolean): Promise<TileRequest.Response>;
    /** @internal */
    private useAdditiveRefinementStepchildren;
    /** @internal */
    protected _loadChildren(resolve: (children: Tile[] | undefined) => void, reject: (error: Error) => void): void;
    /** @internal */
    readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent>;
    /** @internal */
    computeLoadPriority(viewports: Iterable<Viewport>, users: Iterable<TileUser>): number;
    /** @internal */
    getContentClip(): ClipVector | undefined;
    /** Allow tile to select additional tiles (Terrain Imagery...)
     * @internal
     */
    selectSecondaryTiles(_args: TileDrawArgs, _context: TraversalSelectionContext): void;
    /** An upsampled tile is not loadable - will override to return loadable parent.
     * @internal
     */
    get loadableTile(): RealityTile;
    /** @internal */
    preloadRealityTilesAtDepth(depth: number, context: TraversalSelectionContext, args: TileDrawArgs): void;
    /** @internal */
    preloadProtectedTiles(args: TileDrawArgs, context: TraversalSelectionContext): boolean;
    /** @internal */
    addBoundingGraphic(builder: GraphicBuilder, color: ColorDef): void;
    /** @internal */
    reproject(rootReprojection: Transform): void;
    /** @internal */
    allChildrenIncluded(tiles: Tile[]): boolean;
    /** @internal */
    protected getLoadedRealityChildren(args: TileDrawArgs): boolean;
    /** @internal */
    protected forceSelectRealityTile(): boolean;
    /** @internal */
    protected minimumVisibleFactor(): number;
    /** @internal */
    selectRealityTiles(context: TraversalSelectionContext, args: TileDrawArgs, traversalDetails: TraversalDetails): void;
    /** @internal */
    protected selectRealityChildrenAsFallback(context: TraversalSelectionContext, args: TileDrawArgs, traversalDetails: TraversalDetails): void;
    /** @internal */
    protected selectRealityChildren(context: TraversalSelectionContext, args: TileDrawArgs, traversalDetails: TraversalDetails): void;
    /** @internal */
    purgeContents(olderThan: BeTimePoint, useProtectedTiles: boolean): void;
    private getTilesToPurge;
    private getTilesToPurgeWithoutProtection;
    private removeFirstDisplayableChildrenFromSet;
    /** @internal */
    computeVisibilityFactor(args: TileDrawArgs): number;
    /** @internal */
    protected get _anyChildNotFound(): boolean;
    /** @internal */
    getSizeProjectionCorners(): Point3d[] | undefined;
    /** @internal */
    get isStepChild(): boolean;
    /** @internal */
    protected loadAdditiveRefinementChildren(resolve: (children: Tile[]) => void): void;
    /** @internal */
    produceGraphics(): RenderGraphic | undefined;
    /** @internal */
    get unprojectedGraphic(): RenderGraphic | undefined;
    /** @internal */
    disposeContents(): void;
    /** @internal */
    collectTileGeometry(collector: TileGeometryCollector): void;
}
//# sourceMappingURL=RealityTile.d.ts.map