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:
+8
-2
@@ -4005,14 +4005,20 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name
|
|||||||
cutouts.append(cutout)
|
cutouts.append(cutout)
|
||||||
opening_jobs.append((op_meta, eff_pt, uk))
|
opening_jobs.append((op_meta, eff_pt, uk))
|
||||||
if cutouts:
|
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 = []
|
new_layer_breps = []
|
||||||
for (brep, color, lname) in layer_breps:
|
for (brep, color, lname) in layer_breps:
|
||||||
if brep is None:
|
if brep is None:
|
||||||
new_layer_breps.append((None, color, lname)); continue
|
new_layer_breps.append((None, color, lname)); continue
|
||||||
for cut in cutouts:
|
|
||||||
try:
|
try:
|
||||||
diff = rg.Brep.CreateBooleanDifference(
|
diff = rg.Brep.CreateBooleanDifference(
|
||||||
[brep], [cut], 0.001)
|
[brep], cutouts, tol)
|
||||||
if diff and len(diff) > 0:
|
if diff and len(diff) > 0:
|
||||||
brep = diff[0]
|
brep = diff[0]
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
|||||||
Reference in New Issue
Block a user