From 7e7cb3ae851d800239c8a4c5a7be2ba2874be1ab Mon Sep 17 00:00:00 2001 From: Tomas Richtar Date: Sat, 14 Jun 2025 11:22:33 +0200 Subject: [PATCH] First part of PR fixes --- Frontline.js | 67 ++++++++++++++++++++++---------------------------- MapPolygons.js | 12 ++++----- 2 files changed, 35 insertions(+), 44 deletions(-) diff --git a/Frontline.js b/Frontline.js index c4e71bf..c00567d 100644 --- a/Frontline.js +++ b/Frontline.js @@ -49,21 +49,25 @@ export function getFrontline(frontlineData, protrusionData = null) { const bodyPolygon = [...leftSidePoints, ...rightSidePoints.reverse()]; if (protrusionData == null) { + let polygonCoords; + if (style === BOTH_SIDES) { - const polygonCoords = [ + polygonCoords = [ ...bodyPolygonLeft, ...bodyPolygonRight, bodyPolygonLeft[0] ]; - return turf.polygon([[...polygonCoords]]); } else { - const polygonCoords = [ + polygonCoords = [ ...bodyPolygon, bodyPolygon[0] ]; - return turf.polygon([[...polygonCoords]]); } + + const resultPolygon = turf.polygon([polygonCoords]); + return resultPolygon; } + const polygonCoordsLeft= [ ...bodyPolygonLeft, bodyPolygonLeft[0] @@ -81,58 +85,45 @@ export function getFrontline(frontlineData, protrusionData = null) { if (style === LEFT_SIDE) { let mainPoly = turf.polygon([[...polygonCoords]]); - const protrusions = computeProtrusion(leftSidePoints, protrusionData, frontlineData.offsetDistance); - - for(let i = 0; i <= protrusions.length -1 ; i++) - { - let additionalPoly = protrusions[i]; - mainPoly = turf.union(turf.featureCollection([mainPoly, additionalPoly])); - } + const finalPoly = constructProstrusions(mainPoly, leftSidePoints, protrusionData, frontlineData); return { rightPoly: null, - leftPoly: mainPoly, + leftPoly: finalPoly, }; } else if (style === RIGHT_SIDE) { let mainPoly = turf.polygon([[...polygonCoords]]); - const protrusions = computeProtrusion(rightSidePoints, protrusionData, frontlineData.offsetDistance); + const finalPoly = constructProstrusions(mainPoly, rightSidePoints, protrusionData, frontlineData); - for(let i = 0; i <= protrusions.length -1 ; i++) - { - let additionalPoly = protrusions[i]; - mainPoly = turf.union(turf.featureCollection([mainPoly, additionalPoly])); - } - return { - rightPoly: mainPoly, + rightPoly: finalPoly, leftPoly: null, }; } else if (style === BOTH_SIDES) { let mainPoly = turf.polygon([[...polygonCoordsRight]]); - const protrusions = computeProtrusion(rightSidePoints, protrusionData, frontlineData.offsetDistance); + const finalPoly = constructProstrusions(mainPoly, rightSidePoints, protrusionData, frontlineData); + let secondaryPoly = turf.polygon([[...polygonCoordsLeft]]); + const secondaryfinalPoly = constructProstrusions(secondaryPoly, leftSidePoints, protrusionData, frontlineData); - for(let i = 0; i <= protrusions.length -1 ; i++) - { - let additionalPoly = protrusions[i]; - mainPoly = turf.union(turf.featureCollection([mainPoly, additionalPoly])); - } - - let mainPolyLeft = turf.polygon([[...polygonCoordsLeft]]); - const protrusionsLeft = computeProtrusion(leftSidePoints, protrusionData, frontlineData.offsetDistance); - - for(let i = 0; i <= protrusionsLeft.length -1 ; i++) - { - let additionalPoly = protrusionsLeft[i]; - mainPolyLeft = turf.union(turf.featureCollection([mainPolyLeft, additionalPoly])); - } - return { - rightPoly: mainPoly, - leftPoly: mainPolyLeft, + rightPoly: finalPoly, + leftPoly: secondaryfinalPoly, }; } } +function constructProstrusions(mainPoly, points, protrusionData, frontlineData) { + + const protrusions = computeProtrusion(points, protrusionData, frontlineData.offsetDistance); + + for(let i = 0; i <= protrusions.length -1 ; i++) + { + mainPoly = turf.union(turf.featureCollection([mainPoly, protrusions[i]])); + } + + return mainPoly; +} + function computeSplinePoints(points, density) { if (points.length < 2) return points; const splinePoints = []; diff --git a/MapPolygons.js b/MapPolygons.js index 37d53ea..2029d75 100644 --- a/MapPolygons.js +++ b/MapPolygons.js @@ -1,10 +1,10 @@ //import { getArrowPolygon } from "athena-utils/shape/Arrow.js"; -import { getArrowPolygon } from "athena-utils/shape/Arrow.js"; -import { ARROW_BODY_STYLE_CONSTANT, ARROW_BODY_STYLE_LINEAR, ARROW_BODY_STYLE_EXPONENTIAL } from "athena-utils/shape/Arrow.js"; -import { getCirclePolygon } from "athena-utils/shape/BasicShapes.js"; -import { getRectanglePolygon } from "athena-utils/shape/BasicShapes.js"; -import { getFrontline } from "athena-utils/shape/Frontline.js"; -import { LEFT_SIDE, RIGHT_SIDE, BOTH_SIDES } from "athena-utils/shape/Frontline.js"; +import { getArrowPolygon } from "./Arrow.js"; +import { ARROW_BODY_STYLE_CONSTANT, ARROW_BODY_STYLE_LINEAR, ARROW_BODY_STYLE_EXPONENTIAL } from "./Arrow.js"; +import { getCirclePolygon } from "./BasicShapes.js"; +import { getRectanglePolygon } from "./BasicShapes.js"; +import { getFrontline } from "./Frontline.js"; +import { LEFT_SIDE, RIGHT_SIDE, BOTH_SIDES } from "./Frontline.js"; mapboxgl.accessToken = 'pk.eyJ1Ijoib3V0ZG9vcm1hcHBpbmdjb21wYW55IiwiYSI6ImNqYmh3cDdjYzNsMnozNGxsYzlvMmk2bTYifQ.QqcZ4LVoLWnXafXdjZxnZg'; const map = new mapboxgl.Map({