Merge pull request #5044 from fblackburn/snapinteraction
Snap interaction now handle feature without geometry properly
This commit is contained in:
@@ -172,26 +172,31 @@ goog.inherits(ol.interaction.Snap, ol.interaction.Pointer);
|
|||||||
*/
|
*/
|
||||||
ol.interaction.Snap.prototype.addFeature = function(feature, opt_listen) {
|
ol.interaction.Snap.prototype.addFeature = function(feature, opt_listen) {
|
||||||
var listen = opt_listen !== undefined ? opt_listen : true;
|
var listen = opt_listen !== undefined ? opt_listen : true;
|
||||||
|
var feature_uid = goog.getUid(feature);
|
||||||
var geometry = feature.getGeometry();
|
var geometry = feature.getGeometry();
|
||||||
var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()];
|
if (geometry) {
|
||||||
if (segmentWriter) {
|
var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()];
|
||||||
var feature_uid = goog.getUid(feature);
|
if (segmentWriter) {
|
||||||
this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent(
|
this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent(
|
||||||
ol.extent.createEmpty());
|
ol.extent.createEmpty());
|
||||||
segmentWriter.call(this, feature, geometry);
|
segmentWriter.call(this, feature, geometry);
|
||||||
|
|
||||||
if (listen) {
|
if (listen) {
|
||||||
this.geometryModifyListenerKeys_[feature_uid] = ol.events.listen(
|
this.geometryModifyListenerKeys_[feature_uid] = ol.events.listen(
|
||||||
geometry,
|
geometry,
|
||||||
ol.events.EventType.CHANGE,
|
ol.events.EventType.CHANGE,
|
||||||
this.handleGeometryModify_.bind(this, feature),
|
this.handleGeometryModify_.bind(this, feature),
|
||||||
this);
|
this);
|
||||||
this.geometryChangeListenerKeys_[feature_uid] = ol.events.listen(
|
}
|
||||||
feature,
|
|
||||||
ol.Object.getChangeEventType(feature.getGeometryName()),
|
|
||||||
this.handleGeometryChange_, this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (listen) {
|
||||||
|
this.geometryChangeListenerKeys_[feature_uid] = ol.events.listen(
|
||||||
|
feature,
|
||||||
|
ol.Object.getChangeEventType(feature.getGeometryName()),
|
||||||
|
this.handleGeometryChange_, this);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -317,11 +322,13 @@ ol.interaction.Snap.prototype.removeFeature = function(feature, opt_unlisten) {
|
|||||||
if (unlisten) {
|
if (unlisten) {
|
||||||
ol.Observable.unByKey(this.geometryModifyListenerKeys_[feature_uid]);
|
ol.Observable.unByKey(this.geometryModifyListenerKeys_[feature_uid]);
|
||||||
delete this.geometryModifyListenerKeys_[feature_uid];
|
delete this.geometryModifyListenerKeys_[feature_uid];
|
||||||
|
|
||||||
ol.Observable.unByKey(this.geometryChangeListenerKeys_[feature_uid]);
|
|
||||||
delete this.geometryChangeListenerKeys_[feature_uid];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlisten) {
|
||||||
|
ol.Observable.unByKey(this.geometryChangeListenerKeys_[feature_uid]);
|
||||||
|
delete this.geometryChangeListenerKeys_[feature_uid];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,26 @@ describe('ol.interaction.Snap', function() {
|
|||||||
expect(event.coordinate).to.eql([10, 0]);
|
expect(event.coordinate).to.eql([10, 0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('handle feature without geometry', function() {
|
||||||
|
var feature = new ol.Feature();
|
||||||
|
var snapInteraction = new ol.interaction.Snap({
|
||||||
|
features: new ol.Collection([feature]),
|
||||||
|
pixelTolerance: 5,
|
||||||
|
edge: false
|
||||||
|
});
|
||||||
|
snapInteraction.setMap(map);
|
||||||
|
|
||||||
|
feature.setGeometry(new ol.geom.LineString([[-10, 0], [10, 0]]));
|
||||||
|
|
||||||
|
var event = {
|
||||||
|
pixel: [7 + width / 2, height / 2 - 4],
|
||||||
|
coorinate: [7, 4],
|
||||||
|
map: map
|
||||||
|
};
|
||||||
|
ol.interaction.Snap.handleEvent_.call(snapInteraction, event);
|
||||||
|
expect(event.coordinate).to.eql([10, 0]);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user