Per-Wand Joint-Rolle: explizit waehlen wer am T-Stoss durchgeht

Neues UserString-Feld 'dossier_wand_joint_rolle' per wand_axis:
- 'auto' (default): bisherige Logik. Bei beidseitig auto entscheidet die
  Style-Prio (hoehere = durchgehend)
- 'durchgehend': diese Wand ueberschreibt → ich gehe durch, T-Miter wird
  NICHT auf mich angewendet
- 'anstossend': diese Wand stoppt immer am Joint, auch wenn ich Prio-haerter waere

T-Junction-Detection in regen ruft jetzt _wand_should_apply_t_miter:
- my.rolle entscheidet zuerst
- bei my=auto: through.rolle entscheidet
- bei beide=auto: Prio-Vergleich (hoehere Prio = durchgehend)
- Default: T-Miter applied (= ich stoppe am Through)

Frontend: neue Dropdown 'Joint' in WallProperties zwischen Stil und Aufbau:
- Auto (Prio entscheidet)
- Durchgehend
- Anstossend

Backend-Pipeline: _attach_meta + _read_meta um wand_joint_rolle erweitert,
state-JSON sendet 'jointRolle', _update_wall_body handhabt jointRolle-Patch.
This commit is contained in:
2026-05-31 08:04:17 +02:00
parent 0171785b42
commit bc87ae1acc
2 changed files with 66 additions and 5 deletions
+15
View File
@@ -1528,6 +1528,21 @@ function WallProperties({ wall, geschosse, materials, wandStyles, onUpdate, onDe
</div>
)}
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
<span style={{ fontSize: 10, color: 'var(--text-secondary)', width: 50 }}
title="Wer verbindet sich an T-Stössen? Auto = Prio entscheidet. Durchgehend = diese Wand läuft durch. Anstossend = diese Wand stösst an die andere.">
Joint
</span>
<select value={wall.jointRolle || 'auto'}
onChange={(e) => onUpdate({ jointRolle: e.target.value })}
style={{ flex: 1, fontSize: 11 }}
title="Joint-Verhalten am T-Stoss. Auto folgt der Style-Prio, Durchgehend / Anstossend überschreiben.">
<option value="auto">Auto (Prio entscheidet)</option>
<option value="durchgehend">Durchgehend</option>
<option value="anstossend">Anstossend</option>
</select>
</div>
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
<span style={{ fontSize: 10, color: 'var(--text-secondary)', width: 50 }}>Aufbau</span>
<div style={{ flex: 1, display: 'flex', gap: 3 }}>