diff --git a/index.html b/index.html index 80ce2360..1cf490c1 100644 --- a/index.html +++ b/index.html @@ -7942,7 +7942,7 @@ - + @@ -7982,8 +7982,8 @@ - - + + @@ -7991,7 +7991,7 @@ - + diff --git a/modules/io/export.js b/modules/io/export.js index 648c29e5..7a6c65a7 100644 --- a/modules/io/export.js +++ b/modules/io/export.js @@ -138,16 +138,15 @@ async function exportToPngTiles() { } // parse map svg to object url -async function getMapURL(type, options = {}) { +async function getMapURL(type, options) { const { debug = false, - globe = false, noLabels = false, noWater = false, noScaleBar = false, noIce = false, fullMap = false - } = options; + } = options || {}; const cloneEl = document.getElementById("map").cloneNode(true); // clone svg cloneEl.id = "fantasyMap"; @@ -160,7 +159,6 @@ async function getMapURL(type, options = {}) { const isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") > -1; if (isFirefox && type === "mesh") clone.select("#oceanPattern")?.remove(); - if (globe) clone.select("#scaleBar")?.remove(); if (noLabels) { clone.select("#labels #states")?.remove(); clone.select("#labels #burgLabels")?.remove(); @@ -171,14 +169,17 @@ async function getMapURL(type, options = {}) { clone.select("#oceanPattern").attr("opacity", 0); } if (noIce) clone.select("#ice")?.remove(); - if (noScaleBar) clone.select("#scaleBar")?.remove(); if (fullMap) { // reset transform to show the whole map clone.attr("width", graphWidth).attr("height", graphHeight); clone.select("#viewbox").attr("transform", null); - drawScaleBar(clone.select("#scaleBar"), 1); - fitScaleBar(clone.select("#scaleBar"), graphWidth, graphHeight); + + if (!noScaleBar) { + drawScaleBar(clone.select("#scaleBar"), 1); + fitScaleBar(clone.select("#scaleBar"), graphWidth, graphHeight); + } } + if (noScaleBar) clone.select("#scaleBar")?.remove(); if (type === "svg") removeUnusedElements(clone); if (customization && type === "mesh") updateMeshCells(clone); diff --git a/modules/ui/3d.js b/modules/ui/3d.js index 2c021116..81356130 100644 --- a/modules/ui/3d.js +++ b/modules/ui/3d.js @@ -623,7 +623,7 @@ window.ThreeD = (function () { material.map = texture; if (addMesh) addGlobe3dMesh(); }; - img2.src = await getMapURL("mesh", {globe: true, fullMap: true}); + img2.src = await getMapURL("mesh", {noScaleBar: true, fullMap: true}); } function addGlobe3dMesh() { diff --git a/modules/ui/measurers.js b/modules/ui/measurers.js index c9a1aff9..eedeaffb 100644 --- a/modules/ui/measurers.js +++ b/modules/ui/measurers.js @@ -535,7 +535,7 @@ class Planimeter extends Measurer { // Scale bar function drawScaleBar(scaleBar, scaleLevel) { - if (scaleBar.style("display") === "none") return; // no need to re-draw hidden element + if (!scaleBar.size() || scaleBar.style("display") === "none") return; scaleBar.selectAll("*").remove(); // fully redraw every time const distanceScale = +distanceScaleInput.value; diff --git a/modules/ui/submap.js b/modules/ui/submap.js index 737560c3..2a476faa 100644 --- a/modules/ui/submap.js +++ b/modules/ui/submap.js @@ -136,7 +136,14 @@ window.UISubmap = (function () { } async function loadPreview($container, w, h) { - const url = await getMapURL("png", {globe: false, noWater: true, fullMap: true, noLabels: true, noScaleBar: true, noIce: true}); + const url = await getMapURL("png", { + globe: false, + noWater: true, + fullMap: true, + noLabels: true, + noScaleBar: true, + noIce: true + }); const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); @@ -173,7 +180,11 @@ window.UISubmap = (function () { const {angle, shiftX, shiftY, ratio, mirrorH, mirrorV} = getTransformInput(); const [cx, cy] = [graphWidth / 2, graphHeight / 2]; - const rot = alfa => (x, y) => [(x - cx) * Math.cos(alfa) - (y - cy) * Math.sin(alfa) + cx, (y - cy) * Math.cos(alfa) + (x - cx) * Math.sin(alfa) + cy]; + const rot = alfa => (x, y) => + [ + (x - cx) * Math.cos(alfa) - (y - cy) * Math.sin(alfa) + cx, + (y - cy) * Math.cos(alfa) + (x - cx) * Math.sin(alfa) + cy + ]; const shift = (dx, dy) => (x, y) => [x + dx, y + dy]; const scale = r => (x, y) => [(x - cx) * r + cx, (y - cy) * r + cy]; const flipH = (x, y) => [-x + 2 * cx, y]; @@ -185,7 +196,11 @@ window.UISubmap = (function () { let inverse = id; if (angle) [projection, inverse] = [rot(angle), rot(-angle)]; - if (ratio) [projection, inverse] = [app(scale(Math.pow(1.1, ratio)), projection), app(inverse, scale(Math.pow(1.1, -ratio)))]; + if (ratio) + [projection, inverse] = [ + app(scale(Math.pow(1.1, ratio)), projection), + app(inverse, scale(Math.pow(1.1, -ratio))) + ]; if (mirrorH) [projection, inverse] = [app(flipH, projection), app(inverse, flipH)]; if (mirrorV) [projection, inverse] = [app(flipV, projection), app(inverse, flipV)]; if (shiftX || shiftY) { @@ -244,7 +259,10 @@ window.UISubmap = (function () { // fix scale distanceScaleInput.value = distanceScaleOutput.value = rn((distanceScale = distanceScaleOutput.value / scale), 2); - populationRateInput.value = populationRateOutput.value = rn((populationRate = populationRateOutput.value / scale), 2); + populationRateInput.value = populationRateOutput.value = rn( + (populationRate = populationRateOutput.value / scale), + 2 + ); customization = 0; startResample(options); }, 1000); diff --git a/versioning.js b/versioning.js index 7ad37a21..cdcb00b6 100644 --- a/versioning.js +++ b/versioning.js @@ -1,7 +1,7 @@ "use strict"; // version and caching control -const version = "1.94.02"; // generator version, update each time +const version = "1.94.03"; // generator version, update each time { document.title += " v" + version;