Replace-Listener: wand_layered/wand_layers/wand_style_id/wand_joint_rolle nach Replace bewahren

ROOT CAUSE: Wenn doc.Objects.Replace einer wand_axis ausgefuehrt wird (z.B.
nach L-Join von smart_join), prueft der Replace-Listener ob das neue Object
schon Meta hat. Wenn nicht, re-attached er via _attach_meta — aber die
wand-spezifischen Felder (wand_layered, wand_layers, wand_style_id,
wand_joint_rolle) wurden NICHT mit-uebergeben.

Effekt: layered Wand verlor wand_layered=True nach L-Join → naechster Regen
sieht is_layered=False → baut single SOLID Brep statt per-Layer-Breps →
"die gemerged walls sind dann leider solid walls".

Fix: Im Re-Attach-Aufruf die 4 wand-Felder mit weiterreichen aus meta.

Folge-Effekt: auch wand_style_id und wand_joint_rolle waren weg, was
Material-Lookup + Joint-Rolle-Override gebrochen hat. Beide jetzt fix.
This commit is contained in:
2026-05-31 13:07:02 +02:00
parent 3e54fa46a6
commit 26214a704d
+15 -1
View File
@@ -8589,6 +8589,14 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name
per_layer_ext_start=pl_ext_s, per_layer_ext_end=pl_ext_e, per_layer_ext_start=pl_ext_s, per_layer_ext_end=pl_ext_e,
per_layer_miter_start=pl_miter_s, per_layer_miter_start=pl_miter_s,
per_layer_miter_end=pl_miter_e) per_layer_miter_end=pl_miter_e)
# Diagnostic: layer build status — User sieht oft "solid" obwohl
# walls layered sind, kontrollieren obs an Brep-Build oder Display liegt
_n_ok = sum(1 for (b, _c, _n) in layer_breps if b is not None)
_n_fail = len(layer_breps) - _n_ok
print("[ELEMENTE] layered build {} (chain={}): {}/{} layers built"
" (def={} layers)".format(
element_id, len(chain_ids) if chain_ids else 1,
_n_ok, len(layer_breps), len(layers_def)))
else: else:
single_brep = _make_volume_geometry( single_brep = _make_volume_geometry(
geom, meta["dicke"], uk, ok, geom, meta["dicke"], uk, ok,
@@ -15273,7 +15281,13 @@ def _on_object_replaced_body(sender, e):
raum_txt_h=meta.get("raum_txt_h"), raum_txt_h=meta.get("raum_txt_h"),
raum_align=meta.get("raum_align") or None, raum_align=meta.get("raum_align") or None,
raum_sia=meta.get("raum_sia") or None, raum_sia=meta.get("raum_sia") or None,
raum_fuellung=meta.get("raum_fuellung")) raum_fuellung=meta.get("raum_fuellung"),
# Wand-spezifische Meta (sonst geht layered/style
# nach Replace verloren — Layered-Wand wird solid!)
wand_layered=meta.get("wand_layered"),
wand_layers=meta.get("wand_layers"),
wand_style_id=meta.get("wand_style_id") or None,
wand_joint_rolle=meta.get("wand_joint_rolle") or None)
new_obj.Attributes = attrs new_obj.Attributes = attrs
new_obj.CommitChanges() new_obj.CommitChanges()
except Exception: pass except Exception: pass