Perf: Wand-Cutout BooleanDifference batchen + 0.001 Toleranz

`_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 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 14:22:04 +02:00
parent 8f5084b085
commit 8a67b9f9d1
+8 -2
View File
@@ -4005,14 +4005,20 @@ 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)
[brep], cutouts, tol)
if diff and len(diff) > 0:
brep = diff[0]
except Exception as ex: