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:
+14
-8
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user