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:
+26
-21
@@ -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".
|
||||
for wid in affected_walls:
|
||||
try: _regenerate_element(doc, wid)
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] post-cmd regen:", ex)
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user