Use new setCoordinates methods

This commit is contained in:
ahocevar
2013-11-09 15:17:10 +01:00
parent fec638e8be
commit 1c3b839a6f
3 changed files with 44 additions and 53 deletions

View File

@@ -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;
};

View File

@@ -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;

View File

@@ -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