Parent information no longer needed
Now that we can do setCoordinates, we no longer need to create new geometries and assign them to a parent.
This commit is contained in:
@@ -80,8 +80,7 @@ ol.interaction.Modify.prototype.addIndex_ = function(layer, features) {
|
|||||||
var geometry = feature.getGeometry();
|
var geometry = feature.getGeometry();
|
||||||
if (geometry instanceof ol.geom.AbstractCollection) {
|
if (geometry instanceof ol.geom.AbstractCollection) {
|
||||||
for (var j = 0, jj = geometry.components.length; j < jj; ++j) {
|
for (var j = 0, jj = geometry.components.length; j < jj; ++j) {
|
||||||
this.addSegments_(layer, feature, geometry.components[j],
|
this.addSegments_(layer, feature, geometry.components[j]);
|
||||||
[[geometry.components, j]]);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.addSegments_(layer, feature, geometry);
|
this.addSegments_(layer, feature, geometry);
|
||||||
@@ -130,23 +129,16 @@ ol.interaction.Modify.prototype.addLayer = function(layer) {
|
|||||||
* @param {ol.layer.Vector} selectionLayer Selection layer.
|
* @param {ol.layer.Vector} selectionLayer Selection layer.
|
||||||
* @param {ol.Feature} feature Feature to add segments for.
|
* @param {ol.Feature} feature Feature to add segments for.
|
||||||
* @param {ol.geom.Geometry} geometry Geometry to add segments for.
|
* @param {ol.geom.Geometry} geometry Geometry to add segments for.
|
||||||
* @param {Array=} opt_parent Parent structure on the feature that the geometry
|
|
||||||
* belongs to. This array has two values:
|
|
||||||
* [0] the parent array;
|
|
||||||
* [1] the index of the geometry in the parent array.
|
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.interaction.Modify.prototype.addSegments_ =
|
ol.interaction.Modify.prototype.addSegments_ =
|
||||||
function(selectionLayer, feature, geometry, opt_parent) {
|
function(selectionLayer, feature, geometry) {
|
||||||
var uid = goog.getUid(feature);
|
var uid = goog.getUid(feature);
|
||||||
var rTree = selectionLayer.getEditData().rTree;
|
var rTree = selectionLayer.getEditData().rTree;
|
||||||
var vertex, segment, segmentData, coordinates;
|
var vertex, segment, segmentData, coordinates;
|
||||||
if (geometry instanceof ol.geom.Point) {
|
if (geometry instanceof ol.geom.Point) {
|
||||||
vertex = geometry.getCoordinates();
|
vertex = geometry.getCoordinates();
|
||||||
segmentData = [[vertex, vertex], feature, geometry, NaN];
|
segmentData = [[vertex, vertex], feature, geometry, NaN];
|
||||||
if (goog.isDef(opt_parent)) {
|
|
||||||
segmentData.push(opt_parent);
|
|
||||||
}
|
|
||||||
rTree.insert(geometry.getBounds(), segmentData, uid);
|
rTree.insert(geometry.getBounds(), segmentData, uid);
|
||||||
} else if (geometry instanceof ol.geom.LineString ||
|
} else if (geometry instanceof ol.geom.LineString ||
|
||||||
geometry instanceof ol.geom.LinearRing) {
|
geometry instanceof ol.geom.LinearRing) {
|
||||||
@@ -154,16 +146,12 @@ ol.interaction.Modify.prototype.addSegments_ =
|
|||||||
for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
|
for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
|
||||||
segment = coordinates.slice(i, i + 2);
|
segment = coordinates.slice(i, i + 2);
|
||||||
segmentData = [segment, feature, geometry, i];
|
segmentData = [segment, feature, geometry, i];
|
||||||
if (opt_parent) {
|
|
||||||
segmentData.push(opt_parent);
|
|
||||||
}
|
|
||||||
rTree.insert(ol.extent.boundingExtent(segment), segmentData, uid);
|
rTree.insert(ol.extent.boundingExtent(segment), segmentData, uid);
|
||||||
}
|
}
|
||||||
} else if (geometry instanceof ol.geom.Polygon) {
|
} else if (geometry instanceof ol.geom.Polygon) {
|
||||||
var rings = geometry.getRings();
|
var rings = geometry.getRings();
|
||||||
for (var j = 0, jj = rings.length; j < jj; ++j) {
|
for (var j = 0, jj = rings.length; j < jj; ++j) {
|
||||||
this.addSegments_(selectionLayer, feature, rings[j],
|
this.addSegments_(selectionLayer, feature, rings[j]);
|
||||||
[rings, j]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -357,41 +345,23 @@ ol.interaction.Modify.prototype.insertVertex_ =
|
|||||||
var index = segmentData[3];
|
var index = segmentData[3];
|
||||||
var coordinates = geometry.getCoordinates();
|
var coordinates = geometry.getCoordinates();
|
||||||
coordinates.splice(index + 1, 0, vertex);
|
coordinates.splice(index + 1, 0, vertex);
|
||||||
var oldGeometry = geometry;
|
geometry.setCoordinates(coordinates);
|
||||||
geometry = new geometry.constructor(coordinates);
|
|
||||||
var parent;
|
|
||||||
if (segmentData.length > 4) {
|
|
||||||
parent = segmentData[4];
|
|
||||||
parent[0][parent[1]] = geometry;
|
|
||||||
feature.getGeometry().invalidateBounds();
|
|
||||||
} else {
|
|
||||||
feature.setGeometry(geometry);
|
|
||||||
}
|
|
||||||
var rTree = selectionLayer.getEditData().rTree;
|
var rTree = selectionLayer.getEditData().rTree;
|
||||||
rTree.remove(ol.extent.boundingExtent(segment), segmentData);
|
rTree.remove(ol.extent.boundingExtent(segment), segmentData);
|
||||||
var uid = goog.getUid(feature);
|
var uid = goog.getUid(feature);
|
||||||
var allSegments = rTree.search(geometry.getBounds(), uid);
|
var allSegments = rTree.search(geometry.getBounds(), uid);
|
||||||
for (var i = 0, ii = allSegments.length; i < ii; ++i) {
|
for (var i = 0, ii = allSegments.length; i < ii; ++i) {
|
||||||
var allSegmentsData = allSegments[i];
|
var allSegmentsData = allSegments[i];
|
||||||
if (allSegmentsData[2] === oldGeometry) {
|
if (allSegmentsData[2] === geometry && allSegmentsData[3] > index) {
|
||||||
allSegmentsData[2] = geometry;
|
++allSegmentsData[3];
|
||||||
if (allSegmentsData[3] > index) {
|
|
||||||
++allSegmentsData[3];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var newSegment = [segment[0], vertex];
|
var newSegment = [segment[0], vertex];
|
||||||
var newSegmentData = [newSegment, feature, geometry, index];
|
var newSegmentData = [newSegment, feature, geometry, index];
|
||||||
if (goog.isDef(parent)) {
|
|
||||||
newSegmentData.push(parent);
|
|
||||||
}
|
|
||||||
rTree.insert(ol.extent.boundingExtent(newSegment), newSegmentData, uid);
|
rTree.insert(ol.extent.boundingExtent(newSegment), newSegmentData, uid);
|
||||||
this.dragSegments_.push([selectionLayer, newSegmentData, 1]);
|
this.dragSegments_.push([selectionLayer, newSegmentData, 1]);
|
||||||
newSegment = [vertex, segment[1]];
|
newSegment = [vertex, segment[1]];
|
||||||
newSegmentData = [newSegment, feature, geometry, index + 1];
|
newSegmentData = [newSegment, feature, geometry, index + 1];
|
||||||
if (goog.isDef(parent)) {
|
|
||||||
newSegmentData.push(parent);
|
|
||||||
}
|
|
||||||
rTree.insert(ol.extent.boundingExtent(newSegment), newSegmentData, uid);
|
rTree.insert(ol.extent.boundingExtent(newSegment), newSegmentData, uid);
|
||||||
this.dragSegments_.push([selectionLayer, newSegmentData, 0]);
|
this.dragSegments_.push([selectionLayer, newSegmentData, 0]);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user