Skip to content

Commit

Permalink
Added utils in aligment
Browse files Browse the repository at this point in the history
  • Loading branch information
SigveBergslien committed Dec 13, 2024
1 parent 756c8d7 commit d7bec36
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions src/features/alignment/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { Alignment, HorizontalAlignment } from "@novorender/api";
import { ReadonlyVec2, ReadonlyVec3, vec2, vec3 } from "gl-matrix";

import { closestPointOnLine } from "utils/math";

export type ClosestPointToAlignment = {
alignment: string;
distance: number;
projectedPoint: ReadonlyVec3;
id: number;
};

export function updateClosestPoint(
pos: ReadonlyVec2,
currentClosest: ClosestPointToAlignment | undefined,
alignmentName: string,
alignment: HorizontalAlignment,
alignmentData: Alignment,
) {
for (const part of alignment.segment.parts) {
const vertices = part.vertices2D;
if (vertices) {
for (let i = 1; i < vertices.length; ++i) {
if (vec2.equals(vertices[i - 1], vertices[i])) {
continue;
}
const projection = closestPointOnLine(vec2.create(), pos, vertices[i - 1], vertices[i]);
const dist = vec2.dist(projection.point, pos);
if (currentClosest === undefined || dist < currentClosest.distance) {
currentClosest = {
distance: dist,
alignment: alignmentName,
id: alignmentData.objectId,
projectedPoint: vec3.lerp(
vec3.create(),
part.vertices3D[i - 1],
part.vertices3D[i],
projection.parameter,
),
};
}
}
}
}
return currentClosest;
}

export function getStationCross(directionVertices?: ReadonlyVec2[]) {
if (directionVertices && directionVertices.length == 2) {
const dir = vec2.sub(vec2.create(), directionVertices[0], directionVertices[1]);
const side = vec2.fromValues(-dir[1], dir[0]);
vec2.normalize(side, side);

return {
line: [
vec2.scaleAndAdd(vec2.create(), directionVertices[0], side, 30),
vec2.scaleAndAdd(vec2.create(), directionVertices[0], side, -30),
] as [ReadonlyVec2, ReadonlyVec2],
side,
};
}
}

0 comments on commit d7bec36

Please sign in to comment.