import { Icon } from '../tools/Icon';
import { Mesh } from './babylonjs-import';
import { Intersection } from './bim-format-types';
import { BimProductMesh } from './BimProductMesh';
import { PickOptionRay } from './Selectables';
/** What type of {@link PickResult} we have. */
export declare enum PickResultType {
    /** No pick result at all */
    Empty = 0,
    /** A BabylonJS mesh was picked */
    Mesh = 1,
    /** A {@link Icon} was picked */
    Icon = 2,
    /** A {@link BimIfcObject} and one of its IFC mesh'es was picked */
    IfcProductMesh = 3
}
/** Base class for some classes used in {@link PickResult}. */
declare abstract class PickResultBase {
    readonly id: number;
    /**
     * Constructor
     * @param id Unique GPU picking id for the hit object
     */
    constructor(id: number);
    /** Exact intersection information. If no such information exists
     *  a empty array shall be returned.
     */
    abstract get hitInfo(): Intersection[];
    /**
     * Compare two {@link PickResult} instances.
     * @param pickResult
     */
    equals(pickResult: PickResult): boolean;
}
/** Represents a pick operation where nothing was picked. */
export declare class PickResultEmpty {
    /** Reusable instance for use with pick operations yielding a empty result. */
    static readonly instance: PickResultEmpty;
    /** Discriminant union selector */
    type: PickResultType.Empty;
    /** Always empty since its a empty pick operation. */
    readonly hitInfo: Intersection[];
    /**
     * Compare two {@link PickResult} instances.
     * @param pickResult
     */
    equals(pickResult: PickResult): boolean;
}
/** Represents a pick operation where a BabylonJS mesh was picked.
 *  Used when a picking operation hit a BabylonJS mesh that does not represent
 *  a Twinfinity object such as a {@link Icon} or {@link BimIfcObject}.
 */
export declare class PickResultMesh extends PickResultBase {
    /** Discriminant union selector */
    type: PickResultType.Mesh;
    /** Exact intersections of {@link mesh} that the pick operation gave. */
    readonly hitInfo: Intersection[];
    /** BabylonJS Mesh pick operation yielded. */
    readonly mesh: Mesh;
    /**
     * Constructor
     * @param o - Options
     * @param o.id - Unique GPU picking id for the hit mesh.
     * @param o.mesh - BabylonJS Mesh that was hit by a pick operation
     * @param o.gpuPickMesh - The internal mesh (clone of `o.mesh`) that was used for the GPU pick operation
     * @param o.pickOptions - The picking ray and related options.
     */
    constructor(o: {
        id: number;
        mesh: Mesh;
        gpuPickMesh: Mesh;
        pickOptions: PickOptionRay;
    });
}
/** Represents a pick operation where a {@link Icon} was picked. */
export declare class PickResultIcon extends PickResultBase {
    private readonly _pickOptions;
    private _hitInfo?;
    /** Discriminant union selector. */
    type: PickResultType.Icon;
    /** Icon yielded by pick operation. */
    readonly object: Icon;
    /** BabylonJS Mesh pick operation yielded. {@link object} belongs to this mesh. */
    readonly mesh: Mesh;
    /**
     * Constructor
     * @param o - Options
     * @param o.id - Unique GPU picking id for the hit `o.icon`.
     * @param o.mesh - BabylonJS mesh that `o.icon` belongs to.
     * @param o.icon - The {@link Icon} that was hit.
     * @param o.pickOptions - The picking ray and related options.
     */
    constructor(o: {
        id: number;
        mesh: Mesh;
        icon: Icon;
        pickOptions: PickOptionRay;
    });
    /** Exact intersections of {@link object} that the pick operation gave. */
    get hitInfo(): Intersection[];
}
/** Represents a pick operation where a ifc product mesh  was picked. */
export declare class PickResultIfcProductMesh extends PickResultBase {
    private readonly _pickOptions;
    private _hitInfo?;
    /** Discriminant union selector */
    type: PickResultType.IfcProductMesh;
    /**
     * {@link BimProductMesh} yielded by pick operation.
     * Use {@link BimProductMesh.ifcProduct} to get IFC product ({@link BimIfcObject} the mesh belongs to
     */
    readonly ifcProductMesh: BimProductMesh;
    /** BabylonJS Mesh pick operation yielded. {@link mesh} belongs to this mesh. */
    readonly mesh: Mesh;
    /**
     * Constructor
     * @param o - Options
     * @param o.id - Unique GPU picking id for the hit `o.icon`.
     * @param o.mesh - BabylonJS mesh that `o.ifcProductAndMesh` belongs to.
     * @param o.ifcProductAndMesh - The {@link BimProductAndMesh} that was hit.
     * @param o.pickOptions - The picking ray and related options.
     */
    constructor(o: {
        id: number;
        mesh: Mesh;
        ifcProductAndMesh: BimProductMesh;
        pickOptions: PickOptionRay;
    });
    /** Exact intersections of {@link ifcProductMesh} that the pick operation gave. */
    get hitInfo(): Intersection[];
}
/**
 *  The result of a "pick" operation. For example if user clicks something on screen a pick
 *  operation can be issued to determine what the click, if anything, hit.
 *  It is a discriminant union. Use the `type` property or `instanceof` to determine what
 *  kind of result the pick operation gives. It can be
 *  * Empty.
 *  * A BabylonJS mesh
 *  * A {@link Icon}. Includes the BabylonJS mesh that the {@link Icon} belongs to.
 *  * A IFC product and the IFC mesh in it. Includes the BabylonJS mesh that the {@link Icon} belongs to.
 */
export type PickResult = PickResultMesh | PickResultIcon | PickResultIfcProductMesh | PickResultEmpty;
/** Alias for {@link PickResult} for backwards compatibility.
 *  @deprecated Use {@link PickResult} instead.
 */
export type BimProductAndMeshAndHitInfo = PickResult;
export {};
//# sourceMappingURL=PickResult.d.ts.map