Nordstern-3D: Auswahl-Highlight (orange Outline, immer sichtbar)

Ein selektiertes Bauteil wird jetzt im 3D-Viewport mit einer orangen
Umrisslinie markiert, die dank No-Depth-Pipeline auch hinter Wänden
durchscheint (klare Selektions-Rückmeldung). Zusammen mit Objekt-Info
(numerisch) und Attribute-Panel ist die 3D-Auswahl damit vollständig.

- Engine: set_highlight_lines(vertices) + highlight_pipeline
  (LineList, depth_compare Always, kein Depth-Write), als letzter
  Draw-Call obenauf. Reuse der Grid-Linien-Infrastruktur.
- TS: selectionHighlightLines() baut die Quader-/Prisma-Kanten der
  Auswahl in Akzentfarbe; App berechnet sie per useMemo aus der
  Store-Auswahl und reicht sie durch.
This commit is contained in:
2026-07-04 06:26:29 +02:00
parent 16d32223a4
commit e137353b95
8 changed files with 358 additions and 35 deletions
+12
View File
@@ -366,6 +366,18 @@ impl WebModelRenderer {
Ok(())
}
/// Setzt/loescht die Auswahl-Highlight-Linien (Umriss/Kanten des selektierten
/// Bauteils). `vertices` = interleaved LineList-Vertices
/// `[px,py,pz, r,g,b, ...]` (world-Meter, je 2 Vertices = 1 Segment) — exakt
/// dasselbe Format wie die Grid-/Edge-Vertices. Ein leeres Slice loescht das
/// Highlight (nichts wird gezeichnet). Die Linien liegen im Render-Pass ohne
/// Tiefentest immer sichtbar obenauf (scheinen auch hinter Waenden durch).
/// Wirkt erst beim naechsten `render`.
pub fn set_highlight_lines(&mut self, vertices: &[f32]) -> Result<(), JsValue> {
self.renderer.set_highlight_lines(&self.device, vertices);
Ok(())
}
/// Surface an eine neue Pixelgroesse anpassen (DPR beachtet der Aufrufer).
pub fn resize(&mut self, width: u32, height: u32) {
let (w, h) = (width.max(1), height.max(1));