Use new setCoordinates methods
This commit is contained in:
@@ -95,3 +95,11 @@ ol.geom.Point.prototype.transform = function(transform) {
|
||||
transform(coordinates, coordinates, coordinates.length);
|
||||
this.setCoordinates(coordinates); // for change event
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.geom.Point.prototype.invalidateBounds = function() {
|
||||
this.bounds_ = null;
|
||||
};
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
goog.provide('ol.interaction.Modify');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.Feature');
|
||||
@@ -15,7 +16,7 @@ goog.require('ol.geom.Point');
|
||||
goog.require('ol.geom.Polygon');
|
||||
goog.require('ol.interaction.Drag');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.layer.VectorLayerEventType');
|
||||
goog.require('ol.layer.VectorEventType');
|
||||
goog.require('ol.layer.VectorLayerRenderIntent');
|
||||
goog.require('ol.structs.RTree');
|
||||
|
||||
@@ -91,11 +92,12 @@ ol.interaction.Modify.prototype.addIndex_ = function(layer, features) {
|
||||
|
||||
/**
|
||||
* Listen for feature additions.
|
||||
* @param {ol.layer.VectorLayerEventObject} evt Event object.
|
||||
* @param {ol.layer.VectorEvent} evt Event object.
|
||||
* @private
|
||||
*/
|
||||
ol.interaction.Modify.prototype.handleFeaturesAdded_ = function(evt) {
|
||||
this.addIndex_(evt.target, evt.features);
|
||||
goog.asserts.assertInstanceof(evt.target, ol.layer.Vector);
|
||||
this.addIndex_(/** @type {ol.layer.Vector} */ (evt.target), evt.features);
|
||||
};
|
||||
|
||||
|
||||
@@ -117,10 +119,10 @@ ol.interaction.Modify.prototype.addLayer = function(layer) {
|
||||
this.addIndex_(selectionLayer,
|
||||
goog.object.getValues(selectionData.selectedFeaturesByFeatureUid));
|
||||
|
||||
goog.events.listen(selectionLayer, ol.layer.VectorLayerEventType.ADD,
|
||||
goog.events.listen(selectionLayer, ol.layer.VectorEventType.ADD,
|
||||
this.handleFeaturesAdded_, false, this);
|
||||
goog.events.listen(selectionLayer, ol.layer.VectorLayerEventType.REMOVE,
|
||||
this.removeIndex, false, this);
|
||||
goog.events.listen(selectionLayer, ol.layer.VectorEventType.REMOVE,
|
||||
this.handleFeaturesRemoved_, false, this);
|
||||
};
|
||||
|
||||
|
||||
@@ -158,9 +160,10 @@ ol.interaction.Modify.prototype.addSegments_ =
|
||||
rTree.insert(ol.extent.boundingExtent(segment), segmentData, uid);
|
||||
}
|
||||
} else if (geometry instanceof ol.geom.Polygon) {
|
||||
for (var j = 0, jj = geometry.rings.length; j < jj; ++j) {
|
||||
this.addSegments_(selectionLayer, feature, geometry.rings[j],
|
||||
[geometry.rings, j]);
|
||||
var rings = geometry.getRings();
|
||||
for (var j = 0, jj = rings.length; j < jj; ++j) {
|
||||
this.addSegments_(selectionLayer, feature, rings[j],
|
||||
[rings, j]);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -226,10 +229,10 @@ ol.interaction.Modify.prototype.handleDrag = function(evt) {
|
||||
var segmentData = dragSegment[1];
|
||||
var feature = segmentData[1];
|
||||
var geometry = segmentData[2];
|
||||
var coordinates = geometry.getCoordinates();
|
||||
var index = dragSegment[2];
|
||||
geometry.set(segmentData[3] + index, 0, vertex[0]);
|
||||
geometry.set(segmentData[3] + index, 1, vertex[1]);
|
||||
feature.getGeometry().invalidateBounds();
|
||||
coordinates[segmentData[3] + index] = vertex;
|
||||
geometry.setCoordinates(coordinates);
|
||||
|
||||
var editData = selectionLayer.getEditData();
|
||||
var vertexFeature = editData.vertexFeature;
|
||||
@@ -237,12 +240,9 @@ ol.interaction.Modify.prototype.handleDrag = function(evt) {
|
||||
var segment = segmentData[0];
|
||||
editData.rTree.remove(ol.extent.boundingExtent(segment), segmentData);
|
||||
segment[index] = vertex;
|
||||
vertexGeometry.set(0, vertex[0]);
|
||||
vertexGeometry.set(1, vertex[1]);
|
||||
vertexGeometry.setCoordinates(vertex);
|
||||
editData.rTree.insert(ol.extent.boundingExtent(segment), segmentData,
|
||||
goog.getUid(feature));
|
||||
|
||||
selectionLayer.updateFeatures([feature, vertexFeature]);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -293,7 +293,7 @@ ol.interaction.Modify.prototype.handleMouseMove_ = function(evt) {
|
||||
var selectionLayer = layer.getSelectionData().layer;
|
||||
if (!goog.isNull(selectionLayer)) {
|
||||
var listener = goog.events.getListener(selectionLayer,
|
||||
ol.layer.VectorLayerEventType.ADD,
|
||||
ol.layer.VectorEventType.ADD,
|
||||
this.handleFeaturesAdded_, false, this);
|
||||
if (goog.isNull(listener)) {
|
||||
this.addLayer(layer);
|
||||
@@ -308,21 +308,22 @@ ol.interaction.Modify.prototype.handleMouseMove_ = function(evt) {
|
||||
var geometry = vertexFeature.getGeometry();
|
||||
var vertex = /** @type {ol.Coordinate} */
|
||||
(ol.coordinate.closestOnSegment(pixelCoordinate, segment));
|
||||
var coordPixel = map.getPixelFromCoordinate(vertex);
|
||||
var pixel1 = map.getPixelFromCoordinate(segment[0]);
|
||||
var pixel2 = map.getPixelFromCoordinate(segment[1]);
|
||||
var squaredDist1 = ol.coordinate.squaredDistance(coordPixel, pixel1);
|
||||
var squaredDist2 = ol.coordinate.squaredDistance(coordPixel, pixel2);
|
||||
var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
|
||||
renderIntent = ol.layer.VectorLayerRenderIntent.FUTURE;
|
||||
if (dist <= 10) {
|
||||
vertex = squaredDist1 > squaredDist2 ? segment[1] : segment[0];
|
||||
renderIntent = ol.layer.VectorLayerRenderIntent.TEMPORARY;
|
||||
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.layer.VectorLayerRenderIntent.FUTURE;
|
||||
if (dist <= 10) {
|
||||
vertex = squaredDist1 > squaredDist2 ? segment[1] : segment[0];
|
||||
renderIntent = ol.layer.VectorLayerRenderIntent.TEMPORARY;
|
||||
}
|
||||
geometry.setCoordinates(vertex);
|
||||
this.modifiable_ = true;
|
||||
}
|
||||
geometry.set(0, vertex[0]);
|
||||
geometry.set(1, vertex[1]);
|
||||
selectionLayer.updateFeatures([vertexFeature]);
|
||||
this.modifiable_ = true;
|
||||
}
|
||||
if (vertexFeature.renderIntent != renderIntent) {
|
||||
selectionLayer.setRenderIntent(renderIntent, [vertexFeature]);
|
||||
@@ -397,9 +398,11 @@ ol.interaction.Modify.prototype.insertVertex_ =
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.layer.VectorLayerEventObject} evt Event object.
|
||||
* Listen for feature removals.
|
||||
* @param {ol.layer.VectorEvent} evt Event object.
|
||||
* @private
|
||||
*/
|
||||
ol.interaction.Modify.prototype.removeIndex = function(evt) {
|
||||
ol.interaction.Modify.prototype.handleFeaturesRemoved_ = function(evt) {
|
||||
var layer = evt.target;
|
||||
var rTree = layer.getEditData().rTree;
|
||||
var features = evt.features;
|
||||
|
||||
@@ -470,26 +470,6 @@ ol.layer.Vector.prototype.setTemporary = function(temporary) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* TODO: This should go away - features should either fire events when changed,
|
||||
* or feature changes should be made through the layer.
|
||||
*
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
*/
|
||||
ol.layer.Vector.prototype.updateFeatures = function(features) {
|
||||
var extent = ol.extent.createEmpty();
|
||||
for (var i = features.length - 1; i >= 0; --i) {
|
||||
var feature = features[i];
|
||||
var geometry = feature.getGeometry();
|
||||
this.featureCache_.remove(feature);
|
||||
this.featureCache_.add(feature);
|
||||
ol.extent.extend(extent, geometry.getBounds());
|
||||
}
|
||||
this.dispatchEvent(new ol.layer.VectorEvent(
|
||||
ol.layer.VectorLayerEventType.CHANGE, features, [extent]));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Sort function for `groupFeaturesBySymbolizerLiteral`.
|
||||
* @private
|
||||
|
||||
Reference in New Issue
Block a user