Bauteile Gruppe A (4-6): Treppe-Referenz, Fenster-Fluegel, Tuer-wandoeffnung

- Treppe referenz links/mitte/rechts (Stair.referenz, Default mitte): Perp-Versatz
  referenzMidShift auf start/center, Lauflinie/Pfeil bleiben visuell zentriert.
- Fenster Fluegel-Mittelpfosten (Opening.wingCount 1-4, Default 1): wingCount-1
  Querlinien im Rahmen (window-mullion), nur mittel/fein.
- Tuer-Typ wandoeffnung (Opening.doorType, Default normal): ueberspringt
  Tuerblatt + Schwenkbogen, Laibung/Sturz bleiben.
- Alle Modellfelder optional/rueckwaertskompatibel. 17 neue Tests.
  vitest 292/292, tsc sauber.
This commit is contained in:
2026-07-05 02:33:48 +02:00
parent 6e5998ce72
commit 26fbd11b73
6 changed files with 361 additions and 31 deletions
+29
View File
@@ -731,6 +731,22 @@ export interface Opening {
height: number;
/** Brüstungshöhe (Unterkante der Öffnung) über der Wand-UK; 0 bei Türen. */
sillHeight: number;
/**
* Nur Fenster: Anzahl der Flügel (14). Bei > 1 werden im Plan `wingCount 1`
* Mittelpfosten (Querlinien quer zur Öffnungsrichtung) gleichmäßig innerhalb des
* Rahmens gezeichnet — analog den Mittelpfosten in `_make_oeffnung_pieces` des
* Rhino-Plugins (`oeff_fluegel`). Fehlt es, gilt 1 (= heutiges Verhalten: keine
* Pfosten).
*/
wingCount?: number;
/**
* Nur Tür: Tür-Typ (analog `oeff_tuer_typ` im Rhino-Plugin).
* • "normal" — Türblatt + Schwenkbogen (Default = heutiges Verhalten).
* • "wandoeffnung" — reiner Wanddurchbruch: KEIN Türblatt, KEIN Schwenkbogen;
* nur die Öffnung/Laibung (Wandlücke + ggf. Sturz-/Anschlaglinien) bleibt.
* Fehlt es, gilt "normal".
*/
doorType?: "normal" | "wandoeffnung";
/** Nur Tür: an welchem Pfosten das Scharnier sitzt. */
hinge?: "start" | "end";
/** Nur Tür: auf welche Seite der Wandachse das Blatt aufschlägt. */
@@ -814,6 +830,19 @@ export interface Stair {
sweep?: number;
/** Laufbreite in Metern (quer zur Laufrichtung). */
width: number;
/**
* Lage der gespeicherten Achse (`start`/`dir` bzw. Wendel-Bogen) über die
* Laufbreite — analog `treppe_referenz` im Rhino-Plugin. Bestimmt, ob die Achse
* die LINKE, MITTLERE oder RECHTE Kante der Treppe repräsentiert (in
* Laufrichtung gesehen). Fehlt sie, gilt "mitte" (= heutiges Verhalten: Achse =
* Treppen-Mitte).
* • "links" — Achse = linke Kante; die Treppe liegt rechts der Achse.
* • "mitte" — Achse = Mitte (Default).
* • "rechts" — Achse = rechte Kante; die Treppe liegt links der Achse.
* Die Lauflinie samt Pfeil bleibt IMMER auf der visuellen Treppen-Mitte
* (nicht auf der Referenzkante) — siehe `stairGeometry`.
*/
referenz?: "links" | "mitte" | "rechts";
/**
* Gesamt-Steighöhe in Metern (OKFF → OKFF nächstes Geschoss). Fehlt sie, gilt
* beim Auflösen die Geschosshöhe des zugehörigen Geschosses.