# Class: Modify

This documentation is for OpenLayers v10.9.0. The latest is v.

## ol/interaction/Modify~Modify

    import Modify from 'ol/interaction/Modify.js';

Interaction for modifying feature geometries. To modify features that have been added to an existing source, construct the modify interaction with the `source` option. If you want to modify features in a collection (for example, the collection used by a select interaction), construct the interaction with the `features` option. The interaction must be constructed with either a `source` or `features` option.

Cartesian distance from the pointer is used to determine the features that will be modified. This means that geometries will only be considered for modification when they are within the configured `pixelTolerance`. For point geometries, the `hitDetection` option can be used to match their visual appearance.

By default, the interaction will allow deletion of vertices when the `alt` key is pressed. To configure the interaction with a different condition for deletion, use the `deleteCondition` option.

#### new Modify(options)

interaction/Modify.js, line 255

  Name | Type | Description
  --- | --- | ---
  `condition` | Condition | undefined | A function that takes a `MapBrowserEvent` and returns a boolean to indicate whether that event will be considered to add or move a vertex to the sketch. Default is `primaryAction`.
  `deleteCondition` | Condition | undefined | A function that takes a `MapBrowserEvent` and returns a boolean to indicate whether that event should be handled. By default, `singleClick` with `altKeyOnly` results in a vertex deletion. This combination is handled by wrapping the two condition checks in a single function:
      import { altKeyOnly, singleClick } from 'ol/events/condition.js';

      function (event) {
        return altKeyOnly(event) && singleClick(event)
      }
  `insertVertexCondition` | Condition | undefined | A function that takes a `MapBrowserEvent` and returns a boolean to indicate whether a new vertex should be added to the sketch features. Default is `always`.
  `pixelTolerance` | number (defaults to 10) | Pixel tolerance for considering the pointer close enough to a segment or vertex for editing.
  `style` | StyleLike | FlatStyleLike | undefined | Style used for the modification point or vertex. For linestrings and polygons, this will be the affected vertex, for circles a point along the circle, and for points the actual point. If not configured, the default edit style is used (see `Style`). When using a style function, the point feature passed to the function will have an `existing` property - indicating whether there is an existing vertex underneath or not, a `features` property - an array whose entries are the features that are being modified, and a `geometries` property - an array whose entries are the geometries that are being modified. Both arrays are in the same order. The `geometries` are only useful when modifying geometry collections, where the geometry will be the particular geometry from the collection that is being modified.
  `source` | VectorSource | undefined | The vector source with features to modify. If a vector source is not provided, a feature collection must be provided with the `features` option.
  `hitDetection` | boolean | BaseVectorLayer | undefined | When configured, point features will be considered for modification based on their visual appearance, instead of being within the `pixelTolerance` from the pointer location. When a `BaseVectorLayer` is provided, only the rendered representation of the features on that layer will be considered.
  `features` | Collection<Feature> | undefined | The features the interaction works on. If a feature collection is not provided, a vector source must be provided with the `source` option.
  `filter` | FilterFunction | undefined | A function that takes a `Feature` and returns `true` if the feature may be modified or `false` otherwise.
  `trace` | boolean | Condition (defaults to false) | Trace a portion of another geometry. Tracing starts when two neighboring vertices are dragged onto a trace target, without any other modification in between..
  `traceSource` | VectorSource | undefined | Source for features to trace. If tracing is active and a `traceSource` is not provided, the interaction's `source` will be used. Tracing requires that the interaction is configured with either a `traceSource` or a `source`.
  `wrapX` | boolean (defaults to false) | Wrap the world horizontally on the sketch overlay.
  `snapToPointer` | boolean (defaults to !hitDetection) | The vertex, point or segment being modified snaps to the pointer coordinate when clicked within the `pixelTolerance`.
  `sharedVerticesEqual` | function | undefined | A function that takes two coordinates and returns whether they should be considered equal for vertex matching purposes. By default, all coordinate dimensions are compared. This is useful when features have mixed coordinate dimensions (e.g., XY and XYZ) but should still be treated as sharing vertices at the same 2D position.

  ##### Fires:

  - `change` (BaseEvent) - Generic change event. Triggered when the revision counter is increased.
  - `change:active` (ObjectEvent)
  - `error` (BaseEvent) - Generic error event. Triggered when an error occurs.
  - `modifyend` (ModifyEvent) - Triggered upon feature modification end
  - `modifystart` (ModifyEvent) - Triggered upon feature modification start
  - `propertychange` (ObjectEvent) - Triggered when a property is changed.

