Merge pull request #1311 from ahocevar/modify-points

Segment distance calculation fails when modifying points
This commit is contained in:
ahocevar
2013-11-25 15:36:48 -08:00
+9 -9
View File
@@ -30,7 +30,7 @@ goog.require('ol.structs.RTree');
* geometry: ol.geom.Geometry, * geometry: ol.geom.Geometry,
* index: (number|undefined), * index: (number|undefined),
* style: ol.style.Style, * style: ol.style.Style,
* segment: (Array.<ol.Extent>|undefined)}} * segment: Array.<ol.Extent>}}
*/ */
ol.interaction.SegmentDataType; ol.interaction.SegmentDataType;
@@ -277,9 +277,11 @@ ol.interaction.Modify.prototype.addSegments_ =
var rTree = this.rTree_; var rTree = this.rTree_;
var segment, segmentData, coordinates; var segment, segmentData, coordinates;
if (geometry instanceof ol.geom.Point) { if (geometry instanceof ol.geom.Point) {
coordinates = geometry.getCoordinates();
segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ segmentData = /** @type {ol.interaction.SegmentDataType} */ ({
feature: feature, feature: feature,
geometry: geometry, geometry: geometry,
segment: [coordinates, coordinates],
style: layer.getStyle() style: layer.getStyle()
}); });
rTree.insert(geometry.getBounds(), segmentData, uid); rTree.insert(geometry.getBounds(), segmentData, uid);
@@ -389,20 +391,18 @@ ol.interaction.Modify.prototype.handleDrag = function(evt) {
var geometry = segmentData.geometry; var geometry = segmentData.geometry;
var coordinates = geometry.getCoordinates(); var coordinates = geometry.getCoordinates();
var oldBounds, newBounds; var segment = segmentData.segment;
var oldBounds = ol.extent.boundingExtent(segment);
if (geometry instanceof ol.geom.Point) { if (geometry instanceof ol.geom.Point) {
oldBounds = geometry.getBounds(); coordinates = vertex;
geometry.setCoordinates(vertex); segment[0] = segment[1] = vertex;
newBounds = geometry.getBounds();
} else { } else {
var index = dragSegment[1]; var index = dragSegment[1];
coordinates[segmentData.index + index] = vertex; coordinates[segmentData.index + index] = vertex;
geometry.setCoordinates(coordinates);
var segment = segmentData.segment;
oldBounds = ol.extent.boundingExtent(segment);
segment[index] = vertex; segment[index] = vertex;
newBounds = ol.extent.boundingExtent(segment);
} }
geometry.setCoordinates(coordinates);
var newBounds = ol.extent.boundingExtent(segment);
this.createOrUpdateVertexFeature_(segmentData.style, vertex); this.createOrUpdateVertexFeature_(segmentData.style, vertex);
this.rTree_.remove(oldBounds, segmentData); this.rTree_.remove(oldBounds, segmentData);
this.rTree_.insert(newBounds, segmentData, goog.getUid(feature)); this.rTree_.insert(newBounds, segmentData, goog.getUid(feature));