Nordstern-3D: Boden-Referenzraster + bessere Kamera-Steuerung
- Boden-Grid-Fläche auf y = baseElevation des aktiven Geschosses, ein-/ausschaltbar (Overlay-Button im Viewport, State in viewSlice grid3dVisible). Eigene LineList-Pipeline in der Engine (grid.rs, GRID_WGSL, geteilte View-Projection/Depth mit der Mesh-Pipeline), neue set_ground_grid(visible, elevation, extent, spacing)-Methode. Minor-Linien dezent, jede 5. als Major betont. - Kamera-Steuerung überarbeitet (vorher nur Mitte=Orbit, Pan auf Shift+Mitte versteckt): Links=Orbit, Mitte/Rechts=Pan (bewegen), Rad=Zoom zum Cursor. Laptop-freundlich, konsistent mit der 2D-Plan-Navigation (dort Mitte=Pan).
This commit is contained in:
@@ -39,6 +39,17 @@ interface WebModelRendererLike {
|
||||
set_model(json: string): void;
|
||||
set_render_mode_white(white: boolean): void;
|
||||
set_view_preset(preset: string): void;
|
||||
/** Boden-Referenzraster in der Welt-XZ-Ebene ein-/ausblenden (Rust-seitig,
|
||||
* `web::set_ground_grid`). `visible=false` zeichnet kein Raster; sonst ein
|
||||
* Quadrat der Kantenlaenge `extent_m` (zentriert um den Ursprung, XZ) auf
|
||||
* Hoehe `elevation_m` (world-Y) mit Linienabstand `spacing_m`. Wirkt erst
|
||||
* beim naechsten `render`. */
|
||||
set_ground_grid(
|
||||
visible: boolean,
|
||||
elevation_m: number,
|
||||
extent_m: number,
|
||||
spacing_m: number,
|
||||
): void;
|
||||
set_camera(
|
||||
eyeX: number,
|
||||
eyeY: number,
|
||||
@@ -145,6 +156,25 @@ export function useWasm3dRenderer(
|
||||
}
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* Boden-Referenzraster ein-/ausblenden (Overlay-Umschalter im Viewport,
|
||||
* s. Wasm3DViewport.tsx). `elevationM` = OKFF des aktiven Geschosses
|
||||
* (`baseElevation`), `extentM`/`spacingM` = Kantenlaenge/Linienabstand des
|
||||
* Quadrats in Metern. Wirkt erst beim naechsten `render`.
|
||||
*/
|
||||
const setGroundGrid = useCallback(
|
||||
(visible: boolean, elevationM: number, extentM: number, spacingM: number) => {
|
||||
const r = rendererRef.current;
|
||||
if (!r) return;
|
||||
try {
|
||||
r.set_ground_grid(visible, elevationM, extentM, spacingM);
|
||||
} catch (e) {
|
||||
console.warn("render3d set_ground_grid fehlgeschlagen:", e);
|
||||
}
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
/**
|
||||
* Kamera-Praeset anwenden (`front`/`top`/`side`/`iso`/`perspective`, wie
|
||||
* `View3d` in TopBar.tsx). Delegiert die formatfuellende Ziel-/Distanz-
|
||||
@@ -209,5 +239,13 @@ export function useWasm3dRenderer(
|
||||
[canvasRef],
|
||||
);
|
||||
|
||||
return { render, updateModel, setWhiteMode, applyViewPreset, ready, failed };
|
||||
return {
|
||||
render,
|
||||
updateModel,
|
||||
setWhiteMode,
|
||||
applyViewPreset,
|
||||
setGroundGrid,
|
||||
ready,
|
||||
failed,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user