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;
}
