@speckle/viewer
Version:
A 3d viewer for Speckle, based on threejs.
45 lines (44 loc) • 1.98 kB
TypeScript
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<DrawGroup>;
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<Intersection>): void;
}