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:
@@ -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);
|
||||
|
||||
@@ -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)");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user