Panels poliert: Ebenenkombi in Oberleiste, Satelliten-Dialoge, Caps weg, Perf
- Ebenenkombination raus aus Ebenen-Panel, in Oberleiste-Topbar + Editor-Satellite (AusschnittLayerDialog embedded). doc.Strings haelt active_comb_name, auto-clear bei manueller Eye/Lock-Aenderung. - EbenenSettingsDialog jetzt Satellite mit Ebene-Picker-Dropdown (auto-save on switch via SAVE_KEEP). - Per-Ausschnitt Einstellungen-Satellite (Massstab, Display, Overrides, Ebenenkombi). Alte 'Sichtbarkeit bearbeiten'-Option entfernt. - Layouts/Ausschnitte: Top-Header weg, Sticky-Footer mit Anzahl + Aktionen. LayoutDialog ist jetzt Satellite mit Format-Live-Preview. - Panel-Captions + Default-Ebenen-Namen auf Mixed-Case (Ausschnitte, Ebenen, Waende ...). Nur DOSSIER bleibt caps. - DimensionenApp: Card-Optik raus, REF-Wuerfel mit Kreisen statt Quadraten + Hover-Scale. - GeschossManager angeglichen an EbenenManager: Rechtsklick-Menue, Lock-Button, Delete-X, Duplizieren. layer_builder honoriert z.locked. - Active Sublayer folgt jetzt dem Geschoss-Wechsel (gleicher Code unter neuem Parent). Performance Geschoss-Wechsel: - elemente._send_state() ersetzt durch _notify_active_geschoss() (Partial-Push statt 200+ Elements re-enumerieren). - _apply_visibility dedupe via sticky last-applied-signature (STATE_SYNC-Echo loopt nicht mehr durch alle Layer). - _update_clipping nur wenn alt oder neu hasClipping=True. - Redundante doc.Views.Redraw() im CPlane-Pfad entfernt — die folgende apply_visibility-Roundtrip redrawt 30ms spaeter ohnehin. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+20
-3
@@ -366,9 +366,9 @@ def _find_ebene_sublayer_name(doc, keywords, default_code, default_name,
|
||||
|
||||
|
||||
def _layer_path_axis(doc, geschoss_name):
|
||||
"""Wand-Achse + Volumen — Sublayer 'WÄNDE' (Code 20)."""
|
||||
"""Wand-Achse + Volumen — Sublayer 'Wände' (Code 20)."""
|
||||
sub = _find_ebene_sublayer_name(doc, ["wand", "wände", "waende"],
|
||||
"20", "WÄNDE",
|
||||
"20", "Wände",
|
||||
default_color="#0a0a0a", default_lw=0.50)
|
||||
return "{}::{}".format(geschoss_name, sub)
|
||||
|
||||
@@ -4543,6 +4543,23 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
elif t == "DELETE_ELEMENT": self._delete_wall(p.get("id"))
|
||||
elif t == "REGENERATE_ALL": self._regenerate_all()
|
||||
|
||||
def _notify_active_geschoss(self):
|
||||
"""Schlanker Partial-Push: nur activeGeschoss + activeGeschossName.
|
||||
Wird vom Ebenen-Bridge bei Geschoss-Wechsel gerufen — die Element-
|
||||
Liste ist davon nicht betroffen, ein voller _send_state mit Re-
|
||||
Enumeration aller Smart-Elemente (200+ in echten Projekten) waere
|
||||
teuer und unnoetig. React-State macht Shallow-Merge, der Rest des
|
||||
States bleibt."""
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
if doc is None: return
|
||||
try:
|
||||
self.send("STATE", {
|
||||
"activeGeschoss": _active_geschoss_id(doc),
|
||||
"activeGeschossName": _active_geschoss_name(doc),
|
||||
})
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] _notify_active_geschoss:", ex)
|
||||
|
||||
def _send_state(self):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
if doc is None:
|
||||
@@ -8509,6 +8526,6 @@ def _bridge_factory():
|
||||
return b
|
||||
|
||||
|
||||
panel_base.register_and_open("elemente", "ELEMENTE", PANEL_GUID_STR,
|
||||
panel_base.register_and_open("elemente", "Elemente", PANEL_GUID_STR,
|
||||
_bridge_factory,
|
||||
icon_spec=("foundation", "#5fa896"))
|
||||
|
||||
Reference in New Issue
Block a user