From 62e1ee0cd68df2973d2f140796fdfb1f8dbedf19 Mon Sep 17 00:00:00 2001 From: McBen Date: Tue, 10 Jun 2014 19:12:16 +0200 Subject: [PATCH] cross-links: moved to extra layer --- plugins/cross_link.user.js | 56 +++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/plugins/cross_link.user.js b/plugins/cross_link.user.js index f120dffc..2a0542aa 100644 --- a/plugins/cross_link.user.js +++ b/plugins/cross_link.user.js @@ -18,13 +18,8 @@ // PLUGIN START //////////////////////////////////////////////////////// -// use own namespace for plugin window.plugin.crossLinks = function() {}; -window.plugin.crossLinks.STYLE_LINECOLLISION = {color: '#f22', weight: 4}; -window.plugin.crossLinks.STYLE_INSIDEPOLY = {color: '#ff2', weight: 4}; - - // Great Circle Arc Intersection // http://geospatialmethods.org/spheres/GCAIntersect.html function intersect(a, b) { @@ -164,6 +159,8 @@ window.plugin.crossLinks.testPolygons = function (polygons, link) { } window.plugin.crossLinks.onLinkAdded = function (data) { + if (window.plugin.crossLinks.disabled) return; + window.plugin.crossLinks.linkLayer.bringToFront(); // FIXME: workaround to keep it on above the link-layer var link = data.link; @@ -172,7 +169,7 @@ window.plugin.crossLinks.onLinkAdded = function (data) { latlngs = layer.getLatLngs(); latlngs.push(latlngs[0]); if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) { - link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION); + plugin.crossLinks.showLink(link.getLatLngs()); } // TODO: rework inside-polygons /* @@ -184,31 +181,32 @@ window.plugin.crossLinks.onLinkAdded = function (data) { } else if (layer instanceof L.GeodesicPolyline) { if (window.plugin.crossLinks.testPolyLine(layer.getLatLngs(), link.getLatLngs())) { - link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION); + plugin.crossLinks.showLink(link.getLatLngs()); } } }); } window.plugin.crossLinks.checkAllLinks = function() { - console.debug("Cross-Links: checking links"); + console.debug("Cross-Links: checking links"); + if (window.plugin.crossLinks.disabled) return; - // check all links - $.each(window.links, function(guid, link) { + plugin.crossLinks.linkLayer.clearLayers(); - link.setStyle ({color: COLORS[link.options.team], weight: 2}); + // check all links + $.each(window.links, function(guid, link) { window.plugin.drawTools.drawnItems.eachLayer( function(layer) { if (layer instanceof L.GeodesicPolyline) { if (window.plugin.crossLinks.testPolyLine(layer.getLatLngs(), link.getLatLngs())) { - link.setStyle(window.plugin.crossLinks.STYLE_LINECOLLISION); + plugin.crossLinks.showLink(link.getLatLngs()); return false; } } else if (layer instanceof L.GeodesicPolygon) { latlngs = layer.getLatLngs(); latlngs.push(latlngs[0]); if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) { - link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION); + plugin.crossLinks.showLink(link.getLatLngs()); } // TODO: rework inside-polygons } @@ -216,6 +214,17 @@ window.plugin.crossLinks.checkAllLinks = function() { }); } +window.plugin.crossLinks.showLink = function(latlngs) { + + var poly = L.geodesicPolyline(latlngs, { + color: '#f11', + opacity: 0.7, + weight: 4, + clickable: false, + }); + + poly.addTo(plugin.crossLinks.linkLayer); +}; window.plugin.crossLinks.drawTools_save = function() { window.plugin.crossLinks.ori_drawTools_save(); @@ -228,6 +237,25 @@ window.plugin.crossLinks.drawTools_load = function() { } +window.plugin.crossLinks.createLayer = function() { + window.plugin.crossLinks.linkLayer = new L.FeatureGroup(); //LayerGroup(); FIXME: need to be a FeatureGroup to bring it to front + window.addLayerGroup('Cross Links', window.plugin.crossLinks.linkLayer, true); + window.plugin.crossLinks.linkLayer.bringToFront(); + + //hide the draw tools when the 'drawn items' layer is off, show it when on + map.on('layeradd', function(obj) { + if(obj.layer === window.plugin.crossLinks.linkLayer) { + window.plugin.crossLinks.disabled = undefined; + window.plugin.crossLinks.checkAllLinks(); + } + }); + map.on('layerremove', function(obj) { + if(obj.layer === window.plugin.crossLinks.linkLayer) { + window.plugin.crossLinks.disabled = true; + } + }); +} + var setup = function() { console.debug("Cross-Links: init"); if (window.plugin.drawTools === undefined) { @@ -235,6 +263,8 @@ var setup = function() { return; } + window.plugin.crossLinks.createLayer(); + // hook 'drawTools' window.plugin.crossLinks.ori_drawTools_save = window.plugin.drawTools.save; window.plugin.drawTools.save = window.plugin.crossLinks.drawTools_save;