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()]; const bodyPolygon = [...leftSidePoints, ...rightSidePoints.reverse()];
if (protrusionData == null) { if (protrusionData == null) {
let polygonCoords;
if (style === BOTH_SIDES) { if (style === BOTH_SIDES) {
const polygonCoords = [ polygonCoords = [
...bodyPolygonLeft, ...bodyPolygonLeft,
...bodyPolygonRight, ...bodyPolygonRight,
bodyPolygonLeft[0] bodyPolygonLeft[0]
]; ];
return turf.polygon([[...polygonCoords]]);
} else { } else {
const polygonCoords = [ polygonCoords = [
...bodyPolygon, ...bodyPolygon,
bodyPolygon[0] bodyPolygon[0]
]; ];
return turf.polygon([[...polygonCoords]]);
} }
const resultPolygon = turf.polygon([polygonCoords]);
return resultPolygon;
} }
const polygonCoordsLeft= [ const polygonCoordsLeft= [
...bodyPolygonLeft, ...bodyPolygonLeft,
bodyPolygonLeft[0] bodyPolygonLeft[0]
@ -81,58 +85,45 @@ export function getFrontline(frontlineData, protrusionData = null) {
if (style === LEFT_SIDE) { if (style === LEFT_SIDE) {
let mainPoly = turf.polygon([[...polygonCoords]]); let mainPoly = turf.polygon([[...polygonCoords]]);
const protrusions = computeProtrusion(leftSidePoints, protrusionData, frontlineData.offsetDistance); const finalPoly = constructProstrusions(mainPoly, leftSidePoints, protrusionData, frontlineData);
for(let i = 0; i <= protrusions.length -1 ; i++)
{
let additionalPoly = protrusions[i];
mainPoly = turf.union(turf.featureCollection([mainPoly, additionalPoly]));
}
return { return {
rightPoly: null, rightPoly: null,
leftPoly: mainPoly, leftPoly: finalPoly,
}; };
} else if (style === RIGHT_SIDE) { } else if (style === RIGHT_SIDE) {
let mainPoly = turf.polygon([[...polygonCoords]]); 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 { return {
rightPoly: mainPoly, rightPoly: finalPoly,
leftPoly: null, leftPoly: null,
}; };
} else if (style === BOTH_SIDES) { } else if (style === BOTH_SIDES) {
let mainPoly = turf.polygon([[...polygonCoordsRight]]); 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 { return {
rightPoly: mainPoly, rightPoly: finalPoly,
leftPoly: mainPolyLeft, 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) { function computeSplinePoints(points, density) {
if (points.length < 2) return points; if (points.length < 2) return points;
const splinePoints = []; 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 { getArrowPolygon } from "athena-utils/shape/Arrow.js"; import { getArrowPolygon } from "./Arrow.js";
import { ARROW_BODY_STYLE_CONSTANT, ARROW_BODY_STYLE_LINEAR, ARROW_BODY_STYLE_EXPONENTIAL } from "athena-utils/shape/Arrow.js"; import { ARROW_BODY_STYLE_CONSTANT, ARROW_BODY_STYLE_LINEAR, ARROW_BODY_STYLE_EXPONENTIAL } from "./Arrow.js";
import { getCirclePolygon } from "athena-utils/shape/BasicShapes.js"; import { getCirclePolygon } from "./BasicShapes.js";
import { getRectanglePolygon } from "athena-utils/shape/BasicShapes.js"; import { getRectanglePolygon } from "./BasicShapes.js";
import { getFrontline } from "athena-utils/shape/Frontline.js"; import { getFrontline } from "./Frontline.js";
import { LEFT_SIDE, RIGHT_SIDE, BOTH_SIDES } from "athena-utils/shape/Frontline.js"; import { LEFT_SIDE, RIGHT_SIDE, BOTH_SIDES } from "./Frontline.js";
mapboxgl.accessToken = 'pk.eyJ1Ijoib3V0ZG9vcm1hcHBpbmdjb21wYW55IiwiYSI6ImNqYmh3cDdjYzNsMnozNGxsYzlvMmk2bTYifQ.QqcZ4LVoLWnXafXdjZxnZg'; mapboxgl.accessToken = 'pk.eyJ1Ijoib3V0ZG9vcm1hcHBpbmdjb21wYW55IiwiYSI6ImNqYmh3cDdjYzNsMnozNGxsYzlvMmk2bTYifQ.QqcZ4LVoLWnXafXdjZxnZg';
const map = new mapboxgl.Map({ const map = new mapboxgl.Map({