Kommentare Öffnungssymbole: DIN- durch SIA-Referenz ersetzen

Die Dreh-/Kipp-/Schiebe-Symbolik in Ansicht und 3D war fälschlich als
"DIN-Konvention" kommentiert (Grundlage ist SIA 400 B.9.1.3). Reine
Kommentar-/Doku-Korrektur, keine Verhaltensänderung.
This commit is contained in:
2026-07-12 16:02:59 +02:00
parent 13cc6a0d6a
commit e309e54af7
2 changed files with 19 additions and 17 deletions
+11 -9
View File
@@ -100,7 +100,7 @@ const FRAME_FILL_COLOR = "#d9d9d4";
const SILL_FILL_COLOR = "#cccccb";
/** Türblatt-Fläche. */
const DOOR_LEAF_FILL_COLOR = "#ede6d9";
/** Öffnungssymbol (DIN-Andeutung): dezente Annotation, nicht Bauteilkante. */
/** Öffnungssymbol (SIA-Andeutung): dezente Annotation, nicht Bauteilkante. */
const SYMBOL_INK = "#7d858f";
/** Neutraler Dach-Grauton, falls keine Eindeckungs-Schicht/-Farbe auflösbar ist (wie `toWalls3d.ts::ROOF_RGB`). */
const ROOF_RGB_FALLBACK: RRgb = [0.72, 0.45, 0.36];
@@ -610,7 +610,7 @@ interface ProjectedOpening {
sashRects: Array<Array<[number, number]>>;
/** Fensterbank (Sims): Bank + Tropfkante als zwei Bänder unter dem Rahmen. */
sill: Array<Array<[number, number]>>;
/** Öffnungssymbol (DIN-Ansicht): Linien exakt auf den Glasfeld-Ecken. */
/** Öffnungssymbol (SIA-Ansicht): Linien exakt auf den Glasfeld-Ecken. */
symbol: Array<[[number, number], [number, number]]>;
/** Tür (Blatt-Fläche statt Glas, ausser Glas-Blatt). */
isDoor: boolean;
@@ -791,9 +791,10 @@ function collectOpenings(project: Project, frame: ElevationFrame): ProjectedOpen
if (fa1 < 1 - fa - 1e-6) {
pr.divisions.push([quadAt(pr.pts, fa1, fz), quadAt(pr.pts, fa1, fieldTop)]);
}
// Öffnungssymbol (DIN): Linien starten/enden EXAKT auf den Glasfeld-
// Ecken (Nutzer-Report: Anker waren daneben). Dreh: Spitze am
// Bandseiten-Mittel des Glasfelds; Kipp: Spitze oben Mitte (VW).
// Öffnungssymbol (SIA B.9.1.3): Linien starten/enden EXAKT auf den
// Glasfeld-Ecken (Nutzer-Report: Anker waren daneben). Dreh/Drehkipp:
// Spitze zeigt zur Bandseite (Anschlag), Basis zur Griffseite — SIA-
// Konvention. Kipp: Spitze oben Mitte (VW).
const kind = sd.opening ?? wt?.kind ?? "fest";
if (kind === "dreh" || kind === "drehkipp") {
const hingeLeft = (sd.hingeSide ?? "left") === "left";
@@ -812,9 +813,10 @@ function collectOpenings(project: Project, frame: ElevationFrame): ProjectedOpen
);
}
if (kind === "schiebe") {
// Schiebeflügel: KEIN Dreieck (keine Bandseite), sondern ein Pfeil in
// Laufrichtung (horizontal) auf halber Glashöhe — die Griffseite
// (hingeSide) bestimmt die Pfeilrichtung. Klassische DIN-Konvention.
// Schiebeflügel (SIA: „vertikales/horizontales Schiebefenster"):
// KEIN Dreieck (keine Bandseite), sondern ein Pfeil in Laufrichtung
// (horizontal) auf halber Glashöhe — die Griffseite (hingeSide)
// bestimmt die Pfeilrichtung.
const zc = (gz0 + gz1) / 2;
const toRight = (sd.hingeSide ?? "left") === "left"; // Griff links ⇒ schiebt nach rechts
const tail = toRight ? gA : gB;
@@ -1484,7 +1486,7 @@ export function generateElevationPlan(
},
});
}
// Öffnungssymbol (DIN): dünn gestrichelt über dem Glas.
// Öffnungssymbol (SIA): dünn gestrichelt über dem Glas.
for (const [a, bLn] of op.symbol) {
items.push({
depth: d,
+8 -8
View File
@@ -416,7 +416,7 @@ const SHADING_RGB: RRgb = [0.88, 0.88, 0.9];
*/
const SILL_RGB: RRgb = [0.8, 0.8, 0.78];
/**
* Dunkles Grau der DIN-Öffnungssymbole (dünne Diagonalen AUF dem Glas, wie in der
* Dunkles Grau der SIA-Öffnungssymbole (dünne Diagonalen AUF dem Glas, wie in der
* 2D-Ansicht) — feine dunkle Linien auf der Scheibe (s. Symbol-Zweig in
* {@link frameMeshesForOpening}). Als sehr dünne, in der Öffnungsebene gedrehte
* Prismen ({@link openingPlaneBox}) knapp vor der Glasebene.
@@ -1919,7 +1919,7 @@ function openingAxisBox(
* absolute Welthöhe (Meter). Der Querschnitt spannt `±halfWidth` senkrecht zur
* Längsachse INNERHALB der Ebene (gedreht mit) und `[nBack,nFront]` entlang der
* Grundriss-Normalen (quer zur Wand, Tiefe). Damit lassen sich die schrägen
* DIN-Öffnungssymbole (Dreh-/Kipp-Diagonalen) als dünne, gedrehte dunkle Riegel
* SIA-Öffnungssymbole (Dreh-/Kipp-Diagonalen) als dünne, gedrehte dunkle Riegel
* AUF dem Glas erzeugen — der Renderer kennt nur Dreiecks-Meshes, keine Linien.
* `null` bei entarteter Länge (≤ EPS). 8 Ecken, dieselbe {@link OPENING_BOX_TRIS}-
* Topologie (doppelseitig gerendert ⇒ Winding egal; die drei Bits parametrisieren
@@ -2161,9 +2161,9 @@ function resolveOpeningFrame(project: Project, wall: Wall, op: Opening): Opening
* DetailLevel-Staffelung (VW-Detailgrad „fein" als Referenz):
* • „grob" — wird gar nicht aufgerufen (s. {@link emitOpeningFrames}).
* • „mittel"— Blendrahmen + Oberlicht-Kämpfer + Flügelrahmen (verschachtelt) +
* Fensterbank/Zargen-Umgriff, aber KEINE Sprossen und KEINE DIN-Symbole.
* Fensterbank/Zargen-Umgriff, aber KEINE Sprossen und KEINE SIA-Symbole.
* • „fein" — zusätzlich Flügel-Mittelpfosten + Kämpfer-Zeilen (Sprossen) und
* die DIN-Öffnungssymbole ({@link openingPlaneBox}) auf dem Glas.
* die SIA-Öffnungssymbole ({@link openingPlaneBox}) auf dem Glas.
*/
function frameMeshesForOpening(
wall: Wall,
@@ -2240,7 +2240,7 @@ function frameMeshesForOpening(
// über die Tiefe: der Flügelrahmen sitzt in einem EIGENEN, leicht ZURÜCK-
// GESETZTEN und flacheren Quer-Band (`sashBackN..sashFrontN`) hinter der
// Blendrahmen-Vorderkante — eine plastische Stufe nach innen (VW „fein"),
// ohne vor die Fassade auszukragen. Zusätzlich (nur „fein") die DIN-Öffnungs-
// ohne vor die Fassade auszukragen. Zusätzlich (nur „fein") die SIA-Öffnungs-
// symbole auf dem Glas. Feste Flügel bekommen weder Flügelrahmen noch Symbol.
if (sashesOn && params.sashes.length > 0 && sashTo - sashFrom > EPS && sashTop - sashBottom > EPS) {
const segs = resolveSashSpans(params.sashes, sashFrom, sashTo);
@@ -2275,7 +2275,7 @@ function frameMeshesForOpening(
pushSash(ct - sfw, ct, bz, tz); // rechter Flügelholm
pushSash(cf, ct, tz - sfw, tz); // oberer Flügelriegel
pushSash(cf, ct, bz, bz + sfw); // unterer Flügelriegel
// DIN-Öffnungssymbole (nur „fein") auf dem Glasfeld INNERHALB des Flügel-
// SIA-Öffnungssymbole (nur „fein") auf dem Glasfeld INNERHALB des Flügel-
// rahmens — exakt wie in der 2D-Ansicht (s. toElevation): Dreh = V mit
// Spitze am Bandseiten-Mittel des Glasfelds, Kipp = V mit Spitze oben Mitte.
if (!fine) continue;
@@ -2686,9 +2686,9 @@ export interface Model3dOptions {
* • "grob" — keine Rahmen/Sprossen (nur Loch + Scheibe).
* • "mittel"— Blendrahmen (Pfosten/Sturz/Schwelle) + ggf. Kämpfer, dazu die
* verschachtelten Flügelrahmen, Fensterbank (Sims) und Zargen-Umgriff — aber
* KEINE Sprossen und KEINE DIN-Öffnungssymbole.
* KEINE Sprossen und KEINE SIA-Öffnungssymbole.
* • "fein" — zusätzlich Flügel-Mittelpfosten + Kämpfer-Zeilen (Sprossen) und
* die DIN-Öffnungssymbole (Dreh/Kipp) auf dem Glas.
* die SIA-Öffnungssymbole (Dreh/Kipp) auf dem Glas.
* Fehlt es, gilt "fein" (= volle Details).
*/
detail?: DetailLevel;