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;