New createVertices option for Control.ModifyFeature

This commit is contained in:
fredj
2012-02-09 13:43:42 +01:00
parent 85b9d5f7f9
commit 6daecd677d
3 changed files with 33 additions and 1 deletions

View File

@@ -96,6 +96,7 @@
if (rotate || drag) {
controls.modify.mode &= ~OpenLayers.Control.ModifyFeature.RESHAPE;
}
controls.modify.createVertices = document.getElementById("createVertices").checked;
var sides = parseInt(document.getElementById("sides").value);
sides = Math.max(3, isNaN(sides) ? 0 : sides);
controls.regular.handler.sides = sides;
@@ -161,6 +162,11 @@
onclick="toggleControl(this);" />
<label for="modifyToggle">modify feature</label>
<ul>
<li>
<input id="createVertices" type="checkbox" checked
name="createVertices" onchange="update()" />
<label for="createVertices">allow vertices creation</label>
</li>
<li>
<input id="rotate" type="checkbox"
name="rotate" onchange="update()" />

View File

@@ -137,6 +137,13 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
*/
mode: null,
/**
* APIProperty: createVertices
* {Boolean} Create new vertices by dragging the virtual vertices
* in the middle of each edge. Default is true.
*/
createVertices: true,
/**
* Property: modified
* {Boolean} The currently selected feature has been modified.
@@ -677,7 +684,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
}
// add virtual vertices in the middle of each edge
if(geometry.CLASS_NAME != "OpenLayers.Geometry.MultiPoint") {
if (control.createVertices && geometry.CLASS_NAME != "OpenLayers.Geometry.MultiPoint") {
for(i=0, len=geometry.components.length; i<len-1; ++i) {
var prevVertex = geometry.components[i];
var nextVertex = geometry.components[i + 1];

View File

@@ -807,6 +807,25 @@
t.eq(control._originalGeometry, undefined, "original geometry deleted once it is set on the modified property");
}
function test_createVertices(t) {
t.plan(2);
var layer = new OpenLayers.Layer.Vector();
var control = new OpenLayers.Control.ModifyFeature(layer, {
createVertices: false
});
var line = new OpenLayers.Geometry.LineString([
new OpenLayers.Geometry.Point(5, 6),
new OpenLayers.Geometry.Point(7, 8),
new OpenLayers.Geometry.Point(9, 10)
]);
control.feature = new OpenLayers.Feature.Vector(line);
control.resetVertices();
t.eq(control.vertices.length, 3, "Correct vertices length with createVertices is false");
t.eq(control.virtualVertices.length, 0, "Correct virtual vertices length with createVertices is false");
control.destroy();
}
</script>
</head>
<body>