Tech-Drawing-Fallback fix: batch-flag im sync Post-Cmd Regen

Bug: Beim Verbinden/Trennen zweier Waende via Move (= synchroner Replace-
Event-Pfad) lief jeder _regenerate_element-Call ohne den
_dossier_regen_batch_active Flag → jeder Regen invalidierte den Joint-Cache
neu (O(N²) Rebuilds) → Rhinos Technical-Drawing-Analyse choked →
"Switching all technical views to wireframe display".

Fix: Im post-Command Regen-Loop (line ~17285) den Flag setzen + Cache
einmal invalidieren bevor die affected_walls durchlaufen. Pattern analog
zur Idle-Batch-Logik die das schon hatte.

Outline + Centerline wieder aktiviert — waren nicht der Schuldige.
This commit is contained in:
2026-05-30 23:16:09 +02:00
parent 66971eaa7a
commit 5c7611ad40
+22 -17
View File
@@ -3276,16 +3276,12 @@ def _regen_wall_lines(doc, wall_id, in_cluster=False):
except Exception as ex:
print("[ELEMENTE] AddCurve centerline:", ex)
# Outline-Curve TEMPORAER deaktiviert: lag exakt auf z=0 wie die unteren
# Brep-Edges → Technical-Drawing Hidden-Line-Analyse choked nach jedem
# Regen. Wenn der User die outline-Visualisierung braucht, muessen wir
# auf Display-Conduit umstellen (nicht Tech-Drawing analysiert).
# outline = _make_wall_outline(axis_curve, dicke, referenz)
# if outline is not None:
# try: doc.Objects.AddCurve(outline, _build_attrs("wand_outline",
# dashed=False))
# except Exception as ex:
# print("[ELEMENTE] AddCurve outline:", ex)
outline = _make_wall_outline(axis_curve, dicke, referenz)
if outline is not None:
try: doc.Objects.AddCurve(outline, _build_attrs("wand_outline",
dashed=False))
except Exception as ex:
print("[ELEMENTE] AddCurve outline:", ex)
# Alias fuer Backwards-Compat — alte Callsites benutzen den alten Namen.
@@ -15639,26 +15635,27 @@ def _migrate_plangrafik_60_to_80_once(doc):
def _migrate_strip_wand_outlines_once(doc):
"""One-shot: alle bestehenden wand_outline Curves loeschen (Feature
temporaer deaktiviert wegen Technical-Drawing Hidden-Line-Konflikt).
"""One-shot: alle bestehenden wand_outline + wand_centerline Curves
loeschen (Feature temporaer deaktiviert wegen Technical-Drawing Konflikt).
Bei spaeterer Re-Aktivierung als Display-Conduit hinfaellig."""
if doc is None: return
try: key = "_dossier_wand_outlines_strip_" + str(doc.RuntimeSerialNumber)
except Exception: key = "_dossier_wand_outlines_strip_default"
try: key = "_dossier_wand_lines_strip_v2_" + str(doc.RuntimeSerialNumber)
except Exception: key = "_dossier_wand_lines_strip_v2_default"
if sc.sticky.get(key): return
sc.sticky[key] = True
n = 0
try:
for obj in list(doc.Objects):
try:
if obj.Attributes.GetUserString(_KEY_TYPE) == "wand_outline":
t = obj.Attributes.GetUserString(_KEY_TYPE) or ""
if t in ("wand_outline", "wand_centerline"):
doc.Objects.Delete(obj.Id, True)
n += 1
except Exception: pass
except Exception as ex:
print("[ELEMENTE] strip wand_outlines migration:", ex)
print("[ELEMENTE] strip wand-lines migration:", ex)
if n > 0:
print("[ELEMENTE] Strip-Wand-Outlines Migration: {} entfernt".format(n))
print("[ELEMENTE] Strip-Wand-Lines Migration: {} entfernt".format(n))
def _migrate_strip_wall_auto_groups_once(doc):
@@ -17286,10 +17283,18 @@ def _on_command_end(sender, e):
# Sync-Regen aller betroffenen Wände — Move ist sauber abgeschlossen,
# kein Konflikt mehr moeglich. EIN Regen pro Wand (nicht pro Oeffnung).
# Display bleibt suppressed bis ALLE Wände durch sind → kein „Aufbauen".
# Joint-Cache EINMAL fuer das Batch invalidieren (statt pro Regen).
# Sonst O(N²) Cache-Rebuilds → Technical-Drawing-Timeout/Wireframe-
# Fallback beim Chain-Bilden oder -Trennen.
sc.sticky["_dossier_regen_batch_active"] = True
_invalidate_joints_cache(None)
try:
for wid in affected_walls:
try: _regenerate_element(doc, wid)
except Exception as ex:
print("[ELEMENTE] post-cmd regen:", ex)
finally:
sc.sticky["_dossier_regen_batch_active"] = False
doc.Views.RedrawEnabled = prev_redraw_enabled
try: doc.Views.Redraw()
except Exception: pass