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:
2026-07-04 05:54:16 +02:00
parent 7c02ea0498
commit 85a721f03b
12 changed files with 567 additions and 21 deletions
+16 -2
View File
@@ -115,17 +115,31 @@ const WASM_ENGINE_ACTIVE: boolean = (() => {
* nutzt vorerst nur das Projekt (Massenmodell + Orbit); alle weiteren Props
* (Auswahl, Render-Modi, Editier-Griffe) wirken nur im three.js-Pfad.
*/
export function Viewport3D(props: Parameters<typeof ThreeViewport3D>[0]) {
export function Viewport3D(
props: Parameters<typeof ThreeViewport3D>[0] & {
/** Boden-Referenzraster ein-/ausblenden — wirkt NUR im WASM-Pfad (der
* Overlay-Umschalter sitzt im Wasm3DViewport selbst); die three.js-Sicht
* zeigt ihr Raster unveraendert immer (kein Toggle dort). */
gridVisible?: boolean;
/** Klick auf den Grid-Umschalter-Button im WASM-Viewport — Single Source
* of Truth bleibt der Aufrufer (App/viewSlice `grid3dVisible`). */
onToggleGrid?: () => void;
},
) {
const { gridVisible, onToggleGrid, ...threeProps } = props;
if (WASM_ENGINE_ACTIVE) {
return (
<Wasm3DViewport
project={props.project}
view3d={props.view3d}
renderMode={props.renderMode}
gridVisible={gridVisible}
groundElevation={props.gridElevation}
onToggleGrid={onToggleGrid}
/>
);
}
return <ThreeViewport3D {...props} />;
return <ThreeViewport3D {...threeProps} />;
}
function ThreeViewport3D({