From f8b7dc41520c89c09c18cf808d22340e7e46e74c Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 12 May 2026 23:56:36 +0200 Subject: [PATCH] Add support for managing path road meshes in ViewportHost --- src/viewport-three/viewport-host.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index cb3e2524..df8eaee3 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -7791,6 +7791,12 @@ export class ViewportHost { } } + private addPathRoadMeshes(roadMeshes: PathRenderObjects["roadMeshes"]) { + for (const roadMesh of roadMeshes) { + this.pathGroup.add(roadMesh); + } + } + private disposePathSegmentMeshes(segments: PathRenderObjects["segments"]) { for (const segment of segments) { this.pathGroup.remove(segment.outlineMesh); @@ -7802,6 +7808,14 @@ export class ViewportHost { } } + private disposePathRoadMeshes(roadMeshes: PathRenderObjects["roadMeshes"]) { + for (const roadMesh of roadMeshes) { + this.pathGroup.remove(roadMesh); + roadMesh.geometry.dispose(); + roadMesh.material.dispose(); + } + } + private rebuildPaths(document: SceneDocument, selection: EditorSelection) { this.clearPaths(); @@ -7814,6 +7828,7 @@ export class ViewportHost { } const renderObjects = this.createPathRenderObjects(path, selection); + this.addPathRoadMeshes(renderObjects.roadMeshes); this.pathGroup.add(renderObjects.line); this.addPathSegmentMeshes(renderObjects.segments); for (const pointMesh of renderObjects.pointMeshes) { @@ -7845,6 +7860,7 @@ export class ViewportHost { line.renderOrder = PATH_RENDER_ORDER + 1; line.userData.pathId = path.id; + const roadMeshes = this.createPathRoadPreviewMeshes(path); const segments = this.createPathSegmentMeshes(path); const resolvedPointPositions = this.createResolvedPathPointPositionMap(path); @@ -7891,6 +7907,7 @@ export class ViewportHost { return { line, + roadMeshes, segments, pointMeshes }; @@ -7900,6 +7917,7 @@ export class ViewportHost { this.pathGroup.remove(renderObjects.line); renderObjects.line.geometry.dispose(); renderObjects.line.material.dispose(); + this.disposePathRoadMeshes(renderObjects.roadMeshes); this.disposePathSegmentMeshes(renderObjects.segments); for (const pointMesh of renderObjects.pointMeshes) { @@ -7937,6 +7955,7 @@ export class ViewportHost { path, this.currentSelection ); + this.addPathRoadMeshes(renderObjects.roadMeshes); this.pathGroup.add(renderObjects.line); this.addPathSegmentMeshes(renderObjects.segments); for (const pointMesh of renderObjects.pointMeshes) { @@ -7962,6 +7981,9 @@ export class ViewportHost { renderObjects.line.geometry.dispose(); renderObjects.line.geometry = this.createPathLineGeometry(path); + this.disposePathRoadMeshes(renderObjects.roadMeshes); + renderObjects.roadMeshes = this.createPathRoadPreviewMeshes(path); + this.addPathRoadMeshes(renderObjects.roadMeshes); this.disposePathSegmentMeshes(renderObjects.segments); renderObjects.segments = this.createPathSegmentMeshes(path); this.addPathSegmentMeshes(renderObjects.segments);