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(