import { Camera, Mesh } from './babylonjs-import';
import { Materials } from './materials';
import { MergedIfcProductMeshesRenderInfo } from './MergedIfcProductMeshesRenderInfo';
import { Geometry3d, BimIfcProductsAndMeshes } from './vertex-data-merge';
/**
 * Additional data that decorates {@link Mesh} instances with geometry
 * that represents IFC objects.
 */
export declare class TwinfinityIfcMeshExtension {
    private readonly _mesh;
    private readonly _materials;
    private static readonly _orthoFrustumSize;
    private static readonly _tmp;
    /** Number of indices this {@link Mesh} contains. */
    readonly indiceCount: number;
    /** Number of vertices, uv's and normals this {@link Mesh} contains. */
    readonly primitiveCount: number;
    /** `true` if this {@link Mesh} contains transparent objects
     * (in which case it cannot contain opaque objects and `false` if it does) */
    readonly isTransparent: boolean;
    /** All {@link BimIfcObject}'s and their {@link BimProductMesh}'es that
     * makes up the {@link Mesh} geometry.' */
    readonly productsAndMeshes: BimIfcProductsAndMeshes;
    /** Distance from camera where `_mesh` will become visibile. If < 0 it is always visible. */
    readonly cullingDistance: number;
    cullOnCameraMove: boolean;
    /**
     * Info about render properties of all {@link BimIfcProduct} instances that have this `BJS mesh` handles.
     * Allows us to do quick checks if any of the ifc products in this mesh is visible, outlined or ghostoutlined.
     * @hidden
     * @internal
     */
    readonly productMeshRenderInfo: MergedIfcProductMeshesRenderInfo;
    /**
     * Constructor
     * @param _mesh {@link Mesh} instance to connect the extension to.
     * @param _materials {@link Materials} instance
     * @param geometry3D {@link Geometry3dHandle} instance representing the geometry which will be applied to `_mesh`.
     */
    constructor(_mesh: Mesh, _materials: Materials, geometry3D: Geometry3d);
    private _pivotTargetSphereIntersectionTest;
    dispose(): void;
    /**
     * `true` if visible from the supplied cameras point of view. Otherwise `false`.
     * @param camera Camera to use when checking visibility
     */
    isVisible(camera: Camera, distance?: number): boolean;
    /**
     * Gets the distance from an mesh to the camera
     * @param camera Camera to use when checking distance
     */
    distanceToCamera(camera: Camera): number;
    private isDistanceCulled;
}
/**
 * Twinfinity extensions for {@link Mesh}.
 */
export interface TwinfinityMeshExtensions {
    /** If set then this mesh contains IFC data. */
    ifc?: TwinfinityIfcMeshExtension;
    /**
     * Clear cached vertex data of this mesh. Basically this removes the
     * cached vertex data from RAM (but not from GPU). This has the same
     * effects as calling {@link Scene.clearCachedVertexData} (except that it only
     * affects this particular {@link Mesh}).
     */
    clearCachedVertexData(): void;
}
declare module '@babylonjs/core/Meshes/mesh' {
    interface Mesh {
        /** Twinfinity extensions. */
        readonly twinfinity: TwinfinityMeshExtensions;
    }
}
//# sourceMappingURL=MeshExtensions.d.ts.map