From df03bdeae82b85d327db7d9d7efa09918f78a168 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 12 Mar 2014 13:51:35 +0100 Subject: [PATCH] Remove old ol.interaction.Modify --- .../ol/interaction/modifyinteraction.exports | 1 - old/src/ol/interaction/modifyinteraction.js | 542 ------------------ 2 files changed, 543 deletions(-) delete mode 100644 old/src/ol/interaction/modifyinteraction.exports delete mode 100644 old/src/ol/interaction/modifyinteraction.js diff --git a/old/src/ol/interaction/modifyinteraction.exports b/old/src/ol/interaction/modifyinteraction.exports deleted file mode 100644 index 60378a3759..0000000000 --- a/old/src/ol/interaction/modifyinteraction.exports +++ /dev/null @@ -1 +0,0 @@ -@exportSymbol ol.interaction.Modify diff --git a/old/src/ol/interaction/modifyinteraction.js b/old/src/ol/interaction/modifyinteraction.js deleted file mode 100644 index 33fc1fde76..0000000000 --- a/old/src/ol/interaction/modifyinteraction.js +++ /dev/null @@ -1,542 +0,0 @@ -goog.provide('ol.interaction.Modify'); - -goog.require('goog.array'); -goog.require('goog.asserts'); -goog.require('goog.events'); -goog.require('goog.functions'); -goog.require('ol.CollectionEventType'); -goog.require('ol.Feature'); -goog.require('ol.FeatureRenderIntent'); -goog.require('ol.MapBrowserEvent.EventType'); -goog.require('ol.ViewHint'); -goog.require('ol.coordinate'); -goog.require('ol.extent'); -goog.require('ol.geom.AbstractCollection'); -goog.require('ol.geom.LineString'); -goog.require('ol.geom.LinearRing'); -goog.require('ol.geom.Point'); -goog.require('ol.geom.Polygon'); -goog.require('ol.interaction.Drag'); -goog.require('ol.layer.Layer'); -goog.require('ol.layer.Vector'); -goog.require('ol.source.Vector'); -goog.require('ol.source.VectorEventType'); -goog.require('ol.structs.RBush'); - - -/** - * @typedef {{feature: ol.Feature, - * geometry: ol.geom.Geometry, - * index: (number|undefined), - * style: ol.style.Style, - * segment: Array.}} - */ -ol.interaction.SegmentDataType; - - - -/** - * @constructor - * @extends {ol.interaction.Drag} - * @param {olx.interaction.ModifyOptions=} opt_options Options. - */ -ol.interaction.Modify = function(opt_options) { - goog.base(this); - - var options = goog.isDef(opt_options) ? opt_options : {}; - - var layerFilter = options.layers; - if (!goog.isDef(layerFilter)) { - layerFilter = goog.functions.TRUE; - } else if (goog.isArray(layerFilter)) { - layerFilter = function(layer) {return options.layers.indexOf(layer) > -1;}; - } - goog.asserts.assertFunction(layerFilter); - - /** - * @type {function(ol.layer.Layer):boolean} - * @private - */ - this.layerFilter_ = layerFilter; - - /** - * Layer lookup. Keys source id to layer. - * @type {Object.} - * @private - */ - this.layerLookup_ = null; - - /** - * Temporary sketch layer. - * @type {ol.layer.Vector} - * @private - */ - this.sketchLayer_ = null; - - /** - * Editing vertex. - * @type {ol.Feature} - * @private - */ - this.vertexFeature_ = null; - - /** - * @type {boolean} - * @private - */ - this.modifiable_ = false; - - /** - * Segment RBush for each layer - * @type {Object.<*, ol.structs.RBush>} - * @private - */ - this.rBush_ = null; - - /** - * @type {number} - * @private - */ - this.pixelTolerance_ = goog.isDef(options.pixelTolerance) ? - options.pixelTolerance : 20; - - /** - * @type {Array} - * @private - */ - this.dragSegments_ = null; - -}; -goog.inherits(ol.interaction.Modify, ol.interaction.Drag); - - -/** - * @inheritDoc - */ -ol.interaction.Modify.prototype.setMap = function(map) { - var oldMap = this.getMap(); - var layers; - if (!goog.isNull(oldMap)) { - oldMap.removeLayer(this.sketchLayer_); - layers = oldMap.getLayerGroup().getLayers(); - goog.asserts.assert(goog.isDef(layers)); - layers.forEach(goog.bind(this.removeLayer_, this)); - layers.unlisten(ol.CollectionEventType.ADD, this.handleLayerAdded_, false, - this); - layers.unlisten(ol.CollectionEventType.REMOVE, this.handleLayerRemoved_, - false, this); - } - - if (!goog.isNull(map)) { - this.layerLookup_ = {}; - if (goog.isNull(this.rBush_)) { - this.rBush_ = new ol.structs.RBush(); - } - if (goog.isNull(this.sketchLayer_)) { - var sketchLayer = new ol.layer.Vector({ - source: new ol.source.Vector() - }); - this.sketchLayer_ = sketchLayer; - sketchLayer.setTemporary(true); - map.addLayer(sketchLayer); - } - layers = map.getLayerGroup().getLayers(); - goog.asserts.assert(goog.isDef(layers)); - layers.forEach(goog.bind(this.addLayer_, this)); - layers.listen(ol.CollectionEventType.ADD, this.handleLayerAdded_, false, - this); - layers.listen(ol.CollectionEventType.REMOVE, this.handleLayerRemoved_, - false, this); - } else { - // removing from a map, clean up - this.layerLookup_ = null; - this.rBush_ = null; - this.sketchLayer_ = null; - } - - goog.base(this, 'setMap', map); -}; - - -/** - * @param {ol.CollectionEvent} evt Event. - * @private - */ -ol.interaction.Modify.prototype.handleLayerAdded_ = function(evt) { - var layer = evt.getElement(); - goog.asserts.assertInstanceof(layer, ol.layer.Layer); - this.addLayer_(layer); -}; - - -/** - * Add a layer for modification. - * @param {ol.layer.Layer} layer Layer. - * @private - */ -ol.interaction.Modify.prototype.addLayer_ = function(layer) { - if (this.layerFilter_(layer) && layer instanceof ol.layer.Vector && - !layer.getTemporary()) { - var source = layer.getVectorSource(); - this.layerLookup_[goog.getUid(source)] = layer; - this.addIndex_(source.getFeatures(ol.layer.Vector.selectedFeaturesFilter), - layer); - goog.events.listen(source, ol.source.VectorEventType.INTENTCHANGE, - this.handleIntentChange_, false, this); - } -}; - - -/** - * @param {ol.CollectionEvent} evt Event. - * @private - */ -ol.interaction.Modify.prototype.handleLayerRemoved_ = function(evt) { - var layer = evt.getElement(); - goog.asserts.assertInstanceof(layer, ol.layer.Layer); - this.removeLayer_(layer); -}; - - -/** - * Remove a layer for modification. - * @param {ol.layer.Layer} layer Layer. - * @private - */ -ol.interaction.Modify.prototype.removeLayer_ = function(layer) { - if (this.layerFilter_(layer) && layer instanceof ol.layer.Vector && - !layer.getTemporary()) { - var source = layer.getVectorSource(); - delete this.layerLookup_[goog.getUid(source)]; - this.removeIndex_( - source.getFeatures(ol.layer.Vector.selectedFeaturesFilter)); - goog.events.unlisten(source, ol.source.VectorEventType.INTENTCHANGE, - this.handleIntentChange_, false, this); - } -}; - - -/** - * @param {Array.} features Array of features. - * @param {ol.layer.Vector} layer Layer the features belong to. - * @private - */ -ol.interaction.Modify.prototype.addIndex_ = function(features, layer) { - for (var i = 0, ii = features.length; i < ii; ++i) { - var feature = features[i]; - var geometry = feature.getGeometry(); - if (geometry instanceof ol.geom.AbstractCollection) { - var components = geometry.getComponents(); - for (var j = 0, jj = components.length; j < jj; ++j) { - this.addSegments_(feature, components[j], layer); - } - } else { - this.addSegments_(feature, geometry, layer); - } - } -}; - - -/** - * @param {Array.} features Array of features. - * @private - */ -ol.interaction.Modify.prototype.removeIndex_ = function(features) { - var rBush = this.rBush_; - var nodesToRemove = []; - var i, feature; - for (i = features.length - 1; i >= 0; --i) { - feature = features[i]; - rBush.forEachInExtent(feature.getGeometry().getBounds(), function(node) { - if (feature === node.feature) { - nodesToRemove.push(node); - } - }); - } - for (i = nodesToRemove.length - 1; i >= 0; --i) { - rBush.remove(nodesToRemove[i]); - } -}; - - -/** - * Listen for feature additions. - * @param {ol.source.VectorEvent} evt Event object. - * @private - */ -ol.interaction.Modify.prototype.handleIntentChange_ = function(evt) { - var source = evt.target; - goog.asserts.assertInstanceof(source, ol.source.Vector); - var layer = this.layerLookup_[goog.getUid(source)]; - goog.asserts.assertInstanceof(layer, ol.layer.Vector); - var features = evt.features; - for (var i = 0, ii = features.length; i < ii; ++i) { - var feature = features[i]; - var renderIntent = feature.getRenderIntent(); - if (renderIntent == ol.FeatureRenderIntent.SELECTED) { - this.addIndex_([feature], layer); - } else { - this.removeIndex_([feature]); - } - } -}; - - -/** - * @param {ol.Feature} feature Feature to add segments for. - * @param {ol.geom.Geometry} geometry Geometry to add segments for. - * @param {ol.layer.Vector} layer Vector layer to add segments for. - * @private - */ -ol.interaction.Modify.prototype.addSegments_ = - function(feature, geometry, layer) { - var rBush = this.rBush_; - var segment, segmentData, coordinates; - if (geometry instanceof ol.geom.Point) { - coordinates = geometry.getCoordinates(); - segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ - feature: feature, - geometry: geometry, - segment: [coordinates, coordinates], - style: layer.getStyle() - }); - rBush.insert(geometry.getBounds(), segmentData); - } else if (geometry instanceof ol.geom.LineString || - geometry instanceof ol.geom.LinearRing) { - coordinates = geometry.getCoordinates(); - for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) { - segment = coordinates.slice(i, i + 2); - segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ - feature: feature, - geometry: geometry, - index: i, - style: layer.getStyle(), - segment: segment - }); - rBush.insert(ol.extent.boundingExtent(segment), segmentData); - } - } else if (geometry instanceof ol.geom.Polygon) { - var rings = geometry.getRings(); - for (var j = 0, jj = rings.length; j < jj; ++j) { - this.addSegments_(feature, rings[j], layer); - } - } -}; - - -/** - * @param {ol.style.Style} style Style of the layer that the feature being - * modified belongs to. - * @param {ol.Coordinate} coordinates Coordinates. - * @return {ol.Feature} Vertex feature. - * @private - */ -ol.interaction.Modify.prototype.createOrUpdateVertexFeature_ = - function(style, coordinates) { - var vertexFeature = this.vertexFeature_; - if (goog.isNull(vertexFeature)) { - vertexFeature = new ol.Feature({g: new ol.geom.Point(coordinates)}); - this.vertexFeature_ = vertexFeature; - this.sketchLayer_.getVectorSource().addFeatures([vertexFeature]); - } else { - var point = vertexFeature.getGeometry(); - goog.asserts.assertInstanceof(point, ol.geom.Point); - point.setCoordinates(coordinates); - } - if (this.sketchLayer_.getStyle() !== style) { - this.sketchLayer_.setStyle(style); - } - return vertexFeature; -}; - - -/** - * @inheritDoc - */ -ol.interaction.Modify.prototype.handleDragStart = function(evt) { - this.dragSegments_ = []; - var vertexFeature = this.vertexFeature_; - if (!goog.isNull(vertexFeature) && vertexFeature.getRenderIntent() != - ol.FeatureRenderIntent.HIDDEN) { - var renderIntent = vertexFeature.getRenderIntent(); - var insertVertices = []; - var vertex = vertexFeature.getGeometry().getCoordinates(); - var vertexExtent = ol.extent.boundingExtent([vertex]); - var distinctFeatures = {}; - var dragSegments = this.dragSegments_; - this.rBush_.forEachInExtent(vertexExtent, function(node) { - var segment = node.segment; - if (!(goog.getUid(node.feature) in distinctFeatures)) { - var feature = node.feature; - distinctFeatures[goog.getUid(feature)] = true; - } - if (renderIntent == ol.FeatureRenderIntent.TEMPORARY) { - if (ol.coordinate.equals(segment[0], vertex)) { - dragSegments.push([node, 0]); - } else if (ol.coordinate.equals(segment[1], vertex)) { - dragSegments.push([node, 1]); - } - } else if ( - ol.coordinate.squaredDistanceToSegment(vertex, segment) === 0) { - insertVertices.push([node, vertex]); - } - }); - for (var i = insertVertices.length - 1; i >= 0; --i) { - this.insertVertex_.apply(this, insertVertices[i]); - } - } - return this.modifiable_; -}; - - -/** - * @inheritDoc - */ -ol.interaction.Modify.prototype.handleDrag = function(evt) { - var vertex = evt.getCoordinate(); - for (var i = 0, ii = this.dragSegments_.length; i < ii; ++i) { - var dragSegment = this.dragSegments_[i]; - var segmentData = dragSegment[0]; - var geometry = segmentData.geometry; - var coordinates = geometry.getCoordinates(); - var segment = segmentData.segment; - if (geometry instanceof ol.geom.Point) { - coordinates = vertex; - segment[0] = segment[1] = vertex; - } else { - var index = dragSegment[1]; - coordinates[segmentData.index + index] = vertex; - segment[index] = vertex; - } - geometry.setCoordinates(coordinates); - this.createOrUpdateVertexFeature_(segmentData.style, vertex); - } -}; - - -/** - * @inheritDoc - */ -ol.interaction.Modify.prototype.handleDragEnd = function(evt) { - var segmentData; - for (var i = this.dragSegments_.length - 1; i >= 0; --i) { - segmentData = this.dragSegments_[i][0]; - this.rBush_.update(ol.extent.boundingExtent(segmentData.segment), - segmentData); - } -}; - - -/** - * @inheritDoc - */ -ol.interaction.Modify.prototype.handleMapBrowserEvent = - function(mapBrowserEvent) { - if (!mapBrowserEvent.map.getView().getHints()[ol.ViewHint.INTERACTING] && - !this.getDragging() && - mapBrowserEvent.type == ol.MapBrowserEvent.EventType.MOUSEMOVE) { - this.handleMouseMove_(mapBrowserEvent); - } - goog.base(this, 'handleMapBrowserEvent', mapBrowserEvent); - return !this.modifiable_; -}; - - -/** - * @param {ol.MapBrowserEvent} evt Event. - * @private - */ -ol.interaction.Modify.prototype.handleMouseMove_ = function(evt) { - var map = evt.map; - var pixel = evt.getPixel(); - var pixelCoordinate = map.getCoordinateFromPixel(pixel); - var sortByDistance = function(a, b) { - return ol.coordinate.squaredDistanceToSegment(pixelCoordinate, a.segment) - - ol.coordinate.squaredDistanceToSegment(pixelCoordinate, b.segment); - }; - - var lowerLeft = map.getCoordinateFromPixel( - [pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]); - var upperRight = map.getCoordinateFromPixel( - [pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]); - var box = ol.extent.boundingExtent([lowerLeft, upperRight]); - - this.modifiable_ = false; - var vertexFeature = this.vertexFeature_; - var rBush = this.rBush_; - var nodes = rBush.getAllInExtent(box); - var renderIntent = ol.FeatureRenderIntent.HIDDEN; - if (nodes.length > 0) { - nodes.sort(sortByDistance); - var node = nodes[0]; - var segment = node.segment; // the closest segment - var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate, segment)); - var vertexPixel = map.getPixelFromCoordinate(vertex); - if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <= - this.pixelTolerance_) { - var pixel1 = map.getPixelFromCoordinate(segment[0]); - var pixel2 = map.getPixelFromCoordinate(segment[1]); - var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1); - var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2); - var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2)); - renderIntent = ol.FeatureRenderIntent.FUTURE; - if (dist <= 10) { - vertex = squaredDist1 > squaredDist2 ? segment[1] : segment[0]; - renderIntent = ol.FeatureRenderIntent.TEMPORARY; - } - vertexFeature = this.createOrUpdateVertexFeature_(node.style, vertex); - this.modifiable_ = true; - } - } - - if (!goog.isNull(vertexFeature) && - renderIntent != vertexFeature.getRenderIntent()) { - vertexFeature.setRenderIntent(renderIntent); - } -}; - - -/** - * @param {ol.interaction.SegmentDataType} segmentData Segment data. - * @param {ol.Coordinate} vertex Vertex. - * @private - */ -ol.interaction.Modify.prototype.insertVertex_ = - function(segmentData, vertex) { - var segment = segmentData.segment; - var feature = segmentData.feature; - var geometry = segmentData.geometry; - goog.asserts.assertInstanceof(geometry, ol.geom.LineString); - var index = segmentData.index; - var coordinates = geometry.getCoordinates(); - coordinates.splice(index + 1, 0, vertex); - geometry.setCoordinates(coordinates); - var rBush = this.rBush_; - goog.asserts.assert(goog.isDef(segment)); - rBush.remove(segmentData); - this.rBush_.forEachInExtent(geometry.getBounds(), function(node) { - if (node.geometry === geometry && node.index > index) { - ++node.index; - } - }); - var newSegmentData = /** @type {ol.interaction.SegmentDataType} */ ({ - style: segmentData.style, - segment: [segment[0], vertex], - feature: feature, - geometry: geometry, - index: index - }); - rBush.insert(ol.extent.boundingExtent(newSegmentData.segment), - newSegmentData); - this.dragSegments_.push([newSegmentData, 1]); - newSegmentData = /** @type {ol.interaction.SegmentDataType} */ ({ - style: segmentData.style, - segment: [vertex, segment[1]], - feature: feature, - geometry: geometry, - index: index + 1 - }); - rBush.insert(ol.extent.boundingExtent(newSegmentData.segment), - newSegmentData); - this.dragSegments_.push([newSegmentData, 0]); -};