Schnitt entspiegelt: u-Achse = Betrachter-RECHTS (Rust + TS koordiniert)
Die Schnitt-u-Achse nutzte cross(normal, up) — die look_at-Konvention für
Blick entlang −z. Für einen Schnitt, den man entlang +normal betrachtet,
spiegelte das die Zeichnung (Blick nach Norden zeigte Osten links). Neu:
u = cross(up, normal) — wer nach Norden blickt, hat Osten rechts. Dieselbe
Entspiegelung wie zuvor in der Ansicht (b967146).
Koordiniert geändert: SectionPlane::u_axis (section.rs; section_fill nutzt
dieselbe Methode) + sectionUAxisModel (toSection.ts; Schicht-Orientierung
wallLayersReversedInU und Dach-Schnitt hängen daran und kippen konsistent
mit — die Aussenseite bleibt in der Zeichnung physisch aussen). Rust- und
TS-Tests auf die neue Konvention gespiegelt; Engine neu gebaut.
cargo 76/76, vitest 737/737.
This commit is contained in:
@@ -160,16 +160,17 @@ export function sectionPlaneFromLevel(level: DrawingLevel): SectionPlaneSpec | n
|
||||
* Ebene (Modell-2D: model.x = world.x, model.y = world.z).
|
||||
*
|
||||
* Muss EXAKT der u-Achse des WASM-Extraktors entsprechen (`SectionPlane::u_axis`
|
||||
* in section.rs): dort `u = normalize(cross(normal, up))` mit up = (0,1,0). Für
|
||||
* eine horizontale Normale `[Nx, Ny, Nz]` ist `cross(normal, (0,1,0)) =
|
||||
* (-Nz, 0, Nx)`; die Grundriss-Komponenten (x, z) sind also `(-Nz, Nx)`. Damit
|
||||
* wächst die Ausgabe-u-Koordinate genau in dieser Modell-Richtung — die Referenz,
|
||||
* gegen die die Wand-Aufbaurichtung projiziert wird. (Nicht normiert; für das
|
||||
* in section.rs): dort `u = normalize(cross(up, normal))` mit up = (0,1,0) —
|
||||
* das Blickrichtungs-RECHTS des Betrachters (Entspiegelung; wer nach Norden
|
||||
* blickt, hat Osten rechts). Für eine horizontale Normale `[Nx, Ny, Nz]` sind
|
||||
* die Grundriss-Komponenten (x, z) also `(Nz, -Nx)`. (Nicht normiert; für das
|
||||
* Vorzeichen des Skalarprodukts irrelevant.)
|
||||
*/
|
||||
export function sectionUAxisModel(plane: SectionPlaneSpec): Vec2 {
|
||||
// Blickrichtungs-RECHTS (cross(up, N)) — muss EXAKT `SectionPlane::u_axis`
|
||||
// in section.rs spiegeln (dort seit der Entspiegelung dieselbe Formel).
|
||||
const [nx, , nz] = plane.normal;
|
||||
return { x: -nz, y: nx };
|
||||
return { x: nz, y: -nx };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user