From 8a67b9f9d1c4a7da144a7434e25fa391a3905e4d Mon Sep 17 00:00:00 2001 From: karim Date: Mon, 18 May 2026 14:22:04 +0200 Subject: [PATCH] Perf: Wand-Cutout BooleanDifference batchen + 0.001 Toleranz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `_regenerate_element_body` Wand-Pfad: alle Öffnungs-Cutouts werden jetzt in EINEM BooleanDifference-Call pro Wand-Schicht subtrahiert (statt N einzelne Calls). Bei einer 3-schichtigen Wand mit 2 Öffnungen: 3 Boolean-Ops statt 6. Plus: Toleranz auf 0.001 m (= 1 mm) festgesetzt. Architektur-Genauigkeit reicht, und Boolean-Diff läuft mit dieser Toleranz spürbar schneller als mit feineren Werten. Co-Authored-By: Claude Opus 4.7 --- rhino/elemente.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/rhino/elemente.py b/rhino/elemente.py index 28d469c..1d1a1f3 100644 --- a/rhino/elemente.py +++ b/rhino/elemente.py @@ -4005,18 +4005,24 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name cutouts.append(cutout) opening_jobs.append((op_meta, eff_pt, uk)) if cutouts: + # Performance: alle Cutouts in EINEM BooleanDifference-Call pro + # Schicht subtrahieren (statt N Einzel-Diffs). Bei 3-schichtiger + # Wand mit 2 Oeffnungen reduziert das 6 BoolDiff-Ops auf 3. + # Toleranz fix 0.001 m = 1 mm. Architektur-Genauigkeit reicht das, + # und Boolean-Diff laeuft mit groesserer Toleranz spuerbar schneller + # als mit z.B. 0.0001. + tol = 0.001 new_layer_breps = [] for (brep, color, lname) in layer_breps: if brep is None: new_layer_breps.append((None, color, lname)); continue - for cut in cutouts: - try: - diff = rg.Brep.CreateBooleanDifference( - [brep], [cut], 0.001) - if diff and len(diff) > 0: - brep = diff[0] - except Exception as ex: - print("[ELEMENTE] BoolDiff layer:", ex) + try: + diff = rg.Brep.CreateBooleanDifference( + [brep], cutouts, tol) + if diff and len(diff) > 0: + brep = diff[0] + except Exception as ex: + print("[ELEMENTE] BoolDiff layer:", ex) new_layer_breps.append((brep, color, lname)) layer_breps = new_layer_breps