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(); };