@speckle/viewer
Version:
A 3d viewer for Speckle, based on threejs.
57 lines (56 loc) • 2.45 kB
TypeScript
import { Box3, InstancedInterleavedBuffer, Material, Object3D, WebGLRenderer } from 'three';
import { LineSegments2 } from 'three/examples/jsm/lines/LineSegments2.js';
import { LineSegmentsGeometry } from 'three/examples/jsm/lines/LineSegmentsGeometry.js';
import SpeckleLineMaterial from '../materials/SpeckleLineMaterial.js';
import { NodeRenderView } from '../tree/NodeRenderView.js';
import { type Batch, type BatchUpdateRange, DrawGroup, GeometryType } from './Batch.js';
export default class LineBatch implements Batch {
id: string;
subtreeId: string;
renderViews: NodeRenderView[];
protected geometry: LineSegmentsGeometry;
batchMaterial: SpeckleLineMaterial;
protected batchTransparent: boolean;
protected batchOpacity: number;
protected mesh: LineSegments2;
colorBuffer: InstancedInterleavedBuffer;
protected visibilityRanges: {
[offset: number]: boolean;
};
get bounds(): Box3;
get drawCalls(): number;
get minDrawCalls(): number;
get triCount(): number;
get vertCount(): number;
constructor(id: string, subtreeId: string, renderViews: NodeRenderView[]);
get groups(): DrawGroup[];
get pointCount(): number;
get lineCount(): number;
get renderObject(): Object3D;
get geometryType(): GeometryType;
get materials(): Material[];
getCount(): number;
setBatchMaterial(material: SpeckleLineMaterial): void;
onUpdate(deltaTime: number): void;
onRender(renderer: WebGLRenderer): void;
setVisibleRange(ranges: BatchUpdateRange[]): void;
/** Line batches do not sort their ranges. This means we can have hidden/transparent objects anywhere inside the batch.
*/
getVisibleRange(): BatchUpdateRange;
getOpaque(): BatchUpdateRange;
getDepth(): BatchUpdateRange;
getTransparent(): BatchUpdateRange;
getStencil(): BatchUpdateRange;
/** Reminder here that line batches do not really change materials, just the color buffer changes */
setBatchBuffers(ranges: BatchUpdateRange[]): void;
setDrawRanges(ranges: BatchUpdateRange[]): void;
resetDrawRanges(): void;
buildBatch(): Promise<void>;
getRenderView(index: number): NodeRenderView | null;
getMaterialAtIndex(index: number): Material;
/** TODO: I wish we wouldn't clone the material here... */
getMaterial(rv: NodeRenderView): Material;
private makeLineGeometry;
private updateColorBuffer;
purge(): void;
}