/** @packageDocumentation
 * @module Tiles
 */
import { GuidString, Id64Array, Id64String } from "@itwin/core-bentley";
import { Range3d } from "@itwin/core-geometry";
import { BatchType, ContentIdProvider, EdgeOptions, IModelTileTreeId, IModelTileTreeProps, RenderSchedule, TileProps } from "@itwin/core-common";
import { IModelConnection } from "../IModelConnection";
import { ImdlDecoder, IModelTile, Tile, TileDrawArgs, TileLoadPriority, TileTree, TileTreeParams } from "./internal";
/** @internal */
export interface IModelTileTreeOptions {
    readonly allowInstancing: boolean;
    readonly edges: EdgeOptions | false;
    readonly batchType: BatchType;
    readonly is3d: boolean;
    readonly timeline: RenderSchedule.ModelTimeline | undefined;
}
/** Parameters used to construct an [[IModelTileTree]]
 * @internal
 */
export interface IModelTileTreeParams extends TileTreeParams {
    rootTile: TileProps;
    contentIdQualifier?: string;
    geometryGuid?: GuidString;
    maxInitialTilesToSkip?: number;
    formatVersion?: number;
    tileScreenSize: number;
    options: IModelTileTreeOptions;
    transformNodeRanges?: Map<number, Range3d>;
}
/** @internal */
export declare function iModelTileTreeParamsFromJSON(props: IModelTileTreeProps, iModel: IModelConnection, modelId: Id64String, options: IModelTileTreeOptions): IModelTileTreeParams;
/** The root tile for an [[IModelTileTree]].
 * @internal
 */
export type RootIModelTile = Tile & {
    tileScreenSize: number;
    updateDynamicRange: (childTile: Tile) => void;
};
/** A TileTree whose contents are derived from geometry stored in a Model in an IModelDb.
 * @internal
 */
export declare class IModelTileTree extends TileTree {
    readonly decoder: ImdlDecoder;
    private readonly _rootTile;
    private readonly _options;
    private readonly _transformNodeRanges?;
    readonly contentIdQualifier?: string;
    readonly geometryGuid?: string;
    readonly maxTilesToSkip: number;
    readonly maxInitialTilesToSkip: number;
    readonly contentIdProvider: ContentIdProvider;
    readonly stringifiedSectionClip?: string;
    readonly tileScreenSize: number;
    readonly iModelTileTreeId: IModelTileTreeId;
    /** Strictly for debugging/testing - forces tile selection to halt at the specified depth. */
    debugMaxDepth?: number;
    /** A little hacky...we must not override selectTiles(), but draw() needs to distinguish between static and dynamic tiles.
     * So _selectTiles() puts the static tiles first in the Tile[] array, and records the number of static tiles selected, to be
     * used by draw().
     */
    private _numStaticTilesSelected;
    constructor(params: IModelTileTreeParams, treeId: IModelTileTreeId);
    dispose(): void;
    get maxDepth(): number;
    get rootTile(): Tile;
    /** Exposed chiefly for tests. */
    get staticBranch(): IModelTile;
    get is3d(): boolean;
    get isContentUnbounded(): boolean;
    get viewFlagOverrides(): {};
    get batchType(): BatchType;
    get edgeOptions(): EdgeOptions | false;
    get timeline(): RenderSchedule.ModelTimeline | undefined;
    get loadPriority(): TileLoadPriority;
    protected _selectTiles(args: TileDrawArgs): Tile[];
    draw(args: TileDrawArgs): void;
    prune(): void;
    /** Exposed strictly for tests. */
    get tileState(): "static" | "dynamic" | "interactive" | "disposed";
    /** Exposed strictly for tests. */
    get hiddenElements(): Id64Array;
    getTransformNodeRange(nodeId: number): Range3d | undefined;
    get containsTransformNodes(): boolean;
}
//# sourceMappingURL=IModelTileTree.d.ts.map