From 5e6813c52c2d0d1ae17b30a28fc535a8680214ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Gergely?= Date: Sat, 16 Apr 2022 22:41:42 +0200 Subject: [PATCH] Rescale style option for submaps. --- index.html | 4 ++++ modules/ui/submap.js | 49 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index 88e63977..4e8a17bd 100644 --- a/index.html +++ b/index.html @@ -4488,6 +4488,10 @@ +
+ + +
diff --git a/modules/ui/submap.js b/modules/ui/submap.js index 74ef44e6..2c616371 100644 --- a/modules/ui/submap.js +++ b/modules/ui/submap.js @@ -31,14 +31,7 @@ function openRemapOptions() { position: {my: "right top", at: "right-10 top+10", of: "svg", collision: "fit"}, buttons: { Resample: function () { - const cellNumId = Number(document.getElementById("submapPointsInput").value); - const cells = cellsDensityConstants[cellNumId]; $(this).dialog("close"); - if (!cells) { - console.error("Unknown cell number!"); - return; - } - changeCellsDensity(cellNumId); resampleCurrentMap(); }, Cancel: function () { @@ -52,19 +45,24 @@ function openRemapOptions() { const resampleCurrentMap = debounce(function () { // Resample the whole map to different cell resolution or shape + const cellNumId = Number(document.getElementById("submapPointsInput").value); + if (!cellsDensityConstants[cellNumId]) { + console.error("Unknown cell number!"); + return; + } + changeCellsDensity(cellNumId); WARN && console.warn("Resampling current map"); - const options = { + startResample({ lockMarkers: false, lockBurgs: false, depressRivers: false, addLakesInDepressions: false, promoteTowns: false, smoothHeightMap: false, + rescaleStyles: false, projection: (x, y) => [x, y], inverse: (x, y) => [x, y] - }; - - startResample(options); + }); }, 1000); const generateSubmap = debounce(function () { @@ -85,6 +83,7 @@ const generateSubmap = debounce(function () { depressRivers: checked("submapDepressRivers"), addLakesInDepressions: checked("submapAddLakeInDepression"), promoteTowns: checked("submapPromoteTowns"), + rescaleStyles: checked("submapRescaleStyles"), smoothHeightMap: scale > 2, inverse: (x, y) => [x / origScale + x0, y / origScale + y0], projection: (x, y) => [(x - x0) * origScale, (y - y0) * origScale], @@ -108,6 +107,7 @@ const generateSubmap = debounce(function () { }, 1000); async function startResample(options) { + // Do model changes with Submap.resample then do view changes if needed. undraw(); resetZoom(0); let oldstate = { @@ -128,6 +128,7 @@ async function startResample(options) { changeFontSize(svg.select(`#labels #${groupName}`), rn(oldScale * 2, 2)); invokeActiveZooming(); } + if (options.rescaleStyles) changeStyles(oldScale); } catch (error) { showSubmapErrorHandler(error); } @@ -140,6 +141,32 @@ async function startResample(options) { if ($("#worldConfigurator").is(":visible")) editWorld(); } +function changeStyles(scale) { + // resize burgIcons + const burgIcons = [...document.getElementById("burgIcons").querySelectorAll("g")]; + for (const bi of burgIcons) { + const newRadius = rn(minmax(scale, 0.2, 10) * 0.8, 2); + styleRadiusInput.value = newRadius; + changeRadius(newRadius, bi.id); + const swAttr = bi.attributes['stroke-width']; + swAttr.value = +swAttr.value * scale; + } + + // burglabels + const burgLabels= [...document.getElementById("burgLabels").querySelectorAll("g")]; + for (const bl of burgLabels) { + const size = +bl.dataset['size']; + bl.dataset['size'] = Math.max(rn((size + size / scale) / 2, 2), 1) * scale; + } + + // emblems + const emblemMod = minmax((scale - 1) * 0.3 + 1, 0.5, 5); + emblemsStateSizeInput.value = minmax(+emblemsStateSizeInput.value * emblemMod, 0.5, 5); + emblemsProvinceSizeInput.value = minmax(+emblemsProvinceSizeInput.value * emblemMod, 0.5, 5); + emblemsBurgSizeInput.value = minmax(+emblemsBurgSizeInput.value * emblemMod, 0.5, 5); + drawEmblems(); +} + function showSubmapErrorHandler(error) { ERROR && console.error(error); clearMainTip();