> ## Documentation Index
> Fetch the complete documentation index at: https://docs.speckle.systems/llms.txt
> Use this file to discover all available pages before exploring further.

# MeasurementsTool

> This extension provides basic configurable measurement capabilities. The tool is autonomous, and is able to create measurements on it's own.

<Warning>
  This extension requires and active CameraController extension implementation.
</Warning>

## Accessors

### activeMeasurement

```typescript theme={null}
get activeMeasurement(): Measurement
```

Gets the currently ongoing measurement. Null if there is none.

**Returns**: [*Measurement*](/developers/viewer/extensions/measurements-tool-api#measurement)

### enabled

```typescript theme={null}
get enabled(): boolean
set enabled(value: boolean)
```

Enables/disables the extension.

**Returns**: boolean

### options

```typescript theme={null}
get options(): MeasurementOptions
set options(value: MeasurementOptions)
```

Gets and sets the extension options.

**Returns**: [*MeasurementOptions*](/developers/viewer/extensions/measurements-tool-api#measurementoptions)

### selectedMeasurement

```typescript theme={null}
get selectedMeasurement(): Measurement
```

Gets the currently selected measurement. Null if there is none.

**Returns**: [*Measurement*](/developers/viewer/extensions/measurements-tool-api#measurement)

## Methods

### clearMeasurements

```typescript theme={null}
clearMeasurements(): void
```

Removes all measurements, including finished or ongoing now.

**Returns**: void

### addMeasurement

```typescript theme={null}
addMeasurement(data: MeasurementData): void
```

Programatically adds a measurement from serializable measurement data.

**Parameters**

* **data**: [*MeasurementData*](/developers/viewer/extensions/measurements-tool-api#measurementdata)

**Returns**: void

### removeMeasurement

```typescript theme={null}
removeMeasurement(): void
```

Removes any currently ongoing measurements.

**Returns**: void

### toMeasurementData

```typescript theme={null}
toMeasurementData(): MeasurementData[]
```

Returns the serializable data for all measurements

**Returns**: [*MeasurementData\[\]*](/developers/viewer/extensions/measurements-tool-api#measurementdata)

## Typedefs

### Measurement

```typescript theme={null}
abstract class Measurement extends Object3D
```

Abstract class for all measurement types.

### MeasurementOptions

```typescript theme={null}
interface MeasurementOptions {
  visible: boolean;
  type?: MeasurementType;
  vertexSnap?: boolean;
  units?: string;
  precision?: number;
  chain?: boolean;
}
```

The options for newly created measurements.

* **visible**: If the measurements are visible
* *optional* **type**: Current measurement type to create
* *optional* **vertexSnap**: Should the cursor snap to the nearest vertex
* *optional* **units**: The measurement units
* *optional* **precision**: The number of decimals to be displayed
* *optional* **chain**: Automatically connects last measurement with the new one

### MeasurementType

```typescript theme={null}
enum MeasurementType {
  PERPENDICULAR,
  POINTTOPOINT,
  AREA,
  POINT,
}
```

Measurement types.

### MeasurementData

```typescript theme={null}
interface MeasurementData {
  type: MeasurementType
  startPoint: readonly [number, number, number] // vec3
  endPoint: readonly [number, number, number] // vec3
  startNormal: readonly [number, number, number] // vec3
  endNormal: readonly [number, number, number] // vec3
  value: number
  innerPoints?: (readonly [number, number, number])[] // array of vec3
  units?: string
  precision?: number
  uuid: string
}
```

Serializable measurement data

## Constants

### DefaultMeasurementsOptions

```typescript theme={null}
const DefaultMeasurementsOptions = {
  visible: true,
  type: MeasurementType.POINTTOPOINT,
  vertexSnap: true,
  units: 'm',
  precision: 2,
  chain: false,
};
```

The default extension options.
