import { Vector3Like, Vector3, Matrix4, Box3 } from 'three';

declare function generate3DTilesFromTileDatabase(dbFilePath: string, outputFolder: string, hasAlphaEnabled: boolean, onProgress: (progress: number, files: string[]) => void, opts?: {
    threadCount?: number;
    simplifyAdresses?: boolean;
}): Promise<void>;

declare function generateTileDatabaseFromCityJSON(
/**
 * The input folder containing the CityJSON files to aggregate.
 */
inputFolder: string, 
/**
 * The output folder. Must exist.
 */
outputFolder: string, 
/**
 * The CityJSON appearance to use.
 */
appearance: string, 
/**
 * The progress callback function.
 * @param progress - The progress value in normalized form, where 0 = 0% and 1 = 100%.
 */
onProgress: (progress: number) => void, opts?: {
    /**
     * The number of threads to use.
     * @default 4
     */
    threadCount?: number;
    /**
     * The spatial reference system of the input files expressed as a [PROJ definition](https://proj.org/en/stable/usage/quickstart.html).
     * If unspecified, will attempt to read the spatial reference from each CityJSON file, if possible.
     * @default null
     */
    srcSRS?: string;
    /**
     * The destination spatial reference system expressed as a [PROJ definition](https://proj.org/en/stable/usage/quickstart.html).
     * @default "+proj=geocent +datum=WGS84 +units=m +no_defs +type=crs"
     */
    destSRS?: string;
}): Promise<{
    dbFilePath: string;
}>;

declare function getNewellsNormal(points: Vector3Like[]): Vector3;
declare function projectPolygonToPlane(polygon3D: [number, number, number][], polygonHoles3D: [number, number, number][]): {
    projected: Vector3[];
    matrix: Matrix4;
};
declare function triangulate3DPolygon(rings: [number, number, number][][]): number[] | null;
declare function getBBoxesFromMeshes(meshes: {
    position: Float32Array;
}[], globalTransformPoint: Vector3): {
    cartesianBox: Box3;
    cartographicBox: Box3;
};
declare function convertEPSGFromCityJSONToProj4(potentialEPSG?: string): string | null;

export { convertEPSGFromCityJSONToProj4, generate3DTilesFromTileDatabase, generateTileDatabaseFromCityJSON, getBBoxesFromMeshes, getNewellsNormal, projectPolygonToPlane, triangulate3DPolygon };
