Schichttrennlinie als Wand-Referenzlinie (mehrschichtige Wände)
Bei mehrschichtigen Wänden lässt sich neben Aussen/Mitte/Innen jetzt auch eine SCHICHTTRENNLINIE (Fuge zwischen zwei Schichten) als Referenzlinie wählen — z. B. die Achse auf die Innenkante der Aussenschale legen. - Neues Feld Wall.referenceOffset (freier Achsversatz entlang +n); wenn gesetzt, übersteuert es referenceLine. wallReferenceOffset bleibt die EINE Quelle → Grundriss, Schnitt und 3D erben das Verhalten automatisch. - Object-Info-Panel: das Referenzlinien-Dropdown listet zusätzlich je interne Fuge einen Eintrag (Kürzel der angrenzenden Schichten); Auswahl setzt den Versatz, Aussen/Mitte/Innen löscht ihn wieder. - selectionInfo berechnet die Fugen-Versätze (kumulierte Schichtdicken). +3 Tests. tsc + vitest grün.
This commit is contained in:
+23
-2
@@ -2,8 +2,8 @@
|
||||
// ceilingVerticalExtent): reine Datenschicht, kein React/Store.
|
||||
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { ceilingVerticalExtent } from "./wall";
|
||||
import type { Ceiling, Project } from "./types";
|
||||
import { ceilingVerticalExtent, wallReferenceOffset } from "./wall";
|
||||
import type { Ceiling, Project, Wall } from "./types";
|
||||
|
||||
/** Minimalprojekt mit einem Geschoss (baseElevation 0, floorHeight 2.6) und
|
||||
* einem einschichtigen Wandtyp (0.2 m), den die Decke als Aufbau nutzt. */
|
||||
@@ -113,3 +113,24 @@ describe("ceilingVerticalExtent", () => {
|
||||
expect(zBottom).toBeCloseTo(2.9); // baseElevation(og)=2.8 + offset(0.1)
|
||||
});
|
||||
});
|
||||
|
||||
describe("wallReferenceOffset", () => {
|
||||
const w = (extra: Partial<Wall>): Wall => ({ referenceLine: "center", ...extra } as Wall);
|
||||
const T = 0.4; // Gesamtdicke → half = 0.2
|
||||
|
||||
it("bildet die benannten Linien ab (aussen/mitte/innen)", () => {
|
||||
expect(wallReferenceOffset(w({ referenceLine: "left" }), T)).toBeCloseTo(0.2, 6);
|
||||
expect(wallReferenceOffset(w({ referenceLine: "center" }), T)).toBeCloseTo(0, 6);
|
||||
expect(wallReferenceOffset(w({ referenceLine: "right" }), T)).toBeCloseTo(-0.2, 6);
|
||||
});
|
||||
|
||||
it("übersteuert die Referenzlinie mit einem freien Fugen-Versatz", () => {
|
||||
// Fuge z. B. nach einer 0.05-Aussenschale: offset = half − 0.05 = 0.15.
|
||||
expect(wallReferenceOffset(w({ referenceLine: "left", referenceOffset: 0.15 }), T)).toBeCloseTo(0.15, 6);
|
||||
});
|
||||
|
||||
it("klemmt den Fugen-Versatz auf ±halbe Dicke", () => {
|
||||
expect(wallReferenceOffset(w({ referenceOffset: 5 }), T)).toBeCloseTo(0.2, 6);
|
||||
expect(wallReferenceOffset(w({ referenceOffset: -5 }), T)).toBeCloseTo(-0.2, 6);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user