Fenster-Rahmentiefe: realistischer Default statt volle Wanddicke

Recherche zu Vectorworks/ArchiCAD/realem Fensterbau ergab: ein Rahmen ohne
explizite frameDepth füllte bisher die GESAMTE Wanddicke — echte Fenster sind
unabhängig von der Wanddicke nur ~70-90mm tief und sitzen mit sichtbarer
Laibung/Leibung in der Öffnung, statt als massiver Block über die volle Tiefe.
Neuer Default 70mm (2D-Grundriss und 3D konsistent), Glas-Falzmass von 3cm auf
2cm reduziert und Mehrfachverglasungs-Scheibendicke/-abstand kompakter, damit
Dreifachverglasung noch in den schlankeren Rahmen passt.
This commit is contained in:
2026-07-11 12:50:10 +02:00
parent d34e1cb1c1
commit 1c31e680c1
2 changed files with 43 additions and 24 deletions
+11 -2
View File
@@ -263,7 +263,7 @@ export interface WindowRenderSpec {
sashes: SashDef[];
/** Sichtbare Profilbreite (Meter) von Blend-/Flügelrahmen in der Öffnungsebene. */
frameWidth: number;
/** Rahmentiefe quer zur Wand (Meter); fehlt ⇒ volle Wanddicke. */
/** Rahmentiefe quer zur Wand (Meter); fehlt ⇒ {@link DEFAULT_FRAME_DEPTH}. */
frameDepth?: number;
/** Schichteinzug: Abstand der Rahmen-Vorderkante von {@link insetFace} (Meter). */
insetFromFace?: number;
@@ -282,6 +282,15 @@ interface SashSegment {
/** Default-Pfostenbreite (Meter), wenn ein `kind:"pfosten"`-Eintrag keine `postWidth` angibt. */
const DEFAULT_POST_WIDTH = 0.06;
/**
* Default-Rahmentiefe (Meter), wenn ein Fenster-/Türtyp keine explizite
* `frameDepth` trägt: reale Fensterrahmen sind ~7090 mm tief (Holz/PVC/Alu),
* unabhängig von der Wanddicke — NICHT die volle Wanddicke (das liess Fenster
* wie einen massiven Block in der Öffnung wirken statt eines schlanken Rahmens
* mit sichtbarer Laibung/Leibung ringsum, s. Recherche zu VW/ArchiCAD-Fenster-
* konstruktion). Deckt sich mit `toWalls3d.ts::DEFAULT_FRAME_DEPTH` (2D=3D).
*/
const DEFAULT_FRAME_DEPTH = 0.07;
/**
* Löst eine Flügeleinteilung ({@link SashDef}-Liste) zu konkreten Segment-
@@ -352,7 +361,7 @@ export function windowSymbol(
// Blendrahmen (kein Flügelrahmen) — so unterscheidet sich fest von öffenbar.
if (spec && spec.sashes.length > 0) {
const fw = Math.max(0.01, spec.frameWidth);
const depth = spec.frameDepth && spec.frameDepth > 1e-9 ? spec.frameDepth : total;
const depth = Math.min(total, spec.frameDepth && spec.frameDepth > 1e-9 ? spec.frameDepth : DEFAULT_FRAME_DEPTH);
const inset = Math.max(0, spec.insetFromFace ?? 0);
const halfT = total / 2;
const sign = (spec.insetFace ?? "aussen") === "innen" ? -1 : 1;