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