import { Box3, type Intersection, Object3D, Raycaster, Vector3, RaycasterParameters, Face } from 'three'; import { ExtendedTriangle, ShapecastIntersection } from 'three-mesh-bvh'; import { BatchObject } from '../batching/BatchObject.js'; import SpeckleMesh from './SpeckleMesh.js'; import SpeckleInstancedMesh from './SpeckleInstancedMesh.js'; export declare const NOT_INTERSECTED: ShapecastIntersection; export declare const INTERSECTED: ShapecastIntersection; export declare const CONTAINED: ShapecastIntersection; export type ExtendedShapeCastCallbacks = { intersectsTAS?: (box: Box3, isLeaf: boolean, score: number | undefined, depth: number, nodeIndex: number) => ShapecastIntersection | boolean; intersectTASRange?: (batchObjects: 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; pointOnLine?: Vector3; } export interface MeshIntersection extends Intersection { face: Face; faceIndex: number; } export interface ExtendedMeshIntersection extends MeshIntersection { batchObject: BatchObject; object: SpeckleMesh | SpeckleInstancedMesh; } export interface ExtendedRaycasterParameters extends RaycasterParameters { Line2: { threshold: number; }; } export declare class SpeckleRaycaster extends Raycaster { intersectTASOnly: boolean; onObjectIntersectionTest: ((object: Object3D) => void) | null; params: ExtendedRaycasterParameters; constructor(origin?: Vector3, direction?: Vector3, near?: number, far?: number); intersectObjects(objects: Array, recursive?: boolean, intersects?: never[]): never[]; }