First part of PR fixes

This commit is contained in:
Tomas Richtar 2025-06-14 11:22:33 +02:00
parent 18bcab0a38
commit 7e7cb3ae85
2 changed files with 35 additions and 44 deletions

View File

@ -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 = [];

View File

@ -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({