Merge pull request #5044 from fblackburn/snapinteraction

Snap interaction now handle feature without geometry properly
This commit is contained in:
Andreas Hocevar
2016-04-27 14:25:17 +02:00
2 changed files with 46 additions and 19 deletions

View File

@@ -172,26 +172,31 @@ goog.inherits(ol.interaction.Snap, ol.interaction.Pointer);
*/
ol.interaction.Snap.prototype.addFeature = function(feature, opt_listen) {
var listen = opt_listen !== undefined ? opt_listen : true;
var feature_uid = goog.getUid(feature);
var geometry = feature.getGeometry();
var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()];
if (segmentWriter) {
var feature_uid = goog.getUid(feature);
this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent(
ol.extent.createEmpty());
segmentWriter.call(this, feature, geometry);
if (geometry) {
var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()];
if (segmentWriter) {
this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent(
ol.extent.createEmpty());
segmentWriter.call(this, feature, geometry);
if (listen) {
this.geometryModifyListenerKeys_[feature_uid] = ol.events.listen(
geometry,
ol.events.EventType.CHANGE,
this.handleGeometryModify_.bind(this, feature),
this);
this.geometryChangeListenerKeys_[feature_uid] = ol.events.listen(
feature,
ol.Object.getChangeEventType(feature.getGeometryName()),
this.handleGeometryChange_, this);
if (listen) {
this.geometryModifyListenerKeys_[feature_uid] = ol.events.listen(
geometry,
ol.events.EventType.CHANGE,
this.handleGeometryModify_.bind(this, feature),
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) {
ol.Observable.unByKey(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];
}
};