import { type Object3D } from "three";
import type { BmtGeomData, BmtModelData } from "./BmtLoader";
import type { IfcCoordinationMatrixSource, IfcModelSource } from "./IFCLoader/IFCLoader";
export type BmtConverterSource = IfcModelSource | IfcModelSource[];
export type BmtConvertibleModels = BmtModelData | BmtModelData[] | Record<number, BmtModelData>;
export type BmtVisibleIdsByModel = Record<string | number, Iterable<number>>;
export type BmtActiveViewFilterParams = {
    elementID: number;
    geometry: BmtGeomData;
    geometryKey: number;
    modelID: number;
};
export type BmtActiveViewFilter = (params: BmtActiveViewFilterParams) => boolean;
export type BmtConverterProgressPhase = "preparing" | "filtering" | "properties" | "geometry" | "metadata" | "writing" | "complete";
export type BmtConverterProgressEvent = {
    loaded?: number;
    message?: string;
    modelID: number;
    modelIndex: number;
    phase: BmtConverterProgressPhase;
    progress: number;
    total?: number;
};
export type BmtConverterOptions = {
    activeView?: boolean;
    activeViewRoot?: Object3D | Object3D[] | null;
    chunk?: number;
    coordinationMatrix?: IfcCoordinationMatrixSource;
    fileName?: string;
    fileNames?: Record<string | number, string>;
    filterElement?: BmtActiveViewFilter;
    maxMeshBytes?: number;
    onProgress?: (progress: BmtConverterProgressEvent) => void;
    useIfcColors?: boolean;
    useIfcElementAssembly?: boolean;
    useIfcSpace?: boolean;
    useMinVersion?: boolean;
    visibleIdsByModel?: BmtVisibleIdsByModel;
    wasmPath?: string;
};
export type BmtConvertedFileType = "bmt" | "json";
export type BmtConvertedFile = {
    blob: Blob;
    bytes: Uint8Array;
    name: string;
    type: BmtConvertedFileType;
};
export type BmtConversionResult = {
    files: BmtConvertedFile[];
    models: Record<number, BmtModelData>;
};
export declare class BmtConverter {
    private readonly textEncoder;
    private ifcLoader;
    ConvertIfcFileToBmt(sources: BmtConverterSource, options?: BmtConverterOptions): Promise<BmtConversionResult>;
    convertIfcFileToBmt(sources: BmtConverterSource, options?: BmtConverterOptions): Promise<BmtConversionResult>;
    ConvertToBmt(models: BmtConvertibleModels, options?: BmtConverterOptions): BmtConversionResult;
    convertToBmt(models: BmtConvertibleModels, options?: BmtConverterOptions): BmtConversionResult;
    private getIfcLoader;
    private configureIfcLoader;
    private normalizeModels;
    private isBmtModelData;
    private getFileNamesFromSources;
    private getModelFileBaseName;
    private normalizeBaseName;
    private createModelFiles;
    private createBmtBytes;
    private writeProps;
    private writeMeshes;
    private createMeshPayload;
    private writeJsonChunk;
    private writeTextChunk;
    private writeChunk;
    private createSerializableModel;
    private markIfcSpaceGeometries;
    private markIfcSpaceGeometry;
    private geometryHasOnlyIds;
    private getHiddenElementIds;
    private addGeometryElementIds;
    private getElementFilter;
    private filterGeometry;
    private isValidVertexIndex;
    private createIndexArray;
    private filterProps;
    private filterStructure;
    private filterStructureNode;
    private getStructureNodeElementID;
    private isStructureNode;
    private getVisibleIdsByModel;
    private getIfcSpaceIdsByModel;
    private addVisibleIdsFromObject3D;
    private isReadableAttribute;
    private isObjectVisible;
    private isIfcSpaceObject;
    private getObjectModelID;
    private hasMeshMatrices;
    private getIndexType;
    private colorToByte;
    private deflateTypedArray;
    private deflateBytes;
    private encodeText;
    private encodePrettyJson;
    private shouldEmitItemProgress;
    private clampProgress;
    private isRecord;
}
export declare const bmtConverter: BmtConverter;
export declare function ConvertIfcFileToBmt(sources: BmtConverterSource, options?: BmtConverterOptions): Promise<BmtConversionResult>;
export declare function ConvertToBmt(models: BmtConvertibleModels, options?: BmtConverterOptions): BmtConversionResult;
