import SpeckleRenderer from '../../SpeckleRenderer.js'; import { type IViewer } from '../../../IViewer.js'; import { Plane, Raycaster, Vector2, Vector3 } from 'three'; import { Measurement } from './Measurement.js'; import { ExtendedMeshIntersection } from '../../objects/SpeckleRaycaster.js'; import { Extension } from '../Extension.js'; import { CameraController } from '../CameraController.js'; import { MeasurementData, MeasurementOptions } from '@speckle/shared/viewer/state'; export declare enum MeasurementEvent { CountChanged = "measurement-count-changed", MeasurementsChanged = "measurements-changed" } export interface MeasurementEventPayload { [MeasurementEvent.CountChanged]: number; [MeasurementEvent.MeasurementsChanged]: Measurement[]; } export declare class MeasurementsExtension extends Extension { protected cameraProvider: CameraController; get inject(): (typeof CameraController)[]; protected renderer: SpeckleRenderer; protected _measurements: Measurement[]; protected _activeMeasurement: Measurement | null; protected _selectedMeasurement: Measurement | null; protected _options: MeasurementOptions; private _frameLock; private _paused; private _sceneHit; protected raycaster: Raycaster; private pointBuff; private normalBuff; private screenBuff0; private screenBuff1; get enabled(): boolean; set enabled(value: boolean); get options(): MeasurementOptions; set options(options: MeasurementOptions); get selectedMeasurement(): Measurement | null; get activeMeasurement(): Measurement | null; get measurementCount(): number; get mesurements(): Measurement[]; private emitMeasurementCountChanged; constructor(viewer: IViewer, cameraProvider: CameraController); on(eventType: T, listener: (arg: MeasurementEventPayload[T]) => void): void; onLateUpdate(): void; onResize(): void; protected onPointerMove(data: Vector2 & { event: Event; }): void; protected onPointerClick(data: { event: PointerEvent; multiSelect: boolean; } & Vector2): void; protected onPointerDoubleClick(data: Vector2 & { event: PointerEvent; multiSelect: boolean; }): void; protected autoLazerMeasure(data: Vector2): void; protected startMeasurement(): Measurement; protected cancelMeasurement(): void; protected finishMeasurement(): void; protected pushMeasurement(measurement: Measurement): void; protected findMeasurementFromData(measurementData: MeasurementData): Measurement | undefined; removeMeasurement(measurementData?: MeasurementData): void; /** * Idempotent way of setting measurements */ setMeasurements(measurements: MeasurementData[]): void; clearMeasurements(): void; protected flashMeasurement(): void; protected pickMeasurement(data: Vector2): Measurement | null; protected selectMeasurement(measurement: Measurement, value: boolean): void; protected snap(intersection: ExtendedMeshIntersection, outPoint: Vector3, outNormal: Vector3): void; protected updateClippingPlanes(planes: Plane[]): void; protected applyOptions(): void; addMeasurement(measurementData: MeasurementData): void; toMeasurementData(): MeasurementData[]; }