Update spline corridor junction mesh tests, adding seam resolution validation and refining mesh assertions
This commit is contained in:
@@ -9,7 +9,8 @@ import {
|
|||||||
} from "../../src/geometry/spline-corridor-junction-footprint";
|
} from "../../src/geometry/spline-corridor-junction-footprint";
|
||||||
import {
|
import {
|
||||||
buildSplineCorridorJunctionEdgeMeshData,
|
buildSplineCorridorJunctionEdgeMeshData,
|
||||||
buildSplineCorridorJunctionMeshGeometry
|
buildSplineCorridorJunctionMeshGeometry,
|
||||||
|
resolveSplineCorridorJunctionRoadEdgeSeams
|
||||||
} from "../../src/geometry/spline-corridor-junction-mesh";
|
} from "../../src/geometry/spline-corridor-junction-mesh";
|
||||||
|
|
||||||
function createRoadPath(
|
function createRoadPath(
|
||||||
@@ -215,8 +216,8 @@ describe("spline corridor junction mesh generation", () => {
|
|||||||
expect(roadMouthSegmentCount).toBe(4);
|
expect(roadMouthSegmentCount).toBe(4);
|
||||||
expect(meshData?.footprintPointCount).toBe(8);
|
expect(meshData?.footprintPointCount).toBe(8);
|
||||||
expect(meshData?.profileVertexCount).toBe(4);
|
expect(meshData?.profileVertexCount).toBe(4);
|
||||||
expect(meshData?.positions).toHaveLength(16 * 4 * 3);
|
expect(meshData?.positions).toHaveLength(8 * 4 * 3);
|
||||||
expect(meshData?.indices).toHaveLength(4 * 3 * 3 * 6);
|
expect(meshData?.indices).toHaveLength(4 * 3 * 6 + 8 * 2 * 3);
|
||||||
const firstProfile = Array.from(meshData!.positions.slice(0, 12));
|
const firstProfile = Array.from(meshData!.positions.slice(0, 12));
|
||||||
const firstProfileWidth = Math.hypot(
|
const firstProfileWidth = Math.hypot(
|
||||||
firstProfile[6]! - firstProfile[3]!,
|
firstProfile[6]! - firstProfile[3]!,
|
||||||
@@ -227,7 +228,7 @@ describe("spline corridor junction mesh generation", () => {
|
|||||||
(_, index) => Array.from(meshData!.positions.slice(index * 12, index * 12 + 12))
|
(_, index) => Array.from(meshData!.positions.slice(index * 12, index * 12 + 12))
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(firstProfileWidth).toBeCloseTo(0.4, 5);
|
expect(firstProfileWidth).toBeGreaterThan(0.4);
|
||||||
expect(profileRows).toEqual(
|
expect(profileRows).toEqual(
|
||||||
expect.arrayContaining([
|
expect.arrayContaining([
|
||||||
[
|
[
|
||||||
@@ -237,10 +238,10 @@ describe("spline corridor junction mesh generation", () => {
|
|||||||
3,
|
3,
|
||||||
expect.closeTo(0.3, 5),
|
expect.closeTo(0.3, 5),
|
||||||
-1,
|
-1,
|
||||||
3,
|
expect.closeTo(2.8343145, 5),
|
||||||
expect.closeTo(0.3, 5),
|
expect.closeTo(0.3, 5),
|
||||||
expect.closeTo(-1.4, 5),
|
expect.closeTo(-1.4, 5),
|
||||||
3,
|
expect.closeTo(2.8343145, 5),
|
||||||
expect.closeTo(0.1, 5),
|
expect.closeTo(0.1, 5),
|
||||||
expect.closeTo(-1.4, 5)
|
expect.closeTo(-1.4, 5)
|
||||||
],
|
],
|
||||||
@@ -260,6 +261,35 @@ describe("spline corridor junction mesh generation", () => {
|
|||||||
]
|
]
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const seamsByPath = resolveSplineCorridorJunctionRoadEdgeSeams({
|
||||||
|
junctions: [junction],
|
||||||
|
paths: [pathA, pathB]
|
||||||
|
});
|
||||||
|
const pathASeams = seamsByPath.get(pathA.id) ?? [];
|
||||||
|
|
||||||
|
expect(pathASeams).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.objectContaining({
|
||||||
|
pathId: pathA.id,
|
||||||
|
side: "left",
|
||||||
|
distance: 3,
|
||||||
|
outerOffset: {
|
||||||
|
x: expect.closeTo(-0.1656854, 5),
|
||||||
|
z: expect.closeTo(0.4, 5)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
expect.objectContaining({
|
||||||
|
pathId: pathA.id,
|
||||||
|
side: "right",
|
||||||
|
distance: 3,
|
||||||
|
outerOffset: {
|
||||||
|
x: expect.closeTo(-0.1656854, 5),
|
||||||
|
z: expect.closeTo(-0.4, 5)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
])
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("samples full terrain influence inside the connection footprint and falloff outside it", () => {
|
it("samples full terrain influence inside the connection footprint and falloff outside it", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user