Proper handling of virtual vertices so we don't leave them on the layer. r=crschmidt (closes #1230)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@5623 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2008-01-02 18:54:33 +00:00
parent 67e260775e
commit d643492888
2 changed files with 14 additions and 7 deletions

View File

@@ -385,8 +385,10 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
// dragging a virtual vertex
vertex.geometry.parent.addComponent(vertex.geometry,
vertex._index);
// move from virtual to real vertex
delete vertex._index;
OpenLayers.Util.removeItem(this.virtualVertices, vertex);
this.vertices.push(vertex);
} else if(vertex == this.dragHandle) {
// dragging a drag handle
this.layer.removeFeatures(this.vertices);
@@ -398,8 +400,10 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
}
// dragging a radius handle - no special treatment
// dragging a real vertex - no special treatment
this.layer.destroyFeatures(this.virtualVertices);
this.virtualVertices = [];
if(this.virtualVertices.length > 0) {
this.layer.destroyFeatures(this.virtualVertices);
this.virtualVertices = [];
}
this.layer.drawFeature(this.feature, this.selectControl.selectStyle);
}
// keep the vertex on top so it gets the mouseout after dragging
@@ -499,7 +503,11 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
vertex = new OpenLayers.Feature.Vector(geometry);
control.vertices.push(vertex);
} else {
for(i=0; i<geometry.components.length; ++i) {
var numVert = geometry.components.length;
if(geometry.CLASS_NAME == "OpenLayers.Geometry.LinearRing") {
numVert -= 1;
}
for(i=0; i<numVert; ++i) {
component = geometry.components[i];
if(component.CLASS_NAME == "OpenLayers.Geometry.Point") {
vertex = new OpenLayers.Feature.Vector(component);

View File

@@ -249,7 +249,7 @@
}
function test_ModifyFeature_resetVertices(t) {
t.plan(18);
t.plan(17);
var layer = new OpenLayers.Layer.Vector();
var control = new OpenLayers.Control.ModifyFeature(layer);
var point = new OpenLayers.Geometry.Point(5,6);
@@ -276,8 +276,7 @@
var polygon = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing([point, point2, point3])]);
control.feature = new OpenLayers.Feature.Vector(polygon);
control.resetVertices();
t.eq(control.vertices.length, 4, "Correct vertices length with polygon");
t.eq(control.vertices[0].geometry.id, control.vertices[3].geometry.id, "First and last vertices are the same");
t.eq(control.vertices.length, 3, "Correct vertices length with polygon");
t.eq(control.virtualVertices.length, 3, "Correct virtual vertices length (polygon).");
control.mode = OpenLayers.Control.ModifyFeature.DRAG;
@@ -298,7 +297,7 @@
control.mode = OpenLayers.Control.ModifyFeature.RESHAPE | OpenLayers.Control.ModifyFeature.RESIZE;
control.resetVertices();
t.ok(control.radiusHandle != null, "Radius handle is set");
t.eq(control.vertices.length, 4, "Correct vertices length with polygon (RESHAPE | RESIZE)");
t.eq(control.vertices.length, 3, "Correct vertices length with polygon (RESHAPE | RESIZE)");
t.eq(control.virtualVertices.length, 3, "Correct virtual vertices length (RESHAPE | RESIZE)");
}