From bc279dd360961331689bc6cd32a07b836a8c25a6 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 1 Sep 2026 14:52:15 +0900 Subject: [PATCH] =?UTF-8?q?fix(B04):=203D=20=EC=B9=B4=EB=A9=94=EB=9D=BC=20?= =?UTF-8?q?=EB=A7=9E=EC=B6=A4=EC=97=90=20=EA=B3=84=ED=9A=8D=EB=85=B8?= =?UTF-8?q?=EC=84=A0=EC=9D=84=20=ED=8F=AC=ED=95=A8=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 계획노선은 최고 표고 평면에 있어 지형 상자 위로 걸친다. 지형만 보고 카메라를 맞추면 노선이 프레임 밖으로 밀려 보이지 않는다. Co-Authored-By: Claude Opus 5 (1M context) --- B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts b/B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts index 2369e528..39819486 100644 --- a/B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts +++ b/B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts @@ -417,10 +417,15 @@ export function createSurfaceTerrainViewer(): SurfaceTerrainViewer { routeGroup.add( new THREE.Line(new THREE.BufferGeometry().setFromPoints(vertices), material), ); + // 노선은 지형 로딩과 따로 도착한다. 지형이 이미 떠 있으면 노선까지 담도록 다시 맞춘다. + if (terrainMesh) fitCamera(terrainMesh); } const getFitParams = (object: THREE.Object3D) => { const box = new THREE.Box3().setFromObject(object); + // 계획노선은 최고 표고 평면에 있어 지형 상자 위·밖으로 걸친다. 지형만 보고 맞추면 + // 노선이 화면 밖으로 밀려 보이지 않는다 — 프레임에 같이 넣는다. + if (routeGroup.children.length > 0) box.expandByObject(routeGroup); const center = box.getCenter(new THREE.Vector3()); const size = box.getSize(new THREE.Vector3()); const span = Math.max(size.x, size.y, size.z, 1);