import { BufferGeometry, DataTexture, Material, Matrix4, Mesh, Raycaster } from 'three';
import { TransformStorage } from '../batching/Batcher';
import { BatchObject } from '../batching/BatchObject';
import { SpeckleBatchBVH } from './SpeckleBatchBVH';
export default class SpeckleMesh extends Mesh {
    static MeshBatchNumber: number;
    private bvh;
    private batchMaterial;
    private materialCache;
    private materialStack;
    private _batchObjects;
    private transformsBuffer;
    private transformStorage;
    transformsDirty: boolean;
    transformsTextureUniform: DataTexture;
    transformsArrayUniforms: Matrix4[];
    private debugBatchBox;
    private boxHelper;
    get BVH(): SpeckleBatchBVH;
    get batchObjects(): BatchObject[];
    constructor(geometry: BufferGeometry, material: Material);
    setBatchObjects(batchObjects: BatchObject[], transformStorage: TransformStorage): void;
    setOverrideMaterial(material: Material): void;
    getCachedMaterial(material: Material, copy?: boolean): Material;
    restoreMaterial(): void;
    updateMaterialTransformsUniform(material: Material): void;
    updateTransformsUniform(): void;
    buildBVH(): void;
    getBatchObjectMaterial(batchObject: BatchObject): Material;
    private convertRaycastIntersect;
    raycast(raycaster: Raycaster, intersects: any): void;
}