### Extends

- PointerInteraction

### Observable Properties

Name | Type | Settable | ObjectEvent type | Description
--- | --- | --- | --- | ---
`active` | boolean | yes | `change:active` | `true` if the interaction is active, `false` otherwise.

### Methods

#### canInsertPoint(){boolean}

interaction/Modify.js, line 2194

  Check if a point can be inserted to the current linestring or polygon at the current pointer position.

  ##### Returns:

  A point can be inserted at the current pointer position.

#### canRemovePoint(){boolean}

interaction/Modify.js, line 2002

  Check if a point can be removed from the current linestring or polygon at the current pointer position.

  ##### Returns:

  A point can be deleted at the current pointer position.

#### changed() inherited

Observable.js, line 68

  Increases the revision counter and dispatches a 'change' event.

#### dispatchEvent(event){boolean | undefined} inherited

events/Target.js, line 85

  Dispatches an event and calls all listeners listening for events of this type. The event parameter can either be a string or an Object with a `type` property.

  Name | Type | Description
  --- | --- | ---
  `event` | BaseEvent | string | Event object.

  ##### Returns:

  `false` if anyone called preventDefault on the event object or if any of the listeners returned false.

#### get(key){*} inherited

Object.js, line 136

  Gets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.

  ##### Returns:

  Value.

#### getActive(){boolean} inherited

interaction/Interaction.js, line 82

  Return whether the interaction is currently active.

  ##### Returns:

  `true` if the interaction is active, `false` otherwise.

#### getKeys(){Array.<string>} inherited

Object.js, line 149

  Get a list of object property names.

  ##### Returns:

  List of property names.

#### getMap(){Map | null} inherited

interaction/Interaction.js, line 91

  Get the map associated with this interaction.

  ##### Returns:

  Map.

#### getOverlay(){VectorLayer}

interaction/Modify.js, line 713

  Get the overlay layer that this interaction renders the modification point or vertex to.

  ##### Returns:

  Overlay layer.

#### getPointerCount(){number} inherited

interaction/Pointer.js, line 95

  Returns the current number of pointers involved in the interaction, e.g. `2` when two fingers are used.

  ##### Returns:

  The number of pointers.

#### getProperties(){NoInfer.<Properties>} inherited

Object.js, line 158

  Get an object of all property names and values.

  ##### Returns:

  Object.

#### getRevision(){number} inherited

Observable.js, line 79

  Get the version number for this object. Each time the object is modified, its version number will be incremented.

  ##### Returns:

  Revision.

#### insertPoint(coordinate){boolean}

interaction/Modify.js, line 2227

  Inserts the vertex currently being pointed to the current linestring or polygon.

  Name | Type | Description
  --- | --- | ---
  `coordinate` | Coordinate | undefined | If provided, the pointer will be set to the provided coordinate. If not, the current pointer coordinate will be used.

  ##### Returns:

  A vertex was inserted.

#### on(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 152

  Listen for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### once(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 164

  Listen once for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### removePoint(coordinate){boolean}

interaction/Modify.js, line 2033

  Removes the vertex currently being pointed from the current linestring or polygon.

  Name | Type | Description
  --- | --- | ---
  `coordinate` | Coordinate | undefined | If provided, the pointer will be set to the provided coordinate. If not, the current pointer coordinate will be used.

  ##### Returns:

  True when a vertex was removed.

#### set(key, value, silent) inherited

Object.js, line 218

  Sets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `value` | * | Value.
  `silent` | boolean | undefined | Update without triggering an event.

#### setActive(active)

interaction/Modify.js, line 688

  Activate or deactivate the interaction.

  Name | Type | Description
  --- | --- | ---
  `active` | boolean | Active.

#### setProperties(values, silent) inherited

Object.js, line 238

  Sets a collection of key-value pairs. Note that this changes any existing properties and adds new ones (it does not remove any existing properties).

  Name | Type | Description
  --- | --- | ---
  `values` | Partial.<NoInfer.<Properties>> | Values.
  `silent` | boolean | undefined | Update without triggering an event.

#### un(type, listener) inherited

Observable.js, line 173

  Unlisten for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

#### unset(key, silent) inherited

Object.js, line 262

  Unsets a property.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `silent` | boolean | undefined | Unset without triggering an event.