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 d0b94a75ec
commit d4065c5a41
12 changed files with 567 additions and 21 deletions
+14
View File
@@ -269,6 +269,10 @@ export default function App() {
const setView3d = useStore((s) => s.setView3d);
const fov = useStore((s) => s.fov);
const setFov = useStore((s) => s.setFov);
// Boden-Referenzraster im 3D-Viewport (wirkt nur im WASM/Nordstern-Pfad,
// s. Wasm3DViewport.tsx) — Umschalter sitzt als Overlay-Button im Viewport.
const grid3dVisible = useStore((s) => s.grid3dVisible);
const setGrid3dVisible = useStore((s) => s.setGrid3dVisible);
const planColorMode = useStore((s) => s.planColorMode);
const setPlanColorMode = useStore((s) => s.setPlanColorMode);
const referenceLines = useStore((s) => s.referenceLines);
@@ -3104,6 +3108,8 @@ export default function App() {
renderMode={renderMode}
view3d={view3d}
fov={fov}
grid3dVisible={grid3dVisible}
onToggleGrid3d={() => setGrid3dVisible(!grid3dVisible)}
mono={planColorMode === "mono"}
drawings={drawings}
onSelectLevel={setActiveLevelId}
@@ -4065,6 +4071,8 @@ function Content({
renderMode,
view3d,
fov,
grid3dVisible,
onToggleGrid3d,
mono,
drawings,
onSelectLevel,
@@ -4126,6 +4134,10 @@ function Content({
view3d: View3d;
/** Sichtwinkel der 3D-Perspektivkamera in Grad. */
fov: number;
/** Boden-Referenzraster im 3D-Viewport sichtbar (wirkt nur im WASM-Pfad). */
grid3dVisible: boolean;
/** Klick auf den Grid-Umschalter-Button im 3D-Viewport (WASM-Pfad). */
onToggleGrid3d: () => void;
/** Grundriss in Schwarz-Weiss (mono) statt mit Kategorie-/Element-Farben. */
mono: boolean;
/** Dokument-Tabs der Kopfzeile — ein Tab je Geschoss-Grundriss. */
@@ -4310,6 +4322,8 @@ function Content({
view3d={view3d}
fov={fov}
gridElevation={level.baseElevation ?? 0}
gridVisible={grid3dVisible}
onToggleGrid={onToggleGrid3d}
onSelectWall={onViewportSelectWall}
onSelectCeiling={onViewportSelectCeiling}
onSelectOpening={onViewportSelectOpening}