import { BufferGeometry, Group, Material, type Intersection } from 'three'; import { BatchObject } from '../batching/BatchObject.js'; import { TopLevelAccelerationStructure } from './TopLevelAccelerationStructure.js'; import { type DrawGroup } from '../batching/Batch.js'; import { SpeckleRaycaster } from './SpeckleRaycaster.js'; export default class SpeckleInstancedMesh extends Group { static MeshBatchNumber: number; private tas; private batchMaterial; private materialCache; private materialStack; private batchMaterialStack; private materialCacheLUT; private _batchObjects; private _needsRTE; groups: Array; materials: Material[]; private instanceGeometry; private instances; get TAS(): TopLevelAccelerationStructure; get batchObjects(): BatchObject[]; get needsRTE(): boolean; constructor(geometry: BufferGeometry, RTE?: boolean); setBatchMaterial(material: Material): void; setBatchObjects(batchObjects: BatchObject[]): void; setOverrideMaterial(material: Material): void; setOverrideBatchMaterial(material: Material): void; restoreBatchMaterial(): void; private lookupMaterial; getCachedMaterial(material: Material, copy?: boolean): Material; restoreMaterial(): void; buildTAS(): void; updateDrawGroups(transformBuffer: Float32Array, gradientBuffer: Float32Array, objectIndexBuffer?: Float32Array): void; updateTransformsUniform(): void; updateMaterialTransformsUniform(material: Material): void; getBatchObjectMaterial(batchObject: BatchObject): Material | null; /** Three's 'clone' and 'copy' from geometry and buffer attributes * create duplicates of arrays and we don't want that. Most of the * buffer attributes need to be shared to avoid redundancy */ private getInstanceGeometryShallowCopy; private convertRaycastIntersect; raycast(raycaster: SpeckleRaycaster, intersects: Array): void; }