From 26214a704da06672f971f43de97fc7827aeac09e Mon Sep 17 00:00:00 2001 From: karim Date: Sun, 31 May 2026 13:07:02 +0200 Subject: [PATCH] Replace-Listener: wand_layered/wand_layers/wand_style_id/wand_joint_rolle nach Replace bewahren MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- rhino/elemente.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/rhino/elemente.py b/rhino/elemente.py index 542a33d..071daf9 100644 --- a/rhino/elemente.py +++ b/rhino/elemente.py @@ -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_miter_start=pl_miter_s, 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: single_brep = _make_volume_geometry( 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_align=meta.get("raum_align") 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.CommitChanges() except Exception: pass