/** @internal NOTE: Internal APIs. Subject to change. Use of these APIs in production applications is not supported. */ /** */
import { Lookup } from './lookup';
import { DeepImmutable, Vector3 } from './babylonjs-import';
import { type PackedIndices, type PackedMeshHash } from '@twinfinity/geometry';
export { type TypedArray, type PackedPositions, type PackedIndices, type PackedNormals, type PackedMeshHash, NormalType, type VertexData as BimVertexData } from '@twinfinity/geometry';
export type Mutable<T> = {
    -readonly [P in keyof T]: T[P] extends ReadonlyArray<infer U> ? Mutable<U>[] : Mutable<T[P]>;
};
/**
 * Strip readonly from all properties
 */
export type MutableShallow<T> = {
    -readonly [P in keyof T]: T[P];
};
export interface TypedArrayLike extends ArrayLike<number> {
    set(array: ArrayLike<number>, offset?: number): void;
    [index: number]: number;
    BYTES_PER_ELEMENT: number;
}
export type SimpleBoundingBox = [number, number, number, number, number, number];
export type SimpleBoundingInfo = {
    corners: [
        [
            number,
            number,
            number
        ],
        [
            number,
            number,
            number
        ],
        [
            number,
            number,
            number
        ],
        [
            number,
            number,
            number
        ],
        [
            number,
            number,
            number
        ],
        [
            number,
            number,
            number
        ],
        [
            number,
            number,
            number
        ],
        [
            number,
            number,
            number
        ]
    ];
    min: [number, number, number];
    max: [number, number, number];
    sizeXYZ: [number, number, number];
    radius: number;
    center: [number, number, number];
};
export interface BimRegion {
    readonly bbox: SimpleBoundingBox;
    readonly isMostPopulated: boolean;
    readonly name: string;
    readonly population: number;
    readonly worldCoordinateSystem: number[];
}
export interface BimIfcPropertiesResponse {
    readonly propertyValues: (string | number | boolean)[];
    readonly propertyNames: string[];
    readonly propertySetNames: string[];
    readonly propertyUnits?: BimPropertyUnit[];
    readonly products: DeepImmutable<Lookup<number[]>>;
    readonly types: DeepImmutable<Lookup<number[]>>;
    readonly propertySets: Array<DeepImmutable<{
        s: number;
        h: string;
        n: number[];
        v: number[];
        u?: number[];
    }>>;
}
export interface RgbaDTO {
    readonly r: number;
    readonly g: number;
    readonly b: number;
    readonly a: number;
}
export interface BimTypeObjectDTO {
    readonly id: number;
    readonly gid: string;
    readonly c?: number;
    readonly n?: number;
    readonly d?: number;
    readonly t?: number;
    readonly a?: number[];
}
export type BimObjectAttributeValue = string | number | boolean | string[] | number[] | boolean[];
export interface BimObjectAttributeDTO {
    readonly n: number;
    readonly v: BimObjectAttributeValue;
}
export interface BimIfcStyleDTO extends RgbaDTO {
    readonly diffuseFactor: number;
    readonly diffuseTransmissionFactor: number;
    readonly hash: string;
    readonly name: string;
    readonly reflectionFactor: number;
    readonly specularFactor: number;
    readonly transmissionFactor: number;
    readonly specularExponent?: number;
}
export interface BimProductMeshDescriptor {
    readonly p: number;
    readonly i: number;
    readonly h: string;
    readonly bh: Uint8Array;
    readonly obd: number;
    readonly sbd: number;
    readonly bbox: SimpleBoundingBox;
}
export interface BimProductMeshDTO {
    readonly mi: number;
    readonly si: number;
    readonly wt: number;
    readonly r: number;
}
export declare const enum BimPropertiesType {
    quantifier = 0,
    propertyset = 1
}
export type BimPropertySetScalarValueType = string | number | boolean;
export type BimPropertySetValueType = Array<BimPropertySetScalarValueType> | BimPropertySetScalarValueType;
export interface BimPropertyUnit {
    name: string;
    type: string;
}
export type BimPropertyUnitType = Array<BimPropertyUnit> | BimPropertyUnit;
export interface BimTransform {
    readonly x: number;
    readonly y: number;
    readonly z: number;
    readonly sx: number;
    readonly sy: number;
    readonly sz: number;
    readonly qx: number;
    readonly qy: number;
    readonly qz: number;
    readonly qw: number;
}
export interface BimGeometricFeaturesData {
    readonly meshHash: PackedMeshHash;
    readonly edges: PackedIndices;
}
/** More exact information on what a "hit" operation actually hit on a object. Such as position, normal and distance. */
export interface Intersection {
    /** Generally the position of the intersection on the intersected face. */
    position: Vector3;
    /** Generally the normal of the hit geometry face. There are exceptions when the intersection is approximated, such as when intersecting a point in 3D space. */
    normal: Vector3;
    /** Distance from camera to the intersection. */
    distance: number;
}
//# sourceMappingURL=bim-format-types.d.ts.map