import { Box3, Intersection, Material, Object3D, Raycaster } from 'three';
import { ExtendedTriangle, ShapecastIntersection } from 'three-mesh-bvh';
import { BatchObject } from '../batching/BatchObject';
export type ExtendedShapeCastCallbacks = {
    intersectsTAS?: (box: Box3, isLeaf: boolean, score: number | undefined, depth: number, nodeIndex: number) => ShapecastIntersection | boolean;
    intersectTASRange?: (batchObject: BatchObject) => ShapecastIntersection | boolean;
    intersectsBounds: (box: Box3, isLeaf: boolean, score: number | undefined, depth: number, nodeIndex: number) => ShapecastIntersection | boolean;
    traverseBoundsOrder?: (box: Box3) => number;
} & ({
    intersectsRange: (triangleOffset: number, triangleCount: number, contained: boolean, depth: number, nodeIndex: number, box: Box3) => boolean;
} | {
    intersectsTriangle: (triangle: ExtendedTriangle, triangleIndex: number, contained: boolean, depth: number, batchObject?: BatchObject) => boolean | void;
});
export interface ExtendedIntersection extends Intersection {
    batchObject?: BatchObject;
    material?: Material;
}
export declare class SpeckleRaycaster extends Raycaster {
    onObjectIntersectionTest: (object: Object3D) => void;
    constructor(origin?: any, direction?: any, near?: number, far?: number);
    intersectObjects(objects: any, recursive?: boolean, intersects?: any[]): any[];
}
