/** @internal NOTE: Internal APIs. Subject to change. Use of these APIs in production applications is not supported. */
import { Vector2, Matrix, Scene, Ray, Camera } from './babylonjs-import';
import { BimVertexData, Intersection, SimpleBoundingBox } from './bim-format-types';
import { Vertex2 } from '../math';
import { PickOptionFlags } from './Selectables';
/**
 * Common {@link BimIfcMesh} intersection options
 */
export type BimIfcMeshIntersectionCameraCommonOptions = Omit<PickOptionFlags, 'textureSize' | 'isNearbyRenderedObjectsIntersectionFallbackEnabled' | 'type'>;
/**
 * {@link BimIfcMesh} intersection options for intersection with a {@link camera} and canvas coordinates.
 */
export interface BimIfcMeshIntersectionCameraOptions extends BimIfcMeshIntersectionCameraCommonOptions {
    /**
     * Camera to use for intersection test.
     */
    readonly camera: Camera;
    /**
     * Canvas coordinate to use when picking. A ray is shot into the scene from the camera passing through
     * the canvas coordinate.
     */
    readonly canvasCoordinate: Vertex2;
}
/**
 * {@link BimIfcMesh} intersection options for intersection with {@link Ray}.
 */
export interface BimIfcMeshIntersectionRayOptions extends BimIfcMeshIntersectionCameraCommonOptions {
    /**
     * Perform intersection with a ray. Ray is specified in BabylonJS world coordinates
     */
    readonly ray: Ray;
}
/** {@link BimIfcMesh} intersection options */
export type BimIfcMeshIntersectionOptions = BimIfcMeshIntersectionCameraOptions | BimIfcMeshIntersectionRayOptions;
/** Representation of an IFC mesh */
export declare class BimIfcMesh {
    readonly vertexData: BimVertexData;
    readonly transform: Matrix;
    private readonly toMeterScale;
    private static readonly _tmp;
    constructor(vertexData: BimVertexData, transform: Matrix, toMeterScale: number);
    /**
     * Perform intersection testing on a {@link BimIfcMesh}.
     * @param o Intersection options. See {@link BimIfcMeshIntersectionOptions}.
     * @returns Intersection info. Will be empty if no intersection was found.
     */
    intersect(o: BimIfcMeshIntersectionOptions): Intersection[];
    /**
     * Finds all intersections of a Ray object and a this geometry.
     * If a Vector2 object is provided, a screen-spaced Ray form pixel will be used for intersection test.
     * @param screenCoordinateOrRay Vector2 | Ray. Ray needs to be in babylon-coordinate-system/world-space.
     * @param sceneOrOptions Scene.
     * @returns Intersection info. Will be empty if no intersection was found.
     */
    getIntersectionPoints(screenCoordinateOrRay: Vector2 | Ray, sceneOrOptions?: Scene): Intersection[];
    /**
     * Checks if bounds of object are inside of geometry.
     * @param bound SimpleBoundingBox in world space.
     * @alpha
     */
    geometricallyContainsBoundingBox(bound: SimpleBoundingBox): boolean;
    /**
     * Checks if bounds of object are inside of geometry.
     * @param bound SimpleBoundingBox in world space.
     * @alpha
     */
    geometricallyIntersectingBoundingBox(bound: SimpleBoundingBox): boolean;
    /**
     * Checks if all vertices of mesh are completely contained by the geometry.
     * @param mesh Mesh of geometry to test.
     * @alpha
     */
    geometricallyContains(mesh: BimIfcMesh): boolean;
    /**
     * Checks if there is a vertex from the mesh on the inside and outside of the geometry.
     * @param mesh Mesh of geometry to test.
     * @alpha
     */
    geometricallyIntersects(mesh: BimIfcMesh): boolean;
    private barycentricToPoint;
    private getRayIntersections;
    private rayIntersects;
    private intersectTriangleNoOp;
    private intersectTriangle;
}
//# sourceMappingURL=bim-ifc-mesh.d.ts.map