import { PWFProxy } from '../../pwfreader/PWFProxy';
import type { ResourceDiscriminator } from '../../Webviewer';
import { ObjectTree } from '../ObjectTree';
import { SelectMethod } from '../SelectedNodeServices/SelectedNodeServices';
import { KDTree } from '../SceneGraph/KDTree';
import { WASMTree } from '../SceneGraph/WASMTree';
import { Meshnode, Manifest } from '../../pwfreader/PWFTypes';
import { MeshObject } from '../../pwfreader/v1/objects/MeshObject';
import type { ViewerRenderer } from '../ViewerRenderer';
import type { BootstrapperResult } from '../../controllers/Bootstrapper';
import { Vector3 } from '../../types/Math';
import type { ValidatedFeatureFlags } from '../../types/WebviewerOptions';
export declare function computeDetailsParam(totalFaces: number): {
    detailsInMotion: number;
    detailsAtRest: number;
};
export type DownloadMetaData = {
    modelCached: boolean;
    timeToDownload: number;
};
type ModelDescriptor = {
    resource: ResourceDiscriminator;
    meshAB: ArrayBuffer;
    meshnodeAB: ArrayBuffer;
    nodeAB: ArrayBuffer;
    manifest?: Manifest;
};
type SceneGraphName = 'kdtree' | 'wasmtree';
export declare class Models {
    private resourceIds;
    private pwfs;
    private currentParsingPwfIndex;
    private streaming;
    private prefetchingPartitions;
    private geometryFactory?;
    private objectTrees;
    private readonly selectionOption;
    private partitionProxiesLoaded;
    private readonly sceneGraph;
    private tempVirtualizedMeshnodes;
    private detailsParams?;
    private readonly isLogging;
    constructor(params: {
        sceneGraphName: SceneGraphName;
        isLogging: boolean;
        locale: string;
        downloadMetaData: DownloadMetaData;
        modelDescriptors: ModelDescriptor[];
        selectionOption: SelectMethod;
        prefetchingPartitions?: boolean;
        featureFlags: ValidatedFeatureFlags;
    });
    private sceneGraphFactory;
    getResourceId: (resource: ResourceDiscriminator) => number;
    getAllResourceIds(): number[];
    getPwf(resourceId: number): PWFProxy;
    getObjectTrees(resourceId: number): Map<string, ObjectTree>;
    getSceneGraph(): KDTree | WASMTree;
    parsePwfNodes(): BootstrapperResult;
    parsePwfMeshnodes(): BootstrapperResult;
    parsePwfMeshes(): void;
    initMeshServices(): BootstrapperResult;
    initNodeServices(): void;
    initMeshnodeServices(): void;
    initNodeTree(): BootstrapperResult;
    initNodeTreeBoundingBoxes(): BootstrapperResult;
    initSceneGraph(): BootstrapperResult;
    captureModelStats(): {
        detailsInMotion: number;
        detailsAtRest: number;
    };
    getResourceFromVirtualMeshnodeIndex(virtualMeshnodeIndex: number): number;
    getMeshnodeFromVirtualIndex(virtualMeshnodeIndex: number): {
        meshnode: Meshnode;
        resourceId: number;
    };
    getMeshnodeFromVirtualIndexAndResourceId(virtualMeshnodeIndex: number, resourceId: number): Meshnode;
    getMeshnodeVirtualIndexFromMeshnodeIndex(params: {
        resourceId: number;
        meshnodeIndex: number;
    }): number;
    getMeshObject(params: {
        resourceId: number;
        meshRef: number;
    }): MeshObject;
    globalOffset(resourceId: number): Vector3;
    initGeometryFactory(params: {
        viewerRenderer: ViewerRenderer;
    }): void;
    private instantiateGeometryFactory;
    initTreeServices(): BootstrapperResult;
    initPartitionedGeometry(): BootstrapperResult;
    loadAllMeshGeometryToGPU(): BootstrapperResult;
    private forEachResourceInterruptible;
    getVirtualMeshnodeIndexesByNodeId(params: {
        nodeId: number;
        resourceId: number;
    }): number[];
    findFirstObjectNodeId(params: {
        virtualMeshnodeIndex: number;
        resourceId: number;
    }): number;
}
export {};
