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:
+44
-1
@@ -20,6 +20,7 @@ if _HERE not in sys.path:
|
||||
import panel_base
|
||||
import massstab
|
||||
import overrides
|
||||
import rhinopanel
|
||||
|
||||
PANEL_GUID_STR = "7e1f6a5b-8e2f-4f3c-d5e6-f70819203b51"
|
||||
OVERRIDES_PANEL_GUID_STR = "8f2a7b6c-9f3a-4f4d-e6f7-08192a3c4d62"
|
||||
@@ -770,6 +771,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
self._last_prompt = ""
|
||||
self._last_state_sig = None # Fingerprint des letzten Push — dedupe
|
||||
self._cached_overrides = None # (enabled, count) — invalidiert bei Toggle/Update
|
||||
self._cached_combinations = None # (names, active) — invalidiert bei jeder Comb-Aenderung
|
||||
# Command-Liste einmalig laden (kann teuer sein -> cachen)
|
||||
try:
|
||||
self._all_commands = _list_all_command_names()
|
||||
@@ -920,6 +922,34 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open_as_window Overrides:", ex)
|
||||
|
||||
# --- Ebenenkombinationen ----------------------------------------
|
||||
elif t == "PICK_LAYER_COMBINATION":
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
name = (p.get("name") or "").strip()
|
||||
if name:
|
||||
rhinopanel.apply_layer_preset_by_name(doc, name)
|
||||
else:
|
||||
# "Eigene" — kein Apply, nur active_comb_name clearen
|
||||
rhinopanel.set_active_comb_name(doc, None)
|
||||
self._cached_combinations = None
|
||||
self._send_state(force=True)
|
||||
elif t == "SAVE_LAYER_COMBINATION":
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
name = (p.get("name") or "").strip()
|
||||
if name:
|
||||
rhinopanel.save_current_as_layer_preset(doc, name)
|
||||
self._cached_combinations = None
|
||||
self._send_state(force=True)
|
||||
elif t == "DELETE_LAYER_COMBINATION":
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
rhinopanel.delete_layer_preset(doc, p.get("name") or "")
|
||||
self._cached_combinations = None
|
||||
self._send_state(force=True)
|
||||
elif t == "OPEN_LAYER_COMBINATIONS_DIALOG":
|
||||
try: rhinopanel.open_layer_combinations_window()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open layer-combinations:", ex)
|
||||
|
||||
# --- Command-Line Integration -----------------------------------
|
||||
elif t == "RUN_COMMAND":
|
||||
cmd = (p.get("cmd") or "").strip()
|
||||
@@ -1035,6 +1065,18 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
info["overridesActivePreset"],
|
||||
_presets_tuple) = self._cached_overrides
|
||||
info["overridesPresets"] = list(_presets_tuple)
|
||||
# Ebenenkombinationen — cached (Liste + active). Invalidiert bei
|
||||
# PICK/SAVE/DELETE und durch Cross-Bridge-Notify aus rhinopanel.py.
|
||||
if self._cached_combinations is None:
|
||||
try:
|
||||
names = tuple(rhinopanel.list_layer_preset_names(doc))
|
||||
active = rhinopanel.get_active_comb_name(doc)
|
||||
self._cached_combinations = (names, active)
|
||||
except Exception:
|
||||
self._cached_combinations = ((), None)
|
||||
_names_tuple, _active_comb = self._cached_combinations
|
||||
info["layerCombinations"] = list(_names_tuple)
|
||||
info["layerCombinationActive"] = _active_comb
|
||||
# Command-Line State
|
||||
prompt = _get_command_prompt()
|
||||
info["cmdPrompt"] = prompt
|
||||
@@ -1057,6 +1099,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
info["overridesEnabled"], info["overridesCount"],
|
||||
info.get("overridesActivePreset"),
|
||||
tuple(info.get("overridesPresets") or ()),
|
||||
_names_tuple, _active_comb,
|
||||
prompt,
|
||||
)
|
||||
if not force and sig == self._last_state_sig:
|
||||
@@ -1197,5 +1240,5 @@ def _bridge_factory():
|
||||
return b
|
||||
|
||||
|
||||
panel_base.register_and_open("oberleiste", "OBERLEISTE", PANEL_GUID_STR, _bridge_factory,
|
||||
panel_base.register_and_open("oberleiste", "Oberleiste", PANEL_GUID_STR, _bridge_factory,
|
||||
icon_spec=("menu", "#2f5d54"))
|
||||
|
||||
Reference in New Issue
Block a user