Keep the other dim from the original segment when modifying vertex
This commit is contained in:
@@ -580,7 +580,7 @@ ol.interaction.Modify.handleDragEvent_ = function(evt) {
|
|||||||
var index = dragSegment[1];
|
var index = dragSegment[1];
|
||||||
|
|
||||||
while (vertex.length < geometry.getStride()) {
|
while (vertex.length < geometry.getStride()) {
|
||||||
vertex.push(0);
|
vertex.push(segment[index][vertex.length]);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (geometry.getType()) {
|
switch (geometry.getType()) {
|
||||||
|
|||||||
@@ -326,6 +326,50 @@ describe('ol.interaction.Modify', function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('vertex modification', function() {
|
||||||
|
|
||||||
|
it('keeps the third dimension', function() {
|
||||||
|
var lineFeature = new ol.Feature({
|
||||||
|
geometry: new ol.geom.LineString(
|
||||||
|
[[0, 0, 10], [10, 20, 20], [0, 40, 30], [40, 40, 40], [40, 0, 50]]
|
||||||
|
)
|
||||||
|
});
|
||||||
|
features.length = 0;
|
||||||
|
features.push(lineFeature);
|
||||||
|
|
||||||
|
var modify = new ol.interaction.Modify({
|
||||||
|
features: new ol.Collection(features)
|
||||||
|
});
|
||||||
|
map.addInteraction(modify);
|
||||||
|
|
||||||
|
// Move first vertex
|
||||||
|
simulateEvent('pointermove', 0, 0, false, 0);
|
||||||
|
simulateEvent('pointerdown', 0, 0, false, 0);
|
||||||
|
simulateEvent('pointermove', -10, -10, false, 0);
|
||||||
|
simulateEvent('pointerdrag', -10, -10, false, 0);
|
||||||
|
simulateEvent('pointerup', -10, -10, false, 0);
|
||||||
|
|
||||||
|
// Move middle vertex
|
||||||
|
simulateEvent('pointermove', 0, -40, false, 0);
|
||||||
|
simulateEvent('pointerdown', 0, -40, false, 0);
|
||||||
|
simulateEvent('pointermove', 10, -30, false, 0);
|
||||||
|
simulateEvent('pointerdrag', 10, -30, false, 0);
|
||||||
|
simulateEvent('pointerup', 10, -30, false, 0);
|
||||||
|
|
||||||
|
// Move last vertex
|
||||||
|
simulateEvent('pointermove', 40, 0, false, 0);
|
||||||
|
simulateEvent('pointerdown', 40, 0, false, 0);
|
||||||
|
simulateEvent('pointermove', 50, -10, false, 0);
|
||||||
|
simulateEvent('pointerdrag', 50, -10, false, 0);
|
||||||
|
simulateEvent('pointerup', 50, -10, false, 0);
|
||||||
|
|
||||||
|
expect(lineFeature.getGeometry().getCoordinates()[0][2]).to.equal(10);
|
||||||
|
expect(lineFeature.getGeometry().getCoordinates()[2][2]).to.equal(30);
|
||||||
|
expect(lineFeature.getGeometry().getCoordinates()[4][2]).to.equal(50);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
describe('boundary modification', function() {
|
describe('boundary modification', function() {
|
||||||
var modify, feature, events;
|
var modify, feature, events;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user