cross-links: process collision links only once (and delete if needed)

This commit is contained in:
McBen 2014-06-11 23:13:06 +02:00
parent e2135acf8b
commit 63a0aa69b5

View File

@ -167,6 +167,7 @@ window.plugin.crossLinks.checkAllLinks = function() {
console.debug("Cross-Links: checking all links");
plugin.crossLinks.linkLayer.clearLayers();
plugin.crossLinks.linkLayerGuids = {};
$.each(window.links, function(guid, link) {
plugin.crossLinks.testLink(link);
@ -174,17 +175,22 @@ window.plugin.crossLinks.checkAllLinks = function() {
}
window.plugin.crossLinks.testLink = function (link) {
window.plugin.drawTools.drawnItems.eachLayer( function(layer) {
if (plugin.crossLinks.linkLayerGuids[link.options.guid]) return;
for (var i in plugin.drawTools.drawnItems._layers) { // leaflet don't support breaking out of the loop
var layer = plugin.drawTools.drawnItems._layers[i];
if (layer instanceof L.GeodesicPolygon) {
if (window.plugin.crossLinks.testPolyLine(layer, link,true)) {
if (plugin.crossLinks.testPolyLine(layer, link,true)) {
plugin.crossLinks.showLink(link);
break;
}
} else if (layer instanceof L.GeodesicPolyline) {
if (window.plugin.crossLinks.testPolyLine(layer, link)) {
if (plugin.crossLinks.testPolyLine(layer, link)) {
plugin.crossLinks.showLink(link);
break;
}
}
});
};
}
@ -195,9 +201,12 @@ window.plugin.crossLinks.showLink = function(link) {
opacity: 0.7,
weight: 4,
clickable: false,
guid: link.options.guid
});
poly.addTo(plugin.crossLinks.linkLayer);
plugin.crossLinks.linkLayerGuids[link.options.guid]=poly;
}
window.plugin.crossLinks.onMapDataRefreshEnd = function () {
@ -205,16 +214,30 @@ window.plugin.crossLinks.onMapDataRefreshEnd = function () {
window.plugin.crossLinks.linkLayer.bringToFront();
delete window.plugin.crossLinks.reorderLinkLayer;
}
window.plugin.crossLinks.testForDeletedLinks();
}
window.plugin.crossLinks.testForDeletedLinks = function () {
window.plugin.crossLinks.linkLayer.eachLayer( function(layer) {
var guid = layer.options.guid;
if (!this.seenLinksGuid[guid]) {
console.log("link removed");
plugin.crossLinks.linkLayer.removeLayer(layer);
delete plugin.crossLinks.linkLayerGuids[guid];
}
});
}
window.plugin.crossLinks.createLayer = function() {
window.plugin.crossLinks.linkLayer = new L.FeatureGroup();
window.plugin.crossLinks.linkLayerGuids={};
window.addLayerGroup('Cross Links', window.plugin.crossLinks.linkLayer, true);
window.plugin.crossLinks.reorderLinkLayer = true;
map.on('layeradd', function(obj) {
if(obj.layer === window.plugin.crossLinks.linkLayer) {
window.plugin.crossLinks.disabled = undefined;
delete window.plugin.crossLinks.disabled;
window.plugin.crossLinks.checkAllLinks();
}
});