diff --git a/examples/modify-features.js b/examples/modify-features.js
index ed8bb3714c..28ae111367 100644
--- a/examples/modify-features.js
+++ b/examples/modify-features.js
@@ -1,4 +1,3 @@
-goog.require('ol.FeatureOverlay');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.interaction');
@@ -227,12 +226,14 @@ var overlayStyle = (function() {
};
})();
-var overlay = new ol.FeatureOverlay({
+var select = new ol.interaction.Select({
style: overlayStyle
});
-var modify = new ol.interaction.Modify({ featureOverlay: overlay });
-var select = new ol.interaction.Select({ featureOverlay: overlay });
+var modify = new ol.interaction.Modify({
+ features: select.getFeatures(),
+ style: overlayStyle
+});
var map = new ol.Map({
interactions: ol.interaction.defaults().extend([select, modify]),
diff --git a/examples/select-features.js b/examples/select-features.js
index def9194a29..4ec79a296a 100644
--- a/examples/select-features.js
+++ b/examples/select-features.js
@@ -31,11 +31,9 @@ var vector = new ol.layer.Vector({
});
var select = new ol.interaction.Select({
- featureOverlay: new ol.FeatureOverlay({
- style: new ol.style.Style({
- fill: new ol.style.Fill({
- color: 'rgba(255,255,255,0.5)'
- })
+ style: new ol.style.Style({
+ fill: new ol.style.Fill({
+ color: 'rgba(255,255,255,0.5)'
})
})
});
diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc
index 5f30b01d63..50cbd40cbf 100644
--- a/src/objectliterals.jsdoc
+++ b/src/objectliterals.jsdoc
@@ -388,7 +388,8 @@
/**
* @typedef {Object} olx.interaction.DrawOptions
- * @property {ol.source.Vector|undefined} source Destination source for the features.
+ * @property {ol.Collection|undefined} features Destination collection for the drawn features.
+ * @property {ol.source.Vector|undefined} source Destination source for the drawn features.
* @property {number|undefined} snapTolerance Pixel distance for snapping to the
* drawing finish (default is 12).
* @property {ol.geom.GeometryType} type Drawing type ('Point', 'LineString',
@@ -440,7 +441,7 @@
* features should be selected.
* @property {Array.
|undefined} layers Layers. Zero or more
* layers from which features should be selected.
- * @property {ol.FeatureOverlay} featureOverlay Feature overlay.
+ * @property {ol.style.Style|Array.|ol.feature.StyleFunction|undefined} style FeatureOverlay style.
*/
/**
@@ -454,7 +455,8 @@
* @typedef {Object} olx.interaction.ModifyOptions
* @property {number|undefined} pixelTolerance Pixel tolerance for considering
* the pointer close enough to a vertex for editing. Default is 20 pixels.
- * @property {ol.FeatureOverlay} featureOverlay Features overlay.
+ * @property {ol.style.Style|Array.|ol.feature.StyleFunction|undefined} style FeatureOverlay style.
+ * @property {ol.Collection} features The features the interaction works on.
*/
/**
diff --git a/src/ol/interaction/drawinteraction.js b/src/ol/interaction/drawinteraction.js
index 9a263bc38b..7c357ad51f 100644
--- a/src/ol/interaction/drawinteraction.js
+++ b/src/ol/interaction/drawinteraction.js
@@ -74,6 +74,13 @@ ol.interaction.Draw = function(options) {
*/
this.source_ = goog.isDef(options.source) ? options.source : null;
+ /**
+ * Target collection for drawn features.
+ * @type {ol.Collection}
+ * @private
+ */
+ this.features_ = goog.isDef(options.features) ? options.features : null;
+
/**
* Pixel distance for snapping.
* @type {number}
@@ -473,6 +480,9 @@ ol.interaction.Draw.prototype.finishDrawing_ = function(event) {
sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates]));
}
+ if (!goog.isNull(this.features_)) {
+ this.features_.push(sketchFeature);
+ }
if (!goog.isNull(this.source_)) {
this.source_.addFeature(sketchFeature);
}
diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js
index e1de03bdba..3de50be901 100644
--- a/src/ol/interaction/modifyinteraction.js
+++ b/src/ol/interaction/modifyinteraction.js
@@ -2,6 +2,7 @@ goog.provide('ol.interaction.Modify');
goog.require('goog.array');
goog.require('goog.asserts');
+goog.require('goog.events');
goog.require('ol.Collection');
goog.require('ol.CollectionEventType');
goog.require('ol.Feature');
@@ -85,11 +86,19 @@ ol.interaction.Modify = function(options) {
* @type {ol.FeatureOverlay}
* @private
*/
- this.overlay_ = options.featureOverlay;
+ this.overlay_ = new ol.FeatureOverlay({
+ style: options.style
+ });
- this.overlay_.getFeatures().listen(ol.CollectionEventType.ADD,
+ /**
+ * @type {ol.Collection}
+ * @private
+ */
+ this.features_ = options.features;
+
+ goog.events.listen(this.features_, ol.CollectionEventType.ADD,
this.addFeature_, false, this);
- this.overlay_.getFeatures().listen(ol.CollectionEventType.REMOVE,
+ goog.events.listen(this.features_, ol.CollectionEventType.REMOVE,
this.removeFeature_, false, this);
/**
@@ -315,8 +324,7 @@ ol.interaction.Modify.prototype.removeFeature_ = function(evt) {
}
// There remains only vertexFeature…
if (!goog.isNull(this.vertexFeature_) &&
- this.overlay_.getFeatures().getLength() === 1 &&
- this.overlay_.getFeatures().getAt(0) == this.vertexFeature_) {
+ this.features_.getLength() === 0) {
this.overlay_.removeFeature(this.vertexFeature_);
this.vertexFeature_ = null;
}
diff --git a/src/ol/interaction/selectinteraction.exports b/src/ol/interaction/selectinteraction.exports
index 57e82dce4b..eeccc7e10a 100644
--- a/src/ol/interaction/selectinteraction.exports
+++ b/src/ol/interaction/selectinteraction.exports
@@ -1,3 +1,3 @@
@exportSymbol ol.interaction.Select
-@exportProperty ol.interaction.Select.prototype.getFeatureOverlay
+@exportProperty ol.interaction.Select.prototype.getFeatures
@exportProperty ol.interaction.Select.prototype.setMap
diff --git a/src/ol/interaction/selectinteraction.js b/src/ol/interaction/selectinteraction.js
index d93eb2aa8c..1b6b44104a 100644
--- a/src/ol/interaction/selectinteraction.js
+++ b/src/ol/interaction/selectinteraction.js
@@ -69,18 +69,20 @@ ol.interaction.Select = function(options) {
* @private
* @type {ol.FeatureOverlay}
*/
- this.featureOverlay_ = options.featureOverlay;
+ this.featureOverlay_ = new ol.FeatureOverlay({
+ style: options.style
+ });
};
goog.inherits(ol.interaction.Select, ol.interaction.Interaction);
/**
- * @return {ol.FeatureOverlay} Feature overlay.
+ * @return {ol.Collection} Features collection.
* @todo stability experimental
*/
-ol.interaction.Select.prototype.getFeatureOverlay = function() {
- return this.featureOverlay_;
+ol.interaction.Select.prototype.getFeatures = function() {
+ return this.featureOverlay_.getFeatures();
};