# Module: ol/interaction/Modify

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

## ol/interaction/Modify

### Classes

ModifyEvent
Modify

### Type Definitions

#### DragSegment{Array}

#### FilterFunction()

interaction/Modify.js, line 98

  A function that takes a `Feature` and returns `true` if the feature may be modified or `false` otherwise.

#### Options{Object}

  ##### Properties:

  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.

#### SegmentData{Object}

  ##### Properties:

  Name | Type | Description
  --- | --- | ---
  `depth` | Array.<number> | undefined | Depth.
  `feature` | Feature | Feature.
  `geometry` | SimpleGeometry | Geometry.
  `index` | number | undefined | Index.
  `segment` | Array.<Array.<number>> | Segment.
  `featureSegments` | Array<SegmentData> | undefined | FeatureSegments.