From 462b71e896df07bc336bee08d87d9ee0dc37d1e8 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 30 Aug 2026 14:38:24 +0900 Subject: [PATCH] =?UTF-8?q?fix(B04):=20=EB=8F=84=EC=97=BD=20=EC=84=9C?= =?UTF-8?q?=ED=94=BC=EC=8A=A4=20npz=EC=97=90=20bounds=EB=A5=BC=20=EB=84=A3?= =?UTF-8?q?=EC=96=B4=20=EB=93=B1=EA=B3=A0=EC=84=A0=EA=B3=BC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=20=EC=9B=90=EC=A0=90=EC=9D=84=20=EB=A7=9E=EC=B6=98?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dtm_sheet.npz에 bounds가 없어 등고선 API가 LAS structured.npz bounds로 폴백했고, 메시(glb)는 sheet 격자 중심으로 만들어져 등고선이 X -7.1m, Y +3.4m, Z +3.3m 떠 보였다. LAS 없는 프로젝트면 등고선 생성 자체가 실패한다. glb와 같은 bounds(3x2)를 npz에 저장해 두 산출물이 같은 원점을 공유한다. Co-Authored-By: Claude Opus 5 (1M context) --- .../B04_PreProcess_Engine_SheetSurface.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/B04_PreProcess/B04_PreProcess_Engine_SheetSurface.py b/B04_PreProcess/B04_PreProcess_Engine_SheetSurface.py index e9c13960..a5f57920 100644 --- a/B04_PreProcess/B04_PreProcess_Engine_SheetSurface.py +++ b/B04_PreProcess/B04_PreProcess_Engine_SheetSurface.py @@ -144,17 +144,9 @@ def build_sheet_surface_model( stem = f"dtm_{SHEET_SOURCE_FILTER}" model_path = models_dir / f"{stem}.npz" preview_path = models_dir / f"{stem}_preview.glb" - atomic_npz( - model_path, - x=x_coords, - y=y_coords, - z=z_grid, - valid_mask=valid_grid, - resolution=np.array([SHEET_SURFACE_GRID_M], np.float32), - ) - - vertices, faces = _preview_mesh(x_coords, y_coords, z_grid, valid_grid) finite_z = z_grid[valid_grid] + # bounds를 npz에 같이 넣는다 — 등고선 API가 이 값을 화면 원점으로 쓴다. 없으면 + # LAS structured.npz로 폴백해 메시(glb) 원점과 어긋난다(LAS 없는 설계는 아예 실패). bounds = np.array( [ [x_coords[0], x_coords[-1]], @@ -162,6 +154,17 @@ def build_sheet_surface_model( [float(finite_z.min()), float(finite_z.max())], ] ) + atomic_npz( + model_path, + x=x_coords, + y=y_coords, + z=z_grid, + valid_mask=valid_grid, + bounds=bounds, + resolution=np.array([SHEET_SURFACE_GRID_M], np.float32), + ) + + vertices, faces = _preview_mesh(x_coords, y_coords, z_grid, valid_grid) write_glb(preview_path, vertices, faces, bounds) logger.info(