Rename all log tags to match English module names
[EBENEN] → [LAYERS], [EBENEN-BE] → [LAYERS-BE] [ZEICHNUNGSEBENEN] → [DRAWING-LEVELS] [GESTALTUNG] → [STYLES] [OBERLEISTE] → [TOOLBAR] [WERKZEUGE] → [TOOLS] [DIMENSIONEN] → [DIMENSIONS] [AUSSCHNITTE] → [VIEWPORTS] [MASSSTAB] → [SCALE] [SCHNITT] → [SECTION], [SCHNITT_GRIPS] → [SECTION-GRIPS] [WAND_GRIPS] → [WALL-GRIPS], [TREPPE_GRIPS] → [STAIR-GRIPS] [CURVE_DOTS] → [CURVE-DOTS] [panel_base] → [CORE] [ALIAS-LOADER] → [ALIASES] [BEGIN-CMD] → [CMD-HOOK]
This commit is contained in:
+17
-17
@@ -39,7 +39,7 @@ def _read_defaults():
|
||||
out[k] = v
|
||||
return out
|
||||
except Exception as ex:
|
||||
print("[ALIAS-LOADER] Defaults lesen:", ex)
|
||||
print("[ALIASES] Defaults lesen:", ex)
|
||||
return {}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ def _read_user_overrides():
|
||||
so = data.get("shortcuts_user")
|
||||
if isinstance(so, dict): return so
|
||||
except Exception as ex:
|
||||
print("[ALIAS-LOADER] Settings lesen:", ex)
|
||||
print("[ALIASES] Settings lesen:", ex)
|
||||
return {}
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ def _xml_persist_shortcut(xml_key, macro, verbose=False):
|
||||
if line_end < 0: line_end = len(content)
|
||||
line_trim = content[line_start:line_end].strip()
|
||||
if line_trim == new_entry:
|
||||
if verbose: print("[ALIAS-LOADER] XML '{}' unchanged".format(xml_key))
|
||||
if verbose: print("[ALIASES] XML '{}' unchanged".format(xml_key))
|
||||
continue
|
||||
# Sonst: loeschen inkl. preceding-newline+whitespace damit
|
||||
# keine orphan-line uebrig bleibt
|
||||
@@ -176,11 +176,11 @@ def _xml_persist_shortcut(xml_key, macro, verbose=False):
|
||||
# ShortcutKeys-Section finden
|
||||
sec_start = content.find('<child key="ShortcutKeys">')
|
||||
if sec_start < 0:
|
||||
if verbose: print("[ALIAS-LOADER] ShortcutKeys-section fehlt")
|
||||
if verbose: print("[ALIASES] ShortcutKeys-section fehlt")
|
||||
continue
|
||||
sec_end = content.find('</child>', sec_start)
|
||||
if sec_end < 0:
|
||||
if verbose: print("[ALIAS-LOADER] ShortcutKeys-close fehlt")
|
||||
if verbose: print("[ALIASES] ShortcutKeys-close fehlt")
|
||||
continue
|
||||
# Indent vom letzten <entry> in der Section uebernehmen
|
||||
section = content[sec_start:sec_end]
|
||||
@@ -199,9 +199,9 @@ def _xml_persist_shortcut(xml_key, macro, verbose=False):
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write(content)
|
||||
n_written += 1
|
||||
if verbose: print("[ALIAS-LOADER] XML {} '{}'".format(action, xml_key))
|
||||
if verbose: print("[ALIASES] XML {} '{}'".format(action, xml_key))
|
||||
except Exception as ex:
|
||||
print("[ALIAS-LOADER] XML-Write {}: {}".format(path, ex))
|
||||
print("[ALIASES] XML-Write {}: {}".format(path, ex))
|
||||
return n_written
|
||||
|
||||
|
||||
@@ -368,7 +368,7 @@ def apply_all():
|
||||
# Konflikt-Check (gleicher Trigger → letzter gewinnt, Warning)
|
||||
norm = (spec_type, str(trigger).lower())
|
||||
if norm in seen_triggers:
|
||||
print("[ALIAS-LOADER] Konflikt: '{}' fuer {} bereits von {} belegt"
|
||||
print("[ALIASES] Konflikt: '{}' fuer {} bereits von {} belegt"
|
||||
.format(trigger, action_id, seen_triggers[norm]))
|
||||
seen_triggers[norm] = action_id
|
||||
|
||||
@@ -383,7 +383,7 @@ def apply_all():
|
||||
try:
|
||||
added = aliases.Add(tname, macro)
|
||||
except Exception as _addex:
|
||||
print("[ALIAS-LOADER] Add({}, ...) Exception: {}"
|
||||
print("[ALIASES] Add({}, ...) Exception: {}"
|
||||
.format(tname, _addex))
|
||||
if not added:
|
||||
try: aliases.SetMacro(tname, macro)
|
||||
@@ -392,7 +392,7 @@ def apply_all():
|
||||
try:
|
||||
is_ok = aliases.IsAlias(tname)
|
||||
if not is_ok:
|
||||
print("[ALIAS-LOADER] WARN: '{}' (action={}) NICHT registriert "
|
||||
print("[ALIASES] WARN: '{}' (action={}) NICHT registriert "
|
||||
"— Rhino lehnt Namen wahrscheinlich ab (z.B. reine Zahl)"
|
||||
.format(tname, action_id))
|
||||
n_skipped += 1
|
||||
@@ -409,7 +409,7 @@ def apply_all():
|
||||
got = skset.GetMacro(sk)
|
||||
api_ok = (got == macro)
|
||||
except Exception as _sex:
|
||||
print("[ALIAS-LOADER] SetMacro({}): {}".format(trigger, _sex))
|
||||
print("[ALIASES] SetMacro({}): {}".format(trigger, _sex))
|
||||
if not api_ok and xml_key:
|
||||
# Enum-Wert fehlt → direkt ins XML (mit verbose-Log).
|
||||
# n_xml=0 kann "schon korrekt" ODER "gescheitert" heissen
|
||||
@@ -426,7 +426,7 @@ def apply_all():
|
||||
# damit Rhino-Quit-Save sie nicht ueberschreibt
|
||||
_quit_xml_pairs.append((xml_key, macro))
|
||||
else:
|
||||
print("[ALIAS-LOADER] WARN F-Key {} ({}) konnte weder "
|
||||
print("[ALIASES] WARN F-Key {} ({}) konnte weder "
|
||||
"API noch XML set werden".format(trigger, action_id))
|
||||
n_skipped += 1; continue
|
||||
n_fkey += 1
|
||||
@@ -439,7 +439,7 @@ def apply_all():
|
||||
if len(letter_only) == 1 and letter_only.isalpha():
|
||||
aliases.SetMacro(letter_only, macro)
|
||||
n_alias += 1
|
||||
print("[ALIAS-LOADER] {} ({}): Cmd+Letter nicht im Enum, "
|
||||
print("[ALIASES] {} ({}): Cmd+Letter nicht im Enum, "
|
||||
"fallback Alias '{}'".format(action_id, trigger, letter_only))
|
||||
else:
|
||||
n_skipped += 1
|
||||
@@ -447,16 +447,16 @@ def apply_all():
|
||||
skset.SetMacro(sk, macro)
|
||||
n_cmd += 1
|
||||
else:
|
||||
print("[ALIAS-LOADER] Unbekannter Type:", spec_type); n_skipped += 1
|
||||
print("[ALIASES] Unbekannter Type:", spec_type); n_skipped += 1
|
||||
except Exception as ex:
|
||||
print("[ALIAS-LOADER] Apply", action_id, "->", trigger, ":", ex)
|
||||
print("[ALIASES] Apply", action_id, "->", trigger, ":", ex)
|
||||
n_skipped += 1
|
||||
|
||||
# Quit-Hook installieren falls XML-only Shortcuts set wurden — diese
|
||||
# ueberlebt sonst Rhino's Auto-Save beim Quit nicht.
|
||||
if _quit_xml_pairs:
|
||||
_install_quit_xml_save(list(_quit_xml_pairs))
|
||||
print("[ALIAS-LOADER] {} XML-only Shortcuts werden bei Quit "
|
||||
print("[ALIASES] {} XML-only Shortcuts werden bei Quit "
|
||||
"re-persistiert (closing hook installed)"
|
||||
.format(len(_quit_xml_pairs)))
|
||||
|
||||
@@ -465,5 +465,5 @@ def apply_all():
|
||||
|
||||
if __name__ == "__main__":
|
||||
a, f, c, s = apply_all()
|
||||
print("[ALIAS-LOADER] OK: {} alias, {} fkey, {} cmd, {} skipped"
|
||||
print("[ALIASES] OK: {} alias, {} fkey, {} cmd, {} skipped"
|
||||
.format(a, f, c, s))
|
||||
|
||||
+33
-33
@@ -149,9 +149,9 @@ def _apply_camera(vp, cam):
|
||||
Rhino.RhinoApp.RunScript(
|
||||
"_-Zoom _Factor {:.6f} _Enter".format(factor), False)
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Frustum-Apply:", ex)
|
||||
print("[VIEWPORTS] Frustum-Apply:", ex)
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Camera-Apply:", ex)
|
||||
print("[VIEWPORTS] Camera-Apply:", ex)
|
||||
|
||||
|
||||
def _capture_layers(doc):
|
||||
@@ -243,7 +243,7 @@ def apply_snapshot_to_detail(doc, detail, snap_id):
|
||||
Liefert True bei Erfolg."""
|
||||
snap = next((s for s in _load_snapshots(doc) if s.get("id") == snap_id), None)
|
||||
if not snap:
|
||||
print("[AUSSCHNITTE] apply_to_detail: snap not found", snap_id)
|
||||
print("[VIEWPORTS] apply_to_detail: snap not found", snap_id)
|
||||
return False
|
||||
# Page-View ermitteln (fuer SetActiveDetail/SetPageAsActive)
|
||||
page_view = None
|
||||
@@ -257,14 +257,14 @@ def apply_snapshot_to_detail(doc, detail, snap_id):
|
||||
except Exception:
|
||||
continue
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] page-view-suche:", ex)
|
||||
print("[VIEWPORTS] page-view-suche:", ex)
|
||||
# Detail muss aktiv sein, damit Kamera-Aenderungen anschlagen
|
||||
was_active = False
|
||||
try: was_active = detail.IsActive
|
||||
except Exception: pass
|
||||
if page_view is not None and not was_active:
|
||||
try: page_view.SetActiveDetail(detail.Id)
|
||||
except Exception as ex: print("[AUSSCHNITTE] SetActiveDetail:", ex)
|
||||
except Exception as ex: print("[VIEWPORTS] SetActiveDetail:", ex)
|
||||
# Kamera + Layer + Name
|
||||
vp = detail.Viewport
|
||||
_apply_camera(vp, snap.get("camera"))
|
||||
@@ -274,7 +274,7 @@ def apply_snapshot_to_detail(doc, detail, snap_id):
|
||||
if new_name and vp.Name != new_name:
|
||||
vp.Name = new_name
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Detail-Rename:", ex)
|
||||
print("[VIEWPORTS] Detail-Rename:", ex)
|
||||
# Massstab
|
||||
ratio = _parse_scale(snap.get("scale", ""))
|
||||
if ratio is not None:
|
||||
@@ -300,7 +300,7 @@ def apply_snapshot_to_detail(doc, detail, snap_id):
|
||||
(page_view or doc.Views).Redraw()
|
||||
except Exception:
|
||||
doc.Views.Redraw()
|
||||
print("[AUSSCHNITTE] '{}' auf Detail {} applied".format(snap.get("name"), detail.Id))
|
||||
print("[VIEWPORTS] '{}' auf Detail {} applied".format(snap.get("name"), detail.Id))
|
||||
return True
|
||||
|
||||
|
||||
@@ -450,7 +450,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
snaps.insert(idx + 1, copy)
|
||||
self._store(doc, snaps)
|
||||
self._send_list()
|
||||
print("[AUSSCHNITTE] '{}' dupliziert".format(src.get("name")))
|
||||
print("[VIEWPORTS] '{}' dupliziert".format(src.get("name")))
|
||||
|
||||
def _set_field(self, snap_id, field, value):
|
||||
if not snap_id: return
|
||||
@@ -466,7 +466,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
def _capture(self, doc, name, existing_id=None, prior_scale=""):
|
||||
view = doc.Views.ActiveView
|
||||
if view is None:
|
||||
print("[AUSSCHNITTE] Keine aktive View")
|
||||
print("[VIEWPORTS] Keine aktive View")
|
||||
return None
|
||||
vp = view.ActiveViewport
|
||||
# Aktuelle Skala vom MASSSTAB-Modul holen — nur sinnvoll bei Parallel-
|
||||
@@ -483,7 +483,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
else:
|
||||
scale_str = "1:{:.1f}".format(ratio)
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Live-Skala lesen:", ex)
|
||||
print("[VIEWPORTS] Live-Skala lesen:", ex)
|
||||
# Fallback: wenn kein Massstab gepinnt war, die aus dem Frustum
|
||||
# berechnete Live-Skala speichern. So bleibt das Massstab-Dropdown
|
||||
# nach Restore konsistent (auch wenn der eigentliche Zoom-Restore
|
||||
@@ -495,7 +495,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
if live is not None and live > 0:
|
||||
scale_str = "1:{:.0f}".format(live) if live >= 10 else "1:{:.1f}".format(live)
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Live-Skala (Fallback):", ex)
|
||||
print("[VIEWPORTS] Live-Skala (Fallback):", ex)
|
||||
if not scale_str and prior_scale:
|
||||
scale_str = prior_scale # Perspective -> alten Wert nicht ueberschreiben
|
||||
# Darstellungs-Override aus dem aktuellen Doc-Setting uebernehmen.
|
||||
@@ -523,7 +523,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
snaps.append(snap)
|
||||
self._store(doc, snaps)
|
||||
self._send_list()
|
||||
print("[AUSSCHNITTE] '{}' gespeichert".format(name))
|
||||
print("[VIEWPORTS] '{}' gespeichert".format(name))
|
||||
|
||||
def _update(self, snap_id):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -540,7 +540,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
break
|
||||
self._store(doc, snaps)
|
||||
self._send_list()
|
||||
print("[AUSSCHNITTE] '{}' aktualisiert".format(target.get("name")))
|
||||
print("[VIEWPORTS] '{}' aktualisiert".format(target.get("name")))
|
||||
|
||||
def _restore(self, snap_id):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -559,7 +559,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
import layers_panel as rhinopanel
|
||||
rhinopanel.apply_layer_preset_by_name(doc, kombi)
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] kombi-apply '{}':".format(kombi), ex)
|
||||
print("[VIEWPORTS] kombi-apply '{}':".format(kombi), ex)
|
||||
_apply_layers_global(doc, snap.get("layers", []))
|
||||
else:
|
||||
_apply_layers_global(doc, snap.get("layers", []))
|
||||
@@ -584,7 +584,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
if b is not None: b._send_state(force=True)
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] darstellung apply:", ex)
|
||||
print("[VIEWPORTS] darstellung apply:", ex)
|
||||
# Overrides: nur anwenden wenn das Snap "applyOverrides" set hat.
|
||||
# Sonst bleibt der aktuelle User-Override-State unangetastet.
|
||||
if snap.get("applyOverrides"):
|
||||
@@ -600,7 +600,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
b._send_state(force=True)
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] overrides-apply:", ex)
|
||||
print("[VIEWPORTS] overrides-apply:", ex)
|
||||
# Viewport ZUERST umbenennen — der per-Viewport-Massstab in massstab.py
|
||||
# wird unter vp.Name geschluesselt. Erst nach dem Rename schreibt
|
||||
# _apply_scale unter dem neuen Namen, sonst landet der Wert beim alten
|
||||
@@ -610,7 +610,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
if new_name and vp.Name != new_name:
|
||||
vp.Name = new_name
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Rename:", ex)
|
||||
print("[VIEWPORTS] Rename:", ex)
|
||||
# Gespeicherten Massstab anwenden (z.B. "1:50") — falls present und
|
||||
# Viewport parallel ist (in Perspective ignoriert massstab._apply_scale).
|
||||
try:
|
||||
@@ -621,7 +621,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
_, model_v = ratio # (page=1, model=N) -> N
|
||||
import massstab
|
||||
massstab._apply_scale(doc, vp, float(model_v))
|
||||
print("[AUSSCHNITTE] Massstab set auf 1:{} (applied={})".format(
|
||||
print("[VIEWPORTS] Massstab set auf 1:{} (applied={})".format(
|
||||
model_v, massstab.get_applied_scale_ratio()))
|
||||
# Andere Panels (Massstab, Oberleiste) sofort ueber den
|
||||
# neuen appliedScale informieren — sonst zeigt das Dropdown
|
||||
@@ -630,15 +630,15 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
for key in ("massstab_bridge", "oberleiste_bridge"):
|
||||
try:
|
||||
b = sc.sticky.get(key)
|
||||
print("[AUSSCHNITTE] force-send via {}: {}".format(key, "OK" if b is not None else "MISSING"))
|
||||
print("[VIEWPORTS] force-send via {}: {}".format(key, "OK" if b is not None else "MISSING"))
|
||||
if b is not None:
|
||||
b._send_state(force=True)
|
||||
except Exception as e:
|
||||
print("[AUSSCHNITTE] force-send {} failed: {}".format(key, e))
|
||||
print("[VIEWPORTS] force-send {} failed: {}".format(key, e))
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Massstab-Restore:", ex)
|
||||
print("[VIEWPORTS] Massstab-Restore:", ex)
|
||||
view.Redraw()
|
||||
print("[AUSSCHNITTE] '{}' wiederhergestellt".format(snap.get("name")))
|
||||
print("[VIEWPORTS] '{}' wiederhergestellt".format(snap.get("name")))
|
||||
|
||||
def _apply_to_detail(self, snap_id):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -653,9 +653,9 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
detail = d
|
||||
break
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] Active-Detail-Suche:", ex)
|
||||
print("[VIEWPORTS] Active-Detail-Suche:", ex)
|
||||
if detail is None:
|
||||
print("[AUSSCHNITTE] Kein Detail ausgewaehlt — bitte:")
|
||||
print("[VIEWPORTS] Kein Detail ausgewaehlt — bitte:")
|
||||
print(" 1) ins Layout wechseln")
|
||||
print(" 2) Detail-Rahmen einmal anklicken (so dass er hervorgehoben ist)")
|
||||
print(" 3) erneut 'Auf Detail anwenden' waehlen")
|
||||
@@ -668,7 +668,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
snap = next((s for s in self._load(doc) if s.get("id") == snap_id), None)
|
||||
if not snap:
|
||||
print("[AUSSCHNITTE] Snap not found:", snap_id)
|
||||
print("[VIEWPORTS] Snap not found:", snap_id)
|
||||
return
|
||||
snap_by_id = {}
|
||||
for ls in (snap.get("layers") or []):
|
||||
@@ -714,7 +714,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
target["layers"] = new_list
|
||||
self._store(doc, snaps)
|
||||
self._send_list()
|
||||
print("[AUSSCHNITTE] Ebenen-Sichtbarkeit von '{}' aktualisiert".format(target.get("name")))
|
||||
print("[VIEWPORTS] Ebenen-Sichtbarkeit von '{}' aktualisiert".format(target.get("name")))
|
||||
|
||||
def _save_preset(self, name, layers):
|
||||
if not name: return
|
||||
@@ -738,7 +738,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
presets.append({"name": name, "layers": clean})
|
||||
self._store_presets(doc, presets)
|
||||
self._send_list()
|
||||
print("[AUSSCHNITTE] Ebenenkombination '{}' gespeichert ({} Ebenen)".format(name, len(clean)))
|
||||
print("[VIEWPORTS] Ebenenkombination '{}' gespeichert ({} Ebenen)".format(name, len(clean)))
|
||||
|
||||
def _delete_preset(self, name):
|
||||
if not name: return
|
||||
@@ -773,7 +773,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
snap = next((s for s in self._load(doc) if s.get("id") == snap_id), None)
|
||||
if not snap:
|
||||
print("[AUSSCHNITTE] open_settings: snap not found", snap_id)
|
||||
print("[VIEWPORTS] open_settings: snap not found", snap_id)
|
||||
return
|
||||
outer = self
|
||||
bridge_holder = {"form": None, "id": snap_id}
|
||||
@@ -788,19 +788,19 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
import toolbar as oberleiste
|
||||
display_modes = oberleiste._list_display_modes()
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] display_modes:", ex)
|
||||
print("[VIEWPORTS] display_modes:", ex)
|
||||
overrides_presets = []
|
||||
try:
|
||||
import overrides
|
||||
overrides_presets = [item.get("name") for item in overrides.list_presets() if item.get("name")]
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] overrides_presets:", ex)
|
||||
print("[VIEWPORTS] overrides_presets:", ex)
|
||||
layer_kombis = []
|
||||
try:
|
||||
import layers_panel as rhinopanel
|
||||
layer_kombis = rhinopanel.list_layer_preset_names(d)
|
||||
except Exception as ex:
|
||||
print("[AUSSCHNITTE] layer_kombis:", ex)
|
||||
print("[VIEWPORTS] layer_kombis:", ex)
|
||||
cam = sn.get("camera") or {}
|
||||
return {
|
||||
"snap": {
|
||||
@@ -826,7 +826,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
sid = bridge_holder["id"]
|
||||
target = next((s for s in snaps if s.get("id") == sid), None)
|
||||
if target is None:
|
||||
print("[AUSSCHNITTE] persist settings: snap weg"); return
|
||||
print("[VIEWPORTS] persist settings: snap weg"); return
|
||||
# Massstab
|
||||
sc_val = (settings.get("scale") or "").strip()
|
||||
target["scale"] = sc_val
|
||||
@@ -848,7 +848,7 @@ class AusschnittBridge(panel_base.BaseBridge):
|
||||
target["darstellung"] = darst if darst in ("einfach", "standard", "detail") else ""
|
||||
outer._store(d, snaps)
|
||||
outer._send_list()
|
||||
print("[AUSSCHNITTE] Settings fuer '{}' aktualisiert".format(target.get("name")))
|
||||
print("[VIEWPORTS] Settings fuer '{}' aktualisiert".format(target.get("name")))
|
||||
|
||||
class _AusschnittSettingsBridge(panel_base.BaseBridge):
|
||||
def __init__(self):
|
||||
|
||||
@@ -35,7 +35,7 @@ def _on_begin_command(sender, e):
|
||||
try:
|
||||
cmd = getattr(e, "CommandEnglishName", "") or ""
|
||||
if sc.sticky.get(_VERBOSE_KEY):
|
||||
print("[BEGIN-CMD] cmd='{}'".format(cmd))
|
||||
print("[CMD-HOOK] cmd='{}'".format(cmd))
|
||||
if cmd not in _DRAWING_COMMANDS: return
|
||||
try:
|
||||
guid = System.Guid(_GESTALTUNG_PANEL_GUID)
|
||||
@@ -44,15 +44,15 @@ def _on_begin_command(sender, e):
|
||||
Rhino.UI.Panels.FocusPanel(guid)
|
||||
except Exception: pass
|
||||
if sc.sticky.get(_VERBOSE_KEY):
|
||||
print("[BEGIN-CMD] Gestaltung-Panel opened/focused")
|
||||
print("[CMD-HOOK] Gestaltung-Panel opened/focused")
|
||||
except Exception as ex:
|
||||
print("[BEGIN-CMD] OpenPanel:", ex)
|
||||
print("[CMD-HOOK] OpenPanel:", ex)
|
||||
try:
|
||||
Rhino.RhinoApp.RunScript(
|
||||
'-_ShowPanel "DOSSIER Gestaltung"', False)
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[BEGIN-CMD] handler:", ex)
|
||||
print("[CMD-HOOK] handler:", ex)
|
||||
|
||||
|
||||
def install(verbose=False):
|
||||
@@ -66,9 +66,9 @@ def install(verbose=False):
|
||||
Rhino.Commands.Command.BeginCommand += _on_begin_command
|
||||
sc.sticky[_HANDLER_KEY] = _on_begin_command
|
||||
sc.sticky[_VERBOSE_KEY] = bool(verbose)
|
||||
print("[BEGIN-CMD] Hook installed (verbose={})".format(bool(verbose)))
|
||||
print("[CMD-HOOK] Hook installed (verbose={})".format(bool(verbose)))
|
||||
except Exception as ex:
|
||||
print("[BEGIN-CMD] install:", ex)
|
||||
print("[CMD-HOOK] install:", ex)
|
||||
|
||||
|
||||
def set_verbose(flag):
|
||||
|
||||
@@ -138,7 +138,7 @@ class _VertexDotConduit(rd.DisplayConduit):
|
||||
pt, "·", _MARKER_FILL, _MARKER_BORDER)
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[CURVE_DOTS] DrawForeground:", ex)
|
||||
print("[CURVE-DOTS] DrawForeground:", ex)
|
||||
|
||||
|
||||
# --- Install -------------------------------------------------------------
|
||||
@@ -156,6 +156,6 @@ def install_curve_vertex_dots():
|
||||
conduit = _VertexDotConduit()
|
||||
conduit.Enabled = True
|
||||
sc.sticky[_STICKY_CONDUIT] = conduit
|
||||
print("[CURVE_DOTS] Vertex dot conduit active")
|
||||
print("[CURVE-DOTS] Vertex dot conduit active")
|
||||
except Exception as ex:
|
||||
print("[CURVE_DOTS] install:", ex)
|
||||
print("[CURVE-DOTS] install:", ex)
|
||||
|
||||
+7
-7
@@ -183,7 +183,7 @@ def _apply_xform(doc, objs, xform):
|
||||
if doc.Objects.Transform(obj.Id, xform, True):
|
||||
n += 1
|
||||
except Exception as ex:
|
||||
print("[DIMENSIONEN] Transform-Fehler:", ex)
|
||||
print("[DIMENSIONS] Transform-Fehler:", ex)
|
||||
return n
|
||||
|
||||
|
||||
@@ -201,14 +201,14 @@ class _UndoRecord(object):
|
||||
try:
|
||||
self.serial = self.doc.BeginUndoRecord(self.label)
|
||||
except Exception as ex:
|
||||
print("[DIMENSIONEN] BeginUndoRecord:", ex)
|
||||
print("[DIMENSIONS] BeginUndoRecord:", ex)
|
||||
self.serial = 0
|
||||
return self
|
||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||
if self.serial:
|
||||
try: self.doc.EndUndoRecord(self.serial)
|
||||
except Exception as ex:
|
||||
print("[DIMENSIONEN] EndUndoRecord:", ex)
|
||||
print("[DIMENSIONS] EndUndoRecord:", ex)
|
||||
return False # exceptions propagieren
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@ def _scale_around_point(doc, objs, plane, ref_world, sx, sy, sz):
|
||||
ausgerichtet an plane."""
|
||||
if sx == 1 and sy == 1 and sz == 1: return
|
||||
if sx <= 0 or sy <= 0 or sz <= 0:
|
||||
print("[DIMENSIONEN] Ungueltige Skalierungsfaktoren:", sx, sy, sz)
|
||||
print("[DIMENSIONS] Ungueltige Skalierungsfaktoren:", sx, sy, sz)
|
||||
return
|
||||
p = rg.Plane(plane)
|
||||
p.Origin = ref_world
|
||||
@@ -593,7 +593,7 @@ def _install_listeners(bridge):
|
||||
b = sc.sticky.get("dimensionen_bridge")
|
||||
if b is not None:
|
||||
try: b.tick_idle()
|
||||
except Exception as ex: print("[DIMENSIONEN] idle:", ex)
|
||||
except Exception as ex: print("[DIMENSIONS] idle:", ex)
|
||||
|
||||
def on_select(s, e):
|
||||
# Swisstopo-Import feuert tausende Selection-Events → bail.
|
||||
@@ -619,9 +619,9 @@ def _install_listeners(bridge):
|
||||
Rhino.RhinoDoc.DeselectObjects += on_select
|
||||
Rhino.RhinoDoc.DeselectAllObjects += on_select
|
||||
except Exception as ex:
|
||||
print("[DIMENSIONEN] select-events:", ex)
|
||||
print("[DIMENSIONS] select-events:", ex)
|
||||
sc.sticky[flag] = True
|
||||
print("[DIMENSIONEN] Listener active (Idle + SelectObjects)")
|
||||
print("[DIMENSIONS] Listener active (Idle + SelectObjects)")
|
||||
|
||||
|
||||
def _bridge_factory():
|
||||
|
||||
@@ -82,7 +82,7 @@ def _find_hatch_pattern_index(doc, name):
|
||||
if hp.Name and hp.Name.strip().lower() == target:
|
||||
return i
|
||||
except Exception as ex:
|
||||
print("[EBENEN] hatch lookup:", ex)
|
||||
print("[LAYERS] hatch lookup:", ex)
|
||||
return -1
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ def _apply_section_style(doc, layer, section_cfg, layer_color):
|
||||
try:
|
||||
SS = Rhino.DocObjects.SectionStyle
|
||||
except Exception as ex:
|
||||
print("[EBENEN] SectionStyle-Klasse nicht da:", ex); return
|
||||
print("[LAYERS] SectionStyle-Klasse nicht da:", ex); return
|
||||
|
||||
pat = (section_cfg.get("hatchPattern") or "None").strip()
|
||||
show = bool(section_cfg.get("boundaryShow", True))
|
||||
@@ -341,7 +341,7 @@ def _build_ebene_layer(doc, parent_id, e, diag_prefix=""):
|
||||
_apply_section_style(doc, doc.Layers[sub_idx],
|
||||
e.get("section"), e.get("color"))
|
||||
except Exception as ex:
|
||||
print("[EBENEN] section-style apply ({}{}): {}".format(
|
||||
print("[LAYERS] section-style apply ({}{}): {}".format(
|
||||
diag_prefix, sub_name, ex))
|
||||
return sub_idx
|
||||
|
||||
@@ -384,7 +384,7 @@ def build_layers(doc, zeichnungsebenen, ebenen):
|
||||
diag_prefix=z_name + "/")
|
||||
doc.Views.Redraw()
|
||||
n_total = len(walk_ebenen(ebenen))
|
||||
print("[EBENEN] {} drawing levels x {} layers updated (incl. {} sub)".format(
|
||||
print("[LAYERS] {} drawing levels x {} layers updated (incl. {} sub)".format(
|
||||
len(zeichnungsebenen), len(ebenen), max(0, n_total - len(ebenen))))
|
||||
|
||||
|
||||
@@ -487,10 +487,10 @@ def delete_ebene(doc, code, move_to=None):
|
||||
if doc.Layers.Delete(from_idx, True):
|
||||
deleted_layers += 1
|
||||
except Exception as ex:
|
||||
print("[EBENEN] Layer-Delete:", ex)
|
||||
print("[LAYERS] Layer-Delete:", ex)
|
||||
|
||||
doc.Views.Redraw()
|
||||
print("[EBENEN] Ebene {} entfernt: {} Sublayer, {} Objekte verschoben, {} Objekte geloescht".format(
|
||||
print("[LAYERS] Ebene {} entfernt: {} Sublayer, {} Objekte verschoben, {} Objekte geloescht".format(
|
||||
code, deleted_layers, moved, deleted_objs))
|
||||
|
||||
|
||||
@@ -656,7 +656,7 @@ def cleanup_default_layers(doc):
|
||||
except Exception:
|
||||
pass
|
||||
if deleted:
|
||||
print("[EBENEN] Default layer removed: {}".format(", ".join(deleted)))
|
||||
print("[LAYERS] Default layer removed: {}".format(", ".join(deleted)))
|
||||
|
||||
|
||||
def _find_sublayer_by_code_recursive(doc, parent_id, code):
|
||||
@@ -682,14 +682,14 @@ def set_active_sublayer(doc, zeichnungsebene_id, code):
|
||||
7101_Strassen liegt zwei Ebenen tief)."""
|
||||
parent_idx = _find_top_by_id(doc, zeichnungsebene_id)
|
||||
if parent_idx < 0:
|
||||
print("[EBENEN] Parent-Layer fuer Zeichnungsebene {} not found".format(zeichnungsebene_id))
|
||||
print("[LAYERS] Parent-Layer fuer Zeichnungsebene {} not found".format(zeichnungsebene_id))
|
||||
return
|
||||
parent_id = doc.Layers[parent_idx].Id
|
||||
sub_idx = _find_sublayer_by_code_recursive(doc, parent_id, code)
|
||||
if sub_idx >= 0:
|
||||
doc.Layers.SetCurrentLayerIndex(sub_idx, True)
|
||||
else:
|
||||
print("[EBENEN] Sublayer with code {} under parent {} not found".format(code, doc.Layers[parent_idx].Name))
|
||||
print("[LAYERS] Sublayer with code {} under parent {} not found".format(code, doc.Layers[parent_idx].Name))
|
||||
|
||||
|
||||
def apply_visibility(doc, zeichnungsebenen, ebenen, active_z_id, active_code, z_mode, e_mode):
|
||||
|
||||
+83
-83
@@ -88,14 +88,14 @@ def _list_hatch_patterns_full(doc):
|
||||
try: lines = hp.GetHatchLines()
|
||||
except Exception: pass
|
||||
if lines is None:
|
||||
print("[EBENEN] hp[{}] '{}' HatchLines=None".format(
|
||||
print("[LAYERS] hp[{}] '{}' HatchLines=None".format(
|
||||
i, hp.Name))
|
||||
else:
|
||||
try: cnt = len(lines)
|
||||
except Exception:
|
||||
try: cnt = lines.Count
|
||||
except Exception: cnt = -1
|
||||
print("[EBENEN] hp[{}] '{}' HatchLines type={} count={}".format(
|
||||
print("[LAYERS] hp[{}] '{}' HatchLines type={} count={}".format(
|
||||
i, hp.Name, type(lines).__name__, cnt))
|
||||
for hl in lines:
|
||||
try:
|
||||
@@ -132,9 +132,9 @@ def _list_hatch_patterns_full(doc):
|
||||
}
|
||||
hlines.append(entry)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] hp[{}] hl FAIL:".format(i), ex)
|
||||
print("[LAYERS] hp[{}] hl FAIL:".format(i), ex)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] hp[{}] HatchLines outer FAIL:".format(i), ex)
|
||||
print("[LAYERS] hp[{}] HatchLines outer FAIL:".format(i), ex)
|
||||
out.append({
|
||||
"index": i,
|
||||
"name": hp.Name or "",
|
||||
@@ -146,7 +146,7 @@ def _list_hatch_patterns_full(doc):
|
||||
except Exception:
|
||||
continue
|
||||
except Exception as ex:
|
||||
print("[EBENEN] _list_hatch_patterns_full:", ex)
|
||||
print("[LAYERS] _list_hatch_patterns_full:", ex)
|
||||
return out
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ def _list_linetypes_full(doc):
|
||||
stype = "Space"
|
||||
segs.append({"length": length, "type": stype})
|
||||
except Exception as ex:
|
||||
print("[EBENEN] lt[{}] GetSegment({}) FAIL: {}".format(
|
||||
print("[LAYERS] lt[{}] GetSegment({}) FAIL: {}".format(
|
||||
i, s, ex))
|
||||
ref = 0
|
||||
try: ref = int(lt.Reference)
|
||||
@@ -211,10 +211,10 @@ def _list_linetypes_full(doc):
|
||||
"isReference": (ref > 0),
|
||||
})
|
||||
except Exception as ex:
|
||||
print("[EBENEN] linetype outer FAIL:", ex)
|
||||
print("[LAYERS] linetype outer FAIL:", ex)
|
||||
continue
|
||||
except Exception as ex:
|
||||
print("[EBENEN] _list_linetypes_full:", ex)
|
||||
print("[LAYERS] _list_linetypes_full:", ex)
|
||||
return out
|
||||
|
||||
|
||||
@@ -242,7 +242,7 @@ def _read_launcher_schema():
|
||||
and r.get("lw") is not None]
|
||||
if clean: return clean
|
||||
except Exception as ex:
|
||||
print("[EBENEN] launcher-schema lesen ({}):".format(p), ex)
|
||||
print("[LAYERS] launcher-schema lesen ({}):".format(p), ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@ def _broadcast_state(doc=None, hatch_patterns=None):
|
||||
"layerCombinationActive": get_active_comb_name(doc),
|
||||
}
|
||||
except Exception as ex:
|
||||
print("[EBENEN] broadcast prepare:", ex)
|
||||
print("[LAYERS] broadcast prepare:", ex)
|
||||
return
|
||||
for key in ("ebenen_bridge_ref", "zeichnungsebenen_bridge_ref"):
|
||||
b = sc.sticky.get(key)
|
||||
@@ -621,7 +621,7 @@ def store_layer_presets(doc, presets):
|
||||
doc.Strings.SetString(_PRESETS_KEY,
|
||||
json.dumps(presets, ensure_ascii=False))
|
||||
except Exception as ex:
|
||||
print("[EBENEN] store_layer_presets:", ex)
|
||||
print("[LAYERS] store_layer_presets:", ex)
|
||||
|
||||
|
||||
def get_active_comb_name(doc):
|
||||
@@ -636,7 +636,7 @@ def set_active_comb_name(doc, name):
|
||||
try:
|
||||
doc.Strings.SetString(_ACTIVE_COMB_KEY, name or "")
|
||||
except Exception as ex:
|
||||
print("[EBENEN] set_active_comb_name:", ex)
|
||||
print("[LAYERS] set_active_comb_name:", ex)
|
||||
|
||||
|
||||
def list_layer_preset_names(doc):
|
||||
@@ -653,7 +653,7 @@ def _notify_oberleiste_combs():
|
||||
b._cached_combinations = None
|
||||
b._send_state(force=True)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] notify oberleiste combs:", ex)
|
||||
print("[LAYERS] notify oberleiste combs:", ex)
|
||||
|
||||
|
||||
def _notify_layer_combinations_editor():
|
||||
@@ -663,7 +663,7 @@ def _notify_layer_combinations_editor():
|
||||
b = sc.sticky.get("layer_combinations_bridge")
|
||||
if b is not None: b._send_state()
|
||||
except Exception as ex:
|
||||
print("[EBENEN] notify layer-combinations editor:", ex)
|
||||
print("[LAYERS] notify layer-combinations editor:", ex)
|
||||
|
||||
|
||||
def apply_layer_preset_by_name(doc, name):
|
||||
@@ -673,7 +673,7 @@ def apply_layer_preset_by_name(doc, name):
|
||||
presets = load_layer_presets(doc)
|
||||
preset = next((p for p in presets if p.get("name") == name), None)
|
||||
if preset is None:
|
||||
print("[EBENEN] apply_layer_preset_by_name: '{}' not found".format(name))
|
||||
print("[LAYERS] apply_layer_preset_by_name: '{}' not found".format(name))
|
||||
return False
|
||||
payload = {
|
||||
"layers": preset.get("layers") or [],
|
||||
@@ -687,7 +687,7 @@ def apply_layer_preset_by_name(doc, name):
|
||||
try:
|
||||
eb._apply_combination(payload)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] apply via bridge:", ex)
|
||||
print("[LAYERS] apply via bridge:", ex)
|
||||
return False
|
||||
else:
|
||||
# Fallback: direkt doc.Strings + doc.Layer setzen (kein Bridge offen)
|
||||
@@ -725,7 +725,7 @@ def _apply_layer_preset_inline(doc, payload):
|
||||
doc.Strings.SetString("dossier_ebenen", json.dumps(e_list, ensure_ascii=False))
|
||||
doc.Strings.SetString("dossier_zeichnungsebenen", json.dumps(z_list, ensure_ascii=False))
|
||||
except Exception as ex:
|
||||
print("[EBENEN] inline preset-apply (eye-state):", ex)
|
||||
print("[LAYERS] inline preset-apply (eye-state):", ex)
|
||||
# Layer-ID-Pfad als Sekundaer (AUSSCHNITTE-Kompat)
|
||||
layer_states = payload.get("layers") or []
|
||||
if layer_states:
|
||||
@@ -767,7 +767,7 @@ def save_current_as_layer_preset(doc, name):
|
||||
"locked": bool(layer.IsLocked),
|
||||
})
|
||||
except Exception as ex:
|
||||
print("[EBENEN] save_current_as_layer_preset enum:", ex)
|
||||
print("[LAYERS] save_current_as_layer_preset enum:", ex)
|
||||
# 2) Eye-States aus dossier_ebenen / dossier_zeichnungsebenen
|
||||
pe_state, pz_state = [], []
|
||||
try:
|
||||
@@ -789,7 +789,7 @@ def save_current_as_layer_preset(doc, name):
|
||||
"visible": bool(z.get("visible", True)),
|
||||
})
|
||||
except Exception as ex:
|
||||
print("[EBENEN] save_current_as_layer_preset eye-states:", ex)
|
||||
print("[LAYERS] save_current_as_layer_preset eye-states:", ex)
|
||||
presets = load_layer_presets(doc)
|
||||
new_data = {
|
||||
"name": name,
|
||||
@@ -806,7 +806,7 @@ def save_current_as_layer_preset(doc, name):
|
||||
set_active_comb_name(doc, name)
|
||||
_notify_oberleiste_combs()
|
||||
_notify_layer_combinations_editor()
|
||||
print("[EBENEN] '{}' gespeichert: {} Layer + {} Ebenen Eye-State".format(
|
||||
print("[LAYERS] '{}' gespeichert: {} Layer + {} Ebenen Eye-State".format(
|
||||
name, len(layers), len(pe_state)))
|
||||
return True
|
||||
|
||||
@@ -820,7 +820,7 @@ def delete_layer_preset(doc, name):
|
||||
set_active_comb_name(doc, None)
|
||||
_notify_oberleiste_combs()
|
||||
_notify_layer_combinations_editor()
|
||||
print("[EBENEN] Kombination '{}' geloescht".format(name))
|
||||
print("[LAYERS] Kombination '{}' geloescht".format(name))
|
||||
return True
|
||||
|
||||
|
||||
@@ -870,7 +870,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
"hatchPatterns": _hatch_pattern_names(doc),
|
||||
})
|
||||
except Exception as ex:
|
||||
print("[EBENEN] State-Sync:", ex)
|
||||
print("[LAYERS] State-Sync:", ex)
|
||||
else:
|
||||
payload = {"hatchPatterns": _hatch_pattern_names(doc)}
|
||||
# Falls der User im Launcher eigene Default-Ebenen definiert hat,
|
||||
@@ -878,7 +878,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
launcher_schema = _read_launcher_schema()
|
||||
if launcher_schema:
|
||||
payload["defaultEbenen"] = launcher_schema
|
||||
print("[EBENEN] FIRST_RUN mit Launcher-Schema ({} Ebenen)".format(
|
||||
print("[LAYERS] FIRST_RUN mit Launcher-Schema ({} Ebenen)".format(
|
||||
len(launcher_schema)))
|
||||
self.send("FIRST_RUN", payload)
|
||||
|
||||
@@ -894,7 +894,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if t == "READY":
|
||||
self._on_ready()
|
||||
elif t == "APPLY":
|
||||
print("[EBENEN-BE] APPLY from mode={} payload-z={} payload-e={}".format(
|
||||
print("[LAYERS-BE] APPLY from mode={} payload-z={} payload-e={}".format(
|
||||
self._mode,
|
||||
len(p.get("zeichnungsebenen") or []),
|
||||
len(p.get("ebenen") or [])))
|
||||
@@ -902,13 +902,13 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
z_payload = p.get("zeichnungsebenen") or []
|
||||
e_raw = doc.Strings.GetValue("dossier_ebenen")
|
||||
e_payload = json.loads(e_raw) if e_raw else []
|
||||
print("[EBENEN-BE] mode=zeichnungsebenen: e from doc.Strings n={}".format(len(e_payload)))
|
||||
print("[LAYERS-BE] mode=zeichnungsebenen: e from doc.Strings n={}".format(len(e_payload)))
|
||||
self._apply(z_payload, e_payload, save_z=True, save_e=False)
|
||||
else:
|
||||
e_payload = p.get("ebenen") or []
|
||||
z_raw = doc.Strings.GetValue("dossier_zeichnungsebenen")
|
||||
z_payload = json.loads(z_raw) if z_raw else []
|
||||
print("[EBENEN-BE] mode=ebenen: z from doc.Strings n={}".format(len(z_payload)))
|
||||
print("[LAYERS-BE] mode=ebenen: z from doc.Strings n={}".format(len(z_payload)))
|
||||
self._apply(z_payload, e_payload, save_z=False, save_e=True)
|
||||
elif t == "LAYER_STYLE":
|
||||
layer_builder.update_layer_style(doc, p["code"], p.get("color"), p.get("lw"))
|
||||
@@ -942,16 +942,16 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if new_z is not None:
|
||||
self._set_active_zeichnungsebene(new_z)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] auto-activate:", ex)
|
||||
print("[SECTION] auto-activate:", ex)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] CREATE_SCHNITT:", ex)
|
||||
print("[SECTION] CREATE_SCHNITT:", ex)
|
||||
elif t == "DELETE_SCHNITT":
|
||||
try:
|
||||
import schnitte
|
||||
if schnitte.delete_schnitt_entry(doc, p.get("id") or ""):
|
||||
_broadcast_state(doc)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] DELETE_SCHNITT:", ex)
|
||||
print("[SECTION] DELETE_SCHNITT:", ex)
|
||||
elif t == "SET_ACTIVE_LAYER":
|
||||
code = p.get("code", "")
|
||||
if code:
|
||||
@@ -1015,21 +1015,21 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
elif t == "OPEN_LAYER_COMBINATIONS_DIALOG":
|
||||
try: open_layer_combinations_window()
|
||||
except Exception as ex:
|
||||
print("[EBENEN] open layer-combinations:", ex)
|
||||
print("[LAYERS] open layer-combinations:", ex)
|
||||
elif t == "OPEN_PROJECT_SETTINGS":
|
||||
try: self._open_project_settings()
|
||||
except Exception as ex:
|
||||
print("[EBENEN] open project-settings:", ex)
|
||||
print("[LAYERS] open project-settings:", ex)
|
||||
elif t == "OPEN_LIBRARY":
|
||||
try: self._open_library()
|
||||
except Exception as ex:
|
||||
print("[EBENEN] open library:", ex)
|
||||
print("[LAYERS] open library:", ex)
|
||||
elif t == "PICK_TEXTURE_FILE":
|
||||
# Oeffnet macOS-File-Picker fuer Bild-Dateien. Antwort an
|
||||
# Frontend via TEXTURE_PICKED-Message.
|
||||
try: self._pick_texture_file(p)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] pick texture:", ex)
|
||||
print("[LAYERS] pick texture:", ex)
|
||||
|
||||
# ---- Helpers ----
|
||||
|
||||
@@ -1843,7 +1843,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
path = dlg.FileName or ""
|
||||
self.send("TEXTURE_PICKED", {"slot": slot, "path": path})
|
||||
except Exception as ex:
|
||||
print("[EBENEN] pick texture:", ex)
|
||||
print("[LAYERS] pick texture:", ex)
|
||||
self.send("TEXTURE_PICKED", {"slot": slot, "path": None})
|
||||
|
||||
def _open_library(self):
|
||||
@@ -1913,7 +1913,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
GeschossSettingsDialog. Save updated den Eintrag in doc.Strings +
|
||||
triggert Cross-Panel-Sync."""
|
||||
if not isinstance(geschoss, dict) or not geschoss.get("id"):
|
||||
print("[EBENEN] open_geschoss_settings: kein Geschoss-Payload")
|
||||
print("[LAYERS] open_geschoss_settings: kein Geschoss-Payload")
|
||||
return
|
||||
gid = geschoss["id"]
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -1935,16 +1935,16 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
val = updated.pop("projectZeroMum")
|
||||
val = float(val) if val is not None else 0.0
|
||||
doc.Strings.SetString("dossier_project_zero_mum", str(val))
|
||||
print("[EBENEN] project_zero_mum = {} m.ü.M".format(val))
|
||||
print("[LAYERS] project_zero_mum = {} m.ü.M".format(val))
|
||||
except Exception as ex:
|
||||
print("[EBENEN] project_zero_mum save:", ex)
|
||||
print("[LAYERS] project_zero_mum save:", ex)
|
||||
z_raw = doc.Strings.GetValue("dossier_zeichnungsebenen")
|
||||
if not z_raw:
|
||||
print("[EBENEN] save_geschoss: kein z-Store"); return
|
||||
print("[LAYERS] save_geschoss: kein z-Store"); return
|
||||
try:
|
||||
z_list = json.loads(z_raw)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] save_geschoss JSON:", ex); return
|
||||
print("[LAYERS] save_geschoss JSON:", ex); return
|
||||
replaced = False
|
||||
for i, z in enumerate(z_list):
|
||||
if isinstance(z, dict) and z.get("id") == gid:
|
||||
@@ -1952,7 +1952,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
replaced = True
|
||||
break
|
||||
if not replaced:
|
||||
print("[EBENEN] save_geschoss: id {} not found".format(gid))
|
||||
print("[LAYERS] save_geschoss: id {} not found".format(gid))
|
||||
return
|
||||
# Build_layers + Save via _apply (durchlaeuft ohne save_e)
|
||||
e_raw = doc.Strings.GetValue("dossier_ebenen")
|
||||
@@ -1970,7 +1970,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
import schnitte
|
||||
schnitte.activate_schnitt(doc, updated)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] post-save reactivate:", ex)
|
||||
print("[SECTION] post-save reactivate:", ex)
|
||||
panel_base.open_satellite_window(
|
||||
"geschoss_settings",
|
||||
params=params,
|
||||
@@ -1984,7 +1984,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
die aktuelle Ebene live (SAVE_KEEP), Schliess-/Übernehmen-Knopf
|
||||
persistiert + schliesst (SAVE)."""
|
||||
if not isinstance(ebene, dict) or not ebene.get("code"):
|
||||
print("[EBENEN] open_ebenen_settings: kein Ebene-Payload")
|
||||
print("[LAYERS] open_ebenen_settings: kein Ebene-Payload")
|
||||
return
|
||||
bridge_holder = {"form": None}
|
||||
apply_self = self
|
||||
@@ -2035,7 +2035,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if not e_raw: return
|
||||
try: e_list = json.loads(e_raw)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] save_ebene JSON:", ex); return
|
||||
print("[LAYERS] save_ebene JSON:", ex); return
|
||||
# Rekursive Suche + Replace durch den Tree — Sub-Ebenen
|
||||
# (children) liegen verschachtelt, nicht in der Top-Level-Liste.
|
||||
def _replace_in_tree(lst, target_code, new_data):
|
||||
@@ -2055,7 +2055,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
return False
|
||||
replaced = _replace_in_tree(e_list, orig_code, updated)
|
||||
if not replaced:
|
||||
print("[EBENEN] save_ebene: code {} not found".format(orig_code))
|
||||
print("[LAYERS] save_ebene: code {} not found".format(orig_code))
|
||||
return
|
||||
z_raw = doc.Strings.GetValue("dossier_zeichnungsebenen")
|
||||
try: z_list = json.loads(z_raw) if z_raw else []
|
||||
@@ -2074,7 +2074,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
"""Oeffnet den vollen GeschossDialog (Mehrfach-Editor) als
|
||||
Satelliten-Fenster. Save schreibt die ganze z-Liste neu."""
|
||||
if not isinstance(zeichnungsebenen, list):
|
||||
print("[EBENEN] open_geschoss_dialog: keine Liste"); return
|
||||
print("[LAYERS] open_geschoss_dialog: keine Liste"); return
|
||||
def on_save(payload):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
if doc is None: return
|
||||
@@ -2092,7 +2092,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
on_save=on_save)
|
||||
|
||||
def _apply(self, zeichnungsebenen, ebenen, save_z=True, save_e=True):
|
||||
print("[EBENEN] _apply START z={} e={} (save_z={} save_e={})".format(
|
||||
print("[LAYERS] _apply START z={} e={} (save_z={} save_e={})".format(
|
||||
len(zeichnungsebenen) if zeichnungsebenen else 0,
|
||||
len(ebenen) if ebenen else 0, save_z, save_e))
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -2147,19 +2147,19 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
new_ids = _schn.schnitt_ids_in_list(zeichnungsebenen)
|
||||
schnitte_removed = old_ids - new_ids
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] cleanup detection:", ex)
|
||||
print("[SECTION] cleanup detection:", ex)
|
||||
|
||||
_set_processing(True)
|
||||
try:
|
||||
print("[EBENEN] _apply: build_layers ...")
|
||||
print("[LAYERS] _apply: build_layers ...")
|
||||
layer_builder.build_layers(doc, zeichnungsebenen, ebenen)
|
||||
print("[EBENEN] _apply: json.dumps ...")
|
||||
print("[LAYERS] _apply: json.dumps ...")
|
||||
# WICHTIG: ensure_ascii=False umgeht einen Bug in Rhinos eigener
|
||||
# json/encoder.py die bei ASCII-escape s.decode('utf-8') aufruft
|
||||
# und dabei mit 0xC4 (Umlaut) in den CP1252-Decoder lauft.
|
||||
z_json = json.dumps(zeichnungsebenen, ensure_ascii=False)
|
||||
e_json = json.dumps(ebenen, ensure_ascii=False)
|
||||
print("[EBENEN] _apply: SetString ...")
|
||||
print("[LAYERS] _apply: SetString ...")
|
||||
if save_z:
|
||||
doc.Strings.SetString("dossier_zeichnungsebenen", z_json)
|
||||
if save_e:
|
||||
@@ -2175,10 +2175,10 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
for sid in schnitte_removed:
|
||||
n_total += _schn.cleanup_schnitt_artifacts(
|
||||
doc, sid, active_id=active_id)
|
||||
print("[SCHNITT] {} Schnitt(e) geloescht, {} Symbol-Curves entfernt".format(
|
||||
print("[SECTION] {} Schnitt(e) geloescht, {} Symbol-Curves entfernt".format(
|
||||
len(schnitte_removed), n_total))
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] artifact cleanup:", ex)
|
||||
print("[SECTION] artifact cleanup:", ex)
|
||||
# Smart-Elemente (Waende) regenerieren — Geschoss-Hoehen/OKFF
|
||||
# haben sich evtl. geaendert, gebundene Waende muessen neu
|
||||
# extrudiert werden. Best-effort, faengt jeden Fehler ab.
|
||||
@@ -2187,17 +2187,17 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if elem_bridge is not None:
|
||||
elem_bridge._regenerate_all()
|
||||
except Exception as _ex:
|
||||
print("[EBENEN] elemente regen:", _ex)
|
||||
print("[LAYERS] elemente regen:", _ex)
|
||||
n_with_fill = sum(1 for e in ebenen if isinstance(e, dict)
|
||||
and isinstance(e.get("fill"), dict)
|
||||
and e["fill"].get("pattern") not in (None, "None"))
|
||||
print("[EBENEN] dossier_ebenen saved: {} layers, of which {} with fill, JSON-len={}".format(
|
||||
print("[LAYERS] dossier_ebenen saved: {} layers, of which {} with fill, JSON-len={}".format(
|
||||
len(ebenen), n_with_fill, len(e_json)))
|
||||
re_read = doc.Strings.GetValue("dossier_ebenen")
|
||||
print("[EBENEN] dossier_ebenen verified: len={}".format(len(re_read) if re_read else 0))
|
||||
print("[EBENEN] _apply: cleanup_default_layers ...")
|
||||
print("[LAYERS] dossier_ebenen verified: len={}".format(len(re_read) if re_read else 0))
|
||||
print("[LAYERS] _apply: cleanup_default_layers ...")
|
||||
layer_builder.cleanup_default_layers(doc)
|
||||
print("[EBENEN] _apply: ensure_active_sublayer ...")
|
||||
print("[LAYERS] _apply: ensure_active_sublayer ...")
|
||||
self._ensure_active_sublayer()
|
||||
# Existierende 'Nach Ebene'-Hatches an neue Pattern/Skala/Drehung
|
||||
# angleichen — ABER nur wenn die Fill-Signatur sich tatsaechlich
|
||||
@@ -2208,16 +2208,16 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if fill_changed:
|
||||
gestaltung.refresh_layer_fills(doc)
|
||||
else:
|
||||
print("[EBENEN] _apply: fill signature unchanged -> no hatch refresh")
|
||||
print("[LAYERS] _apply: fill signature unchanged -> no hatch refresh")
|
||||
# Plot-Color Repair laeuft immer (no-op falls schon synchron)
|
||||
gestaltung.repair_plot_colors(doc)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] gestaltung sync:", ex)
|
||||
print("[LAYERS] gestaltung sync:", ex)
|
||||
finally:
|
||||
_set_processing(False)
|
||||
print("[EBENEN] _apply: update_clipping ...")
|
||||
print("[LAYERS] _apply: update_clipping ...")
|
||||
self._update_clipping()
|
||||
print("[EBENEN] _apply: send APPLY_OK")
|
||||
print("[LAYERS] _apply: send APPLY_OK")
|
||||
self.send("APPLY_OK", {})
|
||||
# Strukturelle Aenderung (neue/umbenannte/geloeschte Ebene) → aktives
|
||||
# Preset passt nicht mehr exakt.
|
||||
@@ -2225,7 +2225,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
# Anderes Panel (Zeichnungsebenen/Ebenen) ueber den neuen State
|
||||
# informieren — sonst hinkt es hinter der DOM-Persistenz her.
|
||||
_broadcast_state(doc)
|
||||
print("[EBENEN] _apply: DONE")
|
||||
print("[LAYERS] _apply: DONE")
|
||||
|
||||
def _ensure_active_sublayer(self):
|
||||
"""Setzt den aktiven Rhino-Layer auf den DOSSIER-Sublayer (Fallback: erste Z + 20_WAENDE)."""
|
||||
@@ -2343,7 +2343,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
any_changed = (_vis_lock_changed(z_full, merged_z)
|
||||
or _vis_lock_changed(e_full, merged_e))
|
||||
if has_new_structural:
|
||||
print("[EBENEN] _apply_visibility: structural change pending → skip save (waiting for APPLY)")
|
||||
print("[LAYERS] _apply_visibility: structural change pending → skip save (waiting for APPLY)")
|
||||
else:
|
||||
doc.Strings.SetString("dossier_zeichnungsebenen", json.dumps(merged_z, ensure_ascii=False))
|
||||
doc.Strings.SetString("dossier_ebenen", json.dumps(merged_e, ensure_ascii=False))
|
||||
@@ -2442,7 +2442,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if eb is not None: eb._notify_active_geschoss()
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] activate fehler:", ex)
|
||||
print("[SECTION] activate fehler:", ex)
|
||||
return
|
||||
# Geschoss-Pfad (default): falls vorher ein Schnitt aktiv war,
|
||||
# dessen Clipping-Planes aufraeumen + Pre-Schnitt-View restoren.
|
||||
@@ -2452,7 +2452,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if prev_was_schnitt:
|
||||
schnitte.restore_pre_schnitt_view(doc)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] cleanup beim Wechsel auf Geschoss:", ex)
|
||||
print("[SECTION] cleanup beim Wechsel auf Geschoss:", ex)
|
||||
# Aktiven Sublayer auf die GLEICHE Ebene unter dem neuen Geschoss
|
||||
# umschalten — wenn User auf "20 Wände" steht und das Geschoss
|
||||
# wechselt, soll Rhino's aktiver Layer "1OG::20_Wände" werden statt
|
||||
@@ -2495,12 +2495,12 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
vp.SetConstructionPlane(new_plane)
|
||||
updated += 1
|
||||
except Exception as ex:
|
||||
print("[EBENEN] CPlane fehler ({}): {}".format(vp.Name if vp else "?", ex))
|
||||
print("[LAYERS] CPlane fehler ({}): {}".format(vp.Name if vp else "?", ex))
|
||||
# KEIN doc.Views.Redraw() hier — die folgende SET_VISIBILITY-Round-
|
||||
# trip (30 ms debounce in React) feuert ohnehin layer_builder
|
||||
# .apply_visibility() das am Ende selbst redrawt. Sparen wir uns
|
||||
# einen doppelten Full-Repaint pro Geschoss-Klick.
|
||||
print("[EBENEN] CPlane Z={} on {} top-style view(s) set".format(okff, updated))
|
||||
print("[LAYERS] CPlane Z={} on {} top-style view(s) set".format(okff, updated))
|
||||
|
||||
def _needs_clipping_update(self, doc, prev_active_id, new_z):
|
||||
"""Liefert True wenn entweder das alte oder das neue Geschoss
|
||||
@@ -2596,16 +2596,16 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
z_id = doc.Strings.GetValue("dossier_active_id")
|
||||
if not z_id:
|
||||
print("[EBENEN] Keine aktive Zeichnungsebene")
|
||||
print("[LAYERS] Keine aktive Zeichnungsebene")
|
||||
return
|
||||
parent_idx = layer_builder._find_top_by_id(doc, z_id)
|
||||
if parent_idx < 0:
|
||||
print("[EBENEN] Parent fuer aktive Zeichnungsebene not found")
|
||||
print("[LAYERS] Parent fuer aktive Zeichnungsebene not found")
|
||||
return
|
||||
parent_id = doc.Layers[parent_idx].Id
|
||||
sub_idx = layer_builder._find_sublayer_by_code(doc, parent_id, code)
|
||||
if sub_idx < 0:
|
||||
print("[EBENEN] Sublayer {} unter {} not found".format(code, doc.Layers[parent_idx].Name))
|
||||
print("[LAYERS] Sublayer {} unter {} not found".format(code, doc.Layers[parent_idx].Name))
|
||||
return
|
||||
objs = list(doc.Objects.GetSelectedObjects(False, False))
|
||||
moved = 0
|
||||
@@ -2615,7 +2615,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if doc.Objects.ModifyAttributes(obj, attrs, True):
|
||||
moved += 1
|
||||
doc.Views.Redraw()
|
||||
print("[EBENEN] {} Objekt(e) auf {} verschoben".format(moved, doc.Layers[sub_idx].FullPath))
|
||||
print("[LAYERS] {} Objekt(e) auf {} verschoben".format(moved, doc.Layers[sub_idx].FullPath))
|
||||
|
||||
def _set_active_sublayer(self, code):
|
||||
if not code:
|
||||
@@ -2637,7 +2637,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
if z_id:
|
||||
layer_builder.set_active_sublayer(doc, z_id, code)
|
||||
else:
|
||||
print("[EBENEN] Aktive Zeichnungsebene unbekannt — Layer wird nicht set")
|
||||
print("[LAYERS] Aktive Zeichnungsebene unbekannt — Layer wird nicht set")
|
||||
|
||||
def _remove_ebene_from_state(self, code):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -2649,7 +2649,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
doc.Strings.SetString("dossier_ebenen", json.dumps(ebenen, ensure_ascii=False))
|
||||
_broadcast_state(doc)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] remove:", ex)
|
||||
print("[LAYERS] remove:", ex)
|
||||
|
||||
def _update_ebene_field(self, code, field, value):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
@@ -2677,7 +2677,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
doc.Strings.SetString("dossier_ebenen", json.dumps(ebenen, ensure_ascii=False))
|
||||
_broadcast_state(doc)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] update:", ex)
|
||||
print("[LAYERS] update:", ex)
|
||||
|
||||
# ---- Ebenen-Kombinationen / Presets (geteilt mit AUSSCHNITTE) --------
|
||||
|
||||
@@ -2715,7 +2715,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
})
|
||||
layers_out.sort(key=lambda x: x["fullPath"])
|
||||
except Exception as ex:
|
||||
print("[EBENEN] _send_combination layers:", ex)
|
||||
print("[LAYERS] _send_combination layers:", ex)
|
||||
try:
|
||||
presets = self._load_presets(doc)
|
||||
except Exception:
|
||||
@@ -2782,11 +2782,11 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
})
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
print("[EBENEN] Eye-State-Preset angewandt: {} Ebenen, {} Zeichnungsebenen".format(
|
||||
print("[LAYERS] Eye-State-Preset angewandt: {} Ebenen, {} Zeichnungsebenen".format(
|
||||
len(pe_states or []), len(pz_states or [])))
|
||||
return
|
||||
except Exception as ex:
|
||||
print("[EBENEN] _apply_combination eye-state:", ex)
|
||||
print("[LAYERS] _apply_combination eye-state:", ex)
|
||||
# Fall through zum Layer-ID-Pfad als Fallback
|
||||
|
||||
# --- Layer-ID-Pfad (alt / AUSSCHNITTE) ---
|
||||
@@ -2876,12 +2876,12 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
"ebenen": ebenen_list,
|
||||
})
|
||||
except Exception as ex:
|
||||
print("[EBENEN] STATE_SYNC push:", ex)
|
||||
print("[LAYERS] STATE_SYNC push:", ex)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] _apply_combination sync:", ex)
|
||||
print("[LAYERS] _apply_combination sync:", ex)
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
print("[EBENEN] Kombination angewandt: {} Layer".format(n))
|
||||
print("[LAYERS] Kombination angewandt: {} Layer".format(n))
|
||||
|
||||
def _save_preset(self, name, layers):
|
||||
name = (name or "").strip()
|
||||
@@ -2905,7 +2905,7 @@ class EbenenBridge(panel_base.BaseBridge):
|
||||
store_layer_presets(doc, presets)
|
||||
_notify_oberleiste_combs()
|
||||
_notify_layer_combinations_editor()
|
||||
print("[EBENEN] Kombination '{}' gespeichert ({} Layer)".format(name, len(clean)))
|
||||
print("[LAYERS] Kombination '{}' gespeichert ({} Layer)".format(name, len(clean)))
|
||||
|
||||
def _save_current_as_preset(self, name):
|
||||
"""Speichert die aktuellen Eye-States (dossier_ebenen + dossier_zeichnungs-
|
||||
@@ -3103,11 +3103,11 @@ def _install_layer_listener(bridge):
|
||||
if updated:
|
||||
_broadcast_state(doc)
|
||||
except Exception as ex:
|
||||
print("[EBENEN] Layer-Event:", ex)
|
||||
print("[LAYERS] Layer-Event:", ex)
|
||||
|
||||
Rhino.RhinoDoc.LayerTableEvent += on_layer_event
|
||||
sc.sticky["ebenen_layer_listener"] = True
|
||||
print("[EBENEN] Layer-Listener active")
|
||||
print("[LAYERS] Layer-Listener active")
|
||||
|
||||
|
||||
panel_base.register_and_open("ebenen", "Ebenen", PANEL_GUID_STR, _ebenen_bridge_factory,
|
||||
|
||||
+44
-44
@@ -104,7 +104,7 @@ def _detect_dpi():
|
||||
try:
|
||||
from System.Diagnostics import Process, ProcessStartInfo
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] auto-detect: .NET Process not available:", ex)
|
||||
print("[SCALE] auto-detect: .NET Process not available:", ex)
|
||||
return None
|
||||
if not os.path.isfile("/usr/bin/osascript"):
|
||||
# Vermutlich nicht macOS -> nichts zu detecten
|
||||
@@ -137,10 +137,10 @@ def _detect_dpi():
|
||||
if not finished:
|
||||
try: p.Kill()
|
||||
except Exception: pass
|
||||
print("[MASSSTAB] auto-detect: osascript timeout")
|
||||
print("[SCALE] auto-detect: osascript timeout")
|
||||
return None
|
||||
if p.ExitCode != 0:
|
||||
print("[MASSSTAB] auto-detect osascript ExitCode={}:".format(p.ExitCode), err)
|
||||
print("[SCALE] auto-detect osascript ExitCode={}:".format(p.ExitCode), err)
|
||||
return None
|
||||
import json as _json
|
||||
data = _json.loads((out or "").strip())
|
||||
@@ -154,15 +154,15 @@ def _detect_dpi():
|
||||
return None
|
||||
dpi = px * 25.4 / mm
|
||||
if dpi < 30.0 or dpi > 600.0:
|
||||
print("[MASSSTAB] auto-detect: DPI {:.1f} ausserhalb 30..600 -> ignoriert".format(dpi))
|
||||
print("[SCALE] auto-detect: DPI {:.1f} ausserhalb 30..600 -> ignoriert".format(dpi))
|
||||
return None
|
||||
print("[MASSSTAB] DPI auto-detected: {:.1f} physical (screen {:.0f}x{:.0f}px / ... logical {:.0f}x{:.0f})".format(
|
||||
print("[SCALE] DPI auto-detected: {:.1f} physical (screen {:.0f}x{:.0f}px / ... logical {:.0f}x{:.0f})".format(
|
||||
dpi, px, float(data.get("py") or 0),
|
||||
mm, float(data.get("mh") or 0),
|
||||
lpx, float(data.get("lpy") or 0)))
|
||||
return dpi
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] auto-detect failed:", ex)
|
||||
print("[SCALE] auto-detect failed:", ex)
|
||||
return None
|
||||
finally:
|
||||
if script_path:
|
||||
@@ -188,7 +188,7 @@ def _read_config():
|
||||
if isinstance(data, dict):
|
||||
cfg = data
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] config lesen:", ex)
|
||||
print("[SCALE] config lesen:", ex)
|
||||
_config_cache = cfg
|
||||
return cfg
|
||||
|
||||
@@ -204,7 +204,7 @@ def _write_config(cfg):
|
||||
_config_cache = cfg # Cache mit dem geschriebenen Stand aktualisieren
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] config schreiben:", ex)
|
||||
print("[SCALE] config schreiben:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@ def _set_dpi(doc, value, source="manual"):
|
||||
cfg["dpi_source"] = source
|
||||
if not _write_config(cfg):
|
||||
return False
|
||||
print("[MASSSTAB] DPI={:.1f} ({}) -> {}".format(v, source, _CONFIG_PATH))
|
||||
print("[SCALE] DPI={:.1f} ({}) -> {}".format(v, source, _CONFIG_PATH))
|
||||
return True
|
||||
|
||||
|
||||
@@ -421,9 +421,9 @@ def _apply_scaled_lineweights(doc, enabled, scale_n):
|
||||
layer.PlotWeight = new
|
||||
n_layer += 1
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] LW scale layer '{}': {}".format(layer.Name, ex))
|
||||
print("[SCALE] LW scale layer '{}': {}".format(layer.Name, ex))
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] LW scale layers:", ex)
|
||||
print("[SCALE] LW scale layers:", ex)
|
||||
|
||||
# -- Objekte -------------------------------------------------------------
|
||||
try:
|
||||
@@ -451,11 +451,11 @@ def _apply_scaled_lineweights(doc, enabled, scale_n):
|
||||
except Exception:
|
||||
pass
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] LW scale objects:", ex)
|
||||
print("[SCALE] LW scale objects:", ex)
|
||||
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
print("[MASSSTAB] PlotWeight-Skalierung x{:.1f}: {} Layer, {} Objekte angepasst".format(
|
||||
print("[SCALE] PlotWeight-Skalierung x{:.1f}: {} Layer, {} Objekte angepasst".format(
|
||||
factor, n_layer, n_obj))
|
||||
# Diagnose: zeige die ersten paar Layer mit ihren echten PlotWeights
|
||||
try:
|
||||
@@ -463,7 +463,7 @@ def _apply_scaled_lineweights(doc, enabled, scale_n):
|
||||
for layer in doc.Layers:
|
||||
if layer.IsDeleted or not layer.PlotWeight: continue
|
||||
stored = layer.GetUserString(_LW_ORIG_KEY) or "-"
|
||||
print("[MASSSTAB] Layer '{}' PlotWeight={:.3f}mm (orig={})".format(
|
||||
print("[SCALE] Layer '{}' PlotWeight={:.3f}mm (orig={})".format(
|
||||
layer.Name, float(layer.PlotWeight), stored))
|
||||
shown += 1
|
||||
if shown >= 5: break
|
||||
@@ -499,7 +499,7 @@ def write_plotweight(doc, target, value):
|
||||
try:
|
||||
target.PlotWeight = v * factor
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] write_plotweight set:", ex)
|
||||
print("[SCALE] write_plotweight set:", ex)
|
||||
|
||||
|
||||
def apply_scaled_hatches(doc, scale_n):
|
||||
@@ -572,11 +572,11 @@ def apply_scaled_hatches(doc, scale_n):
|
||||
if doc.Objects.Replace(hid, new_g):
|
||||
n_scaled += 1
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] hatch set PatternScale:", ex)
|
||||
print("[SCALE] hatch set PatternScale:", ex)
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] hatch iter:", ex)
|
||||
print("[SCALE] hatch iter:", ex)
|
||||
if n_scaled or hatch_ids:
|
||||
print("[MASSSTAB] Hatch-Skalierung: {} gefunden, {} mit Faktor x{:.2f} angepasst".format(
|
||||
print("[SCALE] Hatch-Skalierung: {} gefunden, {} mit Faktor x{:.2f} angepasst".format(
|
||||
len(hatch_ids), n_scaled, factor))
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
@@ -599,7 +599,7 @@ def post_create_hatch_scale(doc, hatch_obj, user_scale):
|
||||
a.SetUserString(_HATCH_ORIG_KEY, "{:.6f}".format(u))
|
||||
doc.Objects.ModifyAttributes(hatch_obj, a, True)
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] post_create_hatch_scale orig:", ex)
|
||||
print("[SCALE] post_create_hatch_scale orig:", ex)
|
||||
# Mit aktuellem Massstab skalieren (sqrt-Formel /10, siehe apply_scaled_hatches)
|
||||
scale_n = _read_user_scale(doc, default=1.0)
|
||||
if not scale_n or scale_n <= 0: scale_n = 1.0
|
||||
@@ -612,7 +612,7 @@ def post_create_hatch_scale(doc, hatch_obj, user_scale):
|
||||
new_g.PatternScale = u * factor
|
||||
doc.Objects.Replace(h2.Id, new_g)
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] post_create_hatch_scale rescale:", ex)
|
||||
print("[SCALE] post_create_hatch_scale rescale:", ex)
|
||||
|
||||
|
||||
def read_plotweight(target):
|
||||
@@ -656,7 +656,7 @@ def _set_lineweights_enabled(doc, enabled):
|
||||
try:
|
||||
doc.Strings.SetString(_LW_KEY, flag)
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] _set_lineweights_enabled persist:", ex)
|
||||
print("[SCALE] _set_lineweights_enabled persist:", ex)
|
||||
# Print-Display togglen — primaerer Befehl auf Mac Rhino
|
||||
on_off = "_On" if enabled else "_Off"
|
||||
yes_no = "_Yes" if enabled else "_No"
|
||||
@@ -675,11 +675,11 @@ def _set_lineweights_enabled(doc, enabled):
|
||||
scale_n = _read_user_scale(doc, default=1.0)
|
||||
_apply_scaled_lineweights(doc, enabled, scale_n)
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] PlotWeight-Scale:", ex)
|
||||
print("[SCALE] PlotWeight-Scale:", ex)
|
||||
try:
|
||||
for v in doc.Views: v.Redraw()
|
||||
except Exception: pass
|
||||
print("[MASSSTAB] Print-Display:", "AN (Strichstaerken sichtbar)" if enabled else "AUS")
|
||||
print("[SCALE] Print-Display:", "AN (Strichstaerken sichtbar)" if enabled else "AUS")
|
||||
return True
|
||||
|
||||
|
||||
@@ -702,7 +702,7 @@ def _write_user_scale(doc, ratio):
|
||||
try:
|
||||
doc.Strings.SetString(_DOC_USER_SCALE_KEY, "{:.6f}".format(float(ratio)))
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] _write_user_scale:", ex)
|
||||
print("[SCALE] _write_user_scale:", ex)
|
||||
|
||||
|
||||
def _ensure_user_scales_loaded(doc):
|
||||
@@ -723,7 +723,7 @@ def _ensure_user_scales_loaded(doc):
|
||||
except Exception:
|
||||
pass
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] _ensure_user_scales_loaded:", ex)
|
||||
print("[SCALE] _ensure_user_scales_loaded:", ex)
|
||||
_user_set_scales_loaded = True
|
||||
|
||||
|
||||
@@ -733,7 +733,7 @@ def _write_user_scales(doc):
|
||||
doc.Strings.SetString(_DOC_USER_SCALES_KEY,
|
||||
json.dumps(_user_set_scales, ensure_ascii=False))
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] _write_user_scales:", ex)
|
||||
print("[SCALE] _write_user_scales:", ex)
|
||||
|
||||
|
||||
def _get_applied_scale_for_vp(doc, vp_name):
|
||||
@@ -778,7 +778,7 @@ def _rescale_doc_patterns(doc, factor):
|
||||
doc.Objects.Replace(obj.Id, g2)
|
||||
n_h += 1
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] hatch rescale:", ex)
|
||||
print("[SCALE] hatch rescale:", ex)
|
||||
# Per-Objekt Linetype-Scale (Rhino 8 Attribut)
|
||||
try:
|
||||
a = obj.Attributes
|
||||
@@ -796,7 +796,7 @@ def _rescale_doc_patterns(doc, factor):
|
||||
except Exception:
|
||||
pass
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] _rescale_doc_patterns:", ex)
|
||||
print("[SCALE] _rescale_doc_patterns:", ex)
|
||||
|
||||
# Globale Linetype-Pattern-Length-Skala (Rhino-doc-Setting) versuchen.
|
||||
# Property-Namen variieren je nach Version — wir probieren.
|
||||
@@ -815,7 +815,7 @@ def _rescale_doc_patterns(doc, factor):
|
||||
pass
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
print("[MASSSTAB] Rescale x{:.4f}: {} Hatches, {} per-obj Linetypes{}".format(
|
||||
print("[SCALE] Rescale x{:.4f}: {} Hatches, {} per-obj Linetypes{}".format(
|
||||
factor, n_h, n_l, ", global Linetype-Scale" if set_global else ""))
|
||||
|
||||
|
||||
@@ -833,7 +833,7 @@ def _apply_scale(doc, vp, ratio):
|
||||
if vp is None or doc is None: return False
|
||||
try:
|
||||
if not vp.IsParallelProjection:
|
||||
print("[MASSSTAB] Viewport ist nicht parallel — Skala nicht setzbar")
|
||||
print("[SCALE] Viewport ist nicht parallel — Skala nicht setzbar")
|
||||
return False
|
||||
except Exception:
|
||||
return False
|
||||
@@ -856,7 +856,7 @@ def _apply_scale(doc, vp, ratio):
|
||||
# factor > 1 zoomt rein (kleineres Frustum). factor = cur_w / new_w.
|
||||
factor = cur_w / new_frustum_u
|
||||
if factor <= 0 or not (factor < 1e9 and factor > 1e-9):
|
||||
print("[MASSSTAB] _apply_scale: ungueltiger Faktor", factor)
|
||||
print("[SCALE] _apply_scale: ungueltiger Faktor", factor)
|
||||
return False
|
||||
applied = False
|
||||
# Verschiedene API-Signaturen je nach Rhino-Version durchprobieren.
|
||||
@@ -875,7 +875,7 @@ def _apply_scale(doc, vp, ratio):
|
||||
Rhino.RhinoApp.RunScript("_-Zoom _Factor {:.6f} _Enter".format(factor), False)
|
||||
applied = True
|
||||
except Exception as ex3:
|
||||
print("[MASSSTAB] _apply_scale alle Varianten failed:",
|
||||
print("[SCALE] _apply_scale alle Varianten failed:",
|
||||
ex1, ex2, ex3)
|
||||
if not applied:
|
||||
return False
|
||||
@@ -884,12 +884,12 @@ def _apply_scale(doc, vp, ratio):
|
||||
if _get_lineweights_enabled(doc):
|
||||
_apply_scaled_lineweights(doc, True, float(ratio))
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] LW-Rescale:", ex)
|
||||
print("[SCALE] LW-Rescale:", ex)
|
||||
# Hatches mit sqrt(N) skalieren — moderate Anpassung.
|
||||
try:
|
||||
apply_scaled_hatches(doc, float(ratio))
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] Hatch-Rescale:", ex)
|
||||
print("[SCALE] Hatch-Rescale:", ex)
|
||||
# Neuen Wert ZUERST persistieren — sowohl per-Viewport (fuer das
|
||||
# Dropdown, damit jeder Viewport seinen eigenen Massstab behaelt) als
|
||||
# auch als globaler "letzter Wert". WICHTIG: vor dem Raumstempel-
|
||||
@@ -899,22 +899,22 @@ def _apply_scale(doc, vp, ratio):
|
||||
try:
|
||||
_set_applied_scale_for_vp(doc, vp.Name, float(ratio))
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] per-vp scale write:", ex)
|
||||
print("[SCALE] per-vp scale write:", ex)
|
||||
# Raumstempel im masstab-Modus regennen mit der NEUEN Skala.
|
||||
try:
|
||||
import elemente as _el
|
||||
n_regen = _el.regen_masstab_raeume(doc)
|
||||
if n_regen > 0:
|
||||
print("[MASSSTAB] {} masstab-Raum/Raeume regenned".format(n_regen))
|
||||
print("[SCALE] {} masstab-Raum/Raeume regenned".format(n_regen))
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] Raumstempel-Regen:", ex)
|
||||
print("[SCALE] Raumstempel-Regen:", ex)
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
print("[MASSSTAB] Skala 1:{:.2f} set (Faktor {:.4f}, soll-frustum {:.4f} {})".format(
|
||||
print("[SCALE] Skala 1:{:.2f} set (Faktor {:.4f}, soll-frustum {:.4f} {})".format(
|
||||
ratio, factor, new_frustum_u, str(doc.ModelUnitSystem)))
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] _apply_scale:", ex)
|
||||
print("[SCALE] _apply_scale:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -924,7 +924,7 @@ def _zoom_extents(doc, vp, selected_only=False):
|
||||
if selected_only:
|
||||
objs = list(doc.Objects.GetSelectedObjects(False, False))
|
||||
if not objs:
|
||||
print("[MASSSTAB] Keine Selektion fuer Zoom-Selection")
|
||||
print("[SCALE] Keine Selektion fuer Zoom-Selection")
|
||||
return False
|
||||
bbox = Rhino.Geometry.BoundingBox.Empty
|
||||
for o in objs:
|
||||
@@ -957,7 +957,7 @@ def _zoom_extents(doc, vp, selected_only=False):
|
||||
except Exception: pass
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[MASSSTAB] _zoom_extents:", ex)
|
||||
print("[SCALE] _zoom_extents:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -972,7 +972,7 @@ class MassstabBridge(panel_base.BaseBridge):
|
||||
def _on_ready(self):
|
||||
# Einmalige Bootstrap-Detection falls noch keine DPI in der Config.
|
||||
try: _bootstrap_dpi()
|
||||
except Exception as ex: print("[MASSSTAB] bootstrap:", ex)
|
||||
except Exception as ex: print("[SCALE] bootstrap:", ex)
|
||||
self._send_state(force=True)
|
||||
|
||||
def handle(self, data):
|
||||
@@ -1014,7 +1014,7 @@ class MassstabBridge(panel_base.BaseBridge):
|
||||
elif t == "DETECT_DPI":
|
||||
v = _force_redetect_dpi()
|
||||
if v is None:
|
||||
print("[MASSSTAB] Auto-Detect: keine Bildschirminfo verfuegbar")
|
||||
print("[SCALE] Auto-Detect: keine Bildschirminfo verfuegbar")
|
||||
self._send_state(force=True)
|
||||
elif t == "SET_LINEWEIGHTS":
|
||||
doc, _ = _active_vp()
|
||||
@@ -1061,7 +1061,7 @@ def _install_listeners(bridge):
|
||||
Rhino.RhinoApp.Idle += on_idle
|
||||
Rhino.RhinoDoc.ActiveDocumentChanged += on_view_change
|
||||
sc.sticky[flag] = True
|
||||
print("[MASSSTAB] Listener active (Idle-Poll + Doc-Change)")
|
||||
print("[SCALE] Listener active (Idle-Poll + Doc-Change)")
|
||||
|
||||
|
||||
def get_current_scale_ratio():
|
||||
|
||||
+18
-18
@@ -582,7 +582,7 @@ def _try_load_png_white(png_path, size):
|
||||
g.Dispose()
|
||||
return target
|
||||
except Exception as ex:
|
||||
print("[panel_base] PNG-load failed:", ex)
|
||||
print("[CORE] PNG-load failed:", ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -628,7 +628,7 @@ def _try_load_svg_white(svg_path, size):
|
||||
g.Dispose()
|
||||
return target
|
||||
except Exception as ex:
|
||||
print("[panel_base] SVG-load failed:", ex)
|
||||
print("[CORE] SVG-load failed:", ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -717,7 +717,7 @@ def make_panel_icon(name_or_letter, bg_hex):
|
||||
if os.path.isfile(png_path):
|
||||
icon_bmp = _try_load_png_white(png_path, size - 8)
|
||||
if icon_bmp is not None: chosen_path = png_path
|
||||
else: print("[panel_base] PNG loaded but Bitmap is None:",
|
||||
else: print("[CORE] PNG loaded but Bitmap is None:",
|
||||
png_path)
|
||||
# PNG-not-found ist normal: Fallback auf SVG dann Material-Font.
|
||||
# Nur loggen wenn final ALLES failt (s.u.).
|
||||
@@ -734,12 +734,12 @@ def make_panel_icon(name_or_letter, bg_hex):
|
||||
size - 2*pad, size - 2*pad)
|
||||
used_svg = True
|
||||
used_material = True # → kein Letter-Fallback
|
||||
print("[panel_base] Icon path: {} ← {}".format(
|
||||
print("[CORE] Icon path: {} ← {}".format(
|
||||
name_or_letter, chosen_path))
|
||||
except Exception as ex:
|
||||
print("[panel_base] Icon composite error:", ex)
|
||||
print("[CORE] Icon composite error:", ex)
|
||||
except Exception as ex:
|
||||
print("[panel_base] Icon path check error:", ex)
|
||||
print("[CORE] Icon path check error:", ex)
|
||||
|
||||
# 1) Material-Icon-Font (wenn keine SVG present)
|
||||
mat_cp = _MATERIAL_CODEPOINTS.get(name_or_letter)
|
||||
@@ -759,7 +759,7 @@ def make_panel_icon(name_or_letter, bg_hex):
|
||||
drawing.Colors.White)
|
||||
used_material = True
|
||||
except Exception as ex:
|
||||
print("[panel_base] Material render error:", ex)
|
||||
print("[CORE] Material render error:", ex)
|
||||
used_material = False
|
||||
|
||||
# 2) Fallback: Buchstabe (erstes Zeichen bzw. eingegebener Buchstabe)
|
||||
@@ -787,7 +787,7 @@ def make_panel_icon(name_or_letter, bg_hex):
|
||||
tag, safe, bg_hex.lstrip("#")))
|
||||
bmp.Save(path, drawing.ImageFormat.Png)
|
||||
except Exception as ex:
|
||||
print("[panel_base] Icon save error:", ex)
|
||||
print("[CORE] Icon save error:", ex)
|
||||
path = None
|
||||
# WICHTIG: Mac Rhinos RegisterPanel meldet "expected Icon, got Icon"
|
||||
# wenn wir Eto.Drawing.Icon uebergeben — die API erwartet
|
||||
@@ -797,35 +797,35 @@ def make_panel_icon(name_or_letter, bg_hex):
|
||||
try:
|
||||
import System.Drawing as _sd
|
||||
ic = _sd.Icon(path)
|
||||
print("[panel_base] Icon created via System.Drawing.Icon(path) [{}]".format(tag))
|
||||
print("[CORE] Icon created via System.Drawing.Icon(path) [{}]".format(tag))
|
||||
return ic
|
||||
except Exception as ex:
|
||||
print("[panel_base] System.Drawing.Icon(path) failed:", ex)
|
||||
print("[CORE] System.Drawing.Icon(path) failed:", ex)
|
||||
# System.Drawing.Bitmap als Fallback (manche RegisterPanel-Overloads akzeptieren Bitmap)
|
||||
try:
|
||||
import System.Drawing as _sd
|
||||
bmp_sd = _sd.Bitmap(path)
|
||||
print("[panel_base] Icon created via System.Drawing.Bitmap(path) [{}]".format(tag))
|
||||
print("[CORE] Icon created via System.Drawing.Bitmap(path) [{}]".format(tag))
|
||||
return bmp_sd
|
||||
except Exception as ex:
|
||||
print("[panel_base] System.Drawing.Bitmap(path) failed:", ex)
|
||||
print("[CORE] System.Drawing.Bitmap(path) failed:", ex)
|
||||
# Eto.Drawing.Icon als letzter Versuch — falls Rhino-Version anders ist
|
||||
try:
|
||||
ic = drawing.Icon(path)
|
||||
print("[panel_base] Icon erzeugt via Eto.Drawing.Icon(path) [{}]".format(tag))
|
||||
print("[CORE] Icon erzeugt via Eto.Drawing.Icon(path) [{}]".format(tag))
|
||||
return ic
|
||||
except Exception as ex:
|
||||
print("[panel_base] Eto.Drawing.Icon(path) failed:", ex)
|
||||
print("[CORE] Eto.Drawing.Icon(path) failed:", ex)
|
||||
# Bitmap-Fallback (in-memory) — wenn alles vorherige fehlschlaegt
|
||||
try:
|
||||
ic = drawing.Icon(1.0, bmp)
|
||||
print("[panel_base] Icon erzeugt via Eto.Drawing.Icon(scale, bmp) [{}]".format(tag))
|
||||
print("[CORE] Icon erzeugt via Eto.Drawing.Icon(scale, bmp) [{}]".format(tag))
|
||||
return ic
|
||||
except Exception: pass
|
||||
print("[panel_base] Icon Fallback: Eto.Bitmap zurueck ({})".format(tag))
|
||||
print("[CORE] Icon Fallback: Eto.Bitmap zurueck ({})".format(tag))
|
||||
return bmp
|
||||
except Exception as ex:
|
||||
print("[panel_base] Icon-Erstellung failed:", ex)
|
||||
print("[CORE] Icon-Erstellung failed:", ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -839,7 +839,7 @@ def find_plugin():
|
||||
if p is not None:
|
||||
return p
|
||||
except Exception as ex:
|
||||
print("[panel_base] Plugin-Suche:", ex)
|
||||
print("[CORE] Plugin-Suche:", ex)
|
||||
return None
|
||||
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ def _update_linePts(doc, schnitt_id, new_p1, new_p2):
|
||||
doc.Strings.SetString("dossier_zeichnungsebenen",
|
||||
json.dumps(z_list, ensure_ascii=False))
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] persist linePts:", ex)
|
||||
print("[SECTION-GRIPS] persist linePts:", ex)
|
||||
return False
|
||||
|
||||
# Symbol regenerieren — Layer aus altem Symbol uebernehmen
|
||||
@@ -133,7 +133,7 @@ def _update_linePts(doc, schnitt_id, new_p1, new_p2):
|
||||
if i == 0 and gid and gid != System.Guid.Empty:
|
||||
first_new_id = gid
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] add new symbol curve:", ex)
|
||||
print("[SECTION-GRIPS] add new symbol curve:", ex)
|
||||
|
||||
# Neue Hauptlinie selektieren — damit der Conduit die Marker
|
||||
# gleich wieder zeigt (sonst muesste der User nochmal klicken).
|
||||
@@ -150,7 +150,7 @@ def _update_linePts(doc, schnitt_id, new_p1, new_p2):
|
||||
if active_id == schnitt_id:
|
||||
schnitte.activate_schnitt(doc, target, skip_view=True)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] re-activate:", ex)
|
||||
print("[SECTION-GRIPS] re-activate:", ex)
|
||||
|
||||
# Panel-Broadcast (linePts haben sich geaendert, Ebenen-Panel will
|
||||
# ggf. mit-rendern)
|
||||
@@ -162,7 +162,7 @@ def _update_linePts(doc, schnitt_id, new_p1, new_p2):
|
||||
except Exception: pass
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] update endpoint:", ex)
|
||||
print("[SECTION-GRIPS] update endpoint:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ class _SchnittEndpointConduit(rd.DisplayConduit):
|
||||
e.Display.DrawLine(self.drag_preview, _MARKER_HOVER, 2)
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] DrawForeground:", ex)
|
||||
print("[SECTION-GRIPS] DrawForeground:", ex)
|
||||
|
||||
|
||||
# --- MouseCallback --------------------------------------------------------
|
||||
@@ -291,7 +291,7 @@ class _SchnittMouseHandler(Rhino.UI.MouseCallback):
|
||||
sid, z, kind, anchor_pt = hit
|
||||
self._start_drag(view.Document, sid, z, kind, anchor_pt)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] OnMouseDown:", ex)
|
||||
print("[SECTION-GRIPS] OnMouseDown:", ex)
|
||||
|
||||
def _start_drag(self, doc, schnitt_id, z, kind, anchor_pt):
|
||||
if doc is None: return
|
||||
@@ -370,7 +370,7 @@ class _SchnittMouseHandler(Rhino.UI.MouseCallback):
|
||||
confirmed = bool(_update_linePts(
|
||||
doc, schnitt_id, new_p1, new_p2))
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] _start_drag:", ex)
|
||||
print("[SECTION-GRIPS] _start_drag:", ex)
|
||||
finally:
|
||||
if not confirmed:
|
||||
for pid in hidden_clip_ids:
|
||||
@@ -406,6 +406,6 @@ def install_handlers():
|
||||
handler.Enabled = True
|
||||
sc.sticky[_STICKY_CONDUIT] = conduit
|
||||
sc.sticky[_STICKY_HANDLER] = handler
|
||||
print("[SCHNITT_GRIPS] Endpoint conduit + mouse handler active")
|
||||
print("[SECTION-GRIPS] Endpoint conduit + mouse handler active")
|
||||
except Exception as ex:
|
||||
print("[SCHNITT_GRIPS] install:", ex)
|
||||
print("[SECTION-GRIPS] install:", ex)
|
||||
|
||||
+23
-23
@@ -127,9 +127,9 @@ def clear_schnitt_clipping(doc):
|
||||
if doc.Objects.Delete(obj.Id, True):
|
||||
n += 1
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] clear: {}".format(ex))
|
||||
print("[SECTION] clear: {}".format(ex))
|
||||
if n:
|
||||
print("[SCHNITT] {} Clipping-Plane(s) entfernt".format(n))
|
||||
print("[SECTION] {} Clipping-Plane(s) entfernt".format(n))
|
||||
|
||||
|
||||
def _add_clipping_plane(doc, plane, du, dv, vp_ids, role):
|
||||
@@ -137,7 +137,7 @@ def _add_clipping_plane(doc, plane, du, dv, vp_ids, role):
|
||||
try:
|
||||
gid = doc.Objects.AddClippingPlane(plane, du, dv, vp_ids)
|
||||
if gid is None or gid == System.Guid.Empty:
|
||||
print("[SCHNITT] AddClippingPlane lieferte Empty Guid")
|
||||
print("[SECTION] AddClippingPlane lieferte Empty Guid")
|
||||
return None
|
||||
obj = doc.Objects.FindId(gid)
|
||||
if obj is None: return None
|
||||
@@ -151,7 +151,7 @@ def _add_clipping_plane(doc, plane, du, dv, vp_ids, role):
|
||||
doc.Objects.ModifyAttributes(obj, attrs, True)
|
||||
return obj
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] AddClippingPlane Fehler ({}):".format(role), ex)
|
||||
print("[SECTION] AddClippingPlane Fehler ({}):".format(role), ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -181,13 +181,13 @@ def activate_schnitt(doc, z, skip_view=False):
|
||||
if z is None: return
|
||||
pts = z.get("linePts") or []
|
||||
if len(pts) < 2:
|
||||
print("[SCHNITT] '{}' hat keine linePts".format(z.get("name")))
|
||||
print("[SECTION] '{}' hat keine linePts".format(z.get("name")))
|
||||
return
|
||||
try:
|
||||
p1 = rg.Point3d(float(pts[0][0]), float(pts[0][1]), 0)
|
||||
p2 = rg.Point3d(float(pts[1][0]), float(pts[1][1]), 0)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] linePts ungueltig:", ex)
|
||||
print("[SECTION] linePts ungueltig:", ex)
|
||||
return
|
||||
dir_sign = 1 if int(z.get("dirSign", 1) or 1) >= 0 else -1
|
||||
depth_back = max(0.5, float(z.get("depthBack", 8.0) or 8.0))
|
||||
@@ -199,7 +199,7 @@ def activate_schnitt(doc, z, skip_view=False):
|
||||
|
||||
line_dir, view_dir, mid = _line_vectors(p1, p2, dir_sign)
|
||||
if line_dir is None:
|
||||
print("[SCHNITT] '{}' hat zu kurze Linie".format(z.get("name")))
|
||||
print("[SECTION] '{}' hat zu kurze Linie".format(z.get("name")))
|
||||
return
|
||||
line_len = p1.DistanceTo(p2)
|
||||
|
||||
@@ -214,7 +214,7 @@ def activate_schnitt(doc, z, skip_view=False):
|
||||
|
||||
vp_ids = _collect_viewport_ids(doc)
|
||||
if not vp_ids:
|
||||
print("[SCHNITT] keine Viewports — Plane wuerde nichts schneiden")
|
||||
print("[SECTION] keine Viewports — Plane wuerde nichts schneiden")
|
||||
return
|
||||
|
||||
n_planes = 0
|
||||
@@ -316,10 +316,10 @@ def activate_schnitt(doc, z, skip_view=False):
|
||||
vp.ZoomBoundingBox(bb)
|
||||
view.Redraw()
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] view setup:", ex)
|
||||
print("[SECTION] view setup:", ex)
|
||||
|
||||
kind = "Schnitt" if cut_at_line else "Ansicht"
|
||||
print("[SCHNITT] {} '{}' aktiviert: {} Plane(s), depthBack={:.1f}m".format(
|
||||
print("[SECTION] {} '{}' aktiviert: {} Plane(s), depthBack={:.1f}m".format(
|
||||
kind, z.get("name"), n_planes, depth_back))
|
||||
|
||||
|
||||
@@ -365,7 +365,7 @@ def save_pre_schnitt_view(doc):
|
||||
except Exception: key = _STICKY_PRE_VIEW + "_default"
|
||||
sc.sticky[key] = snap
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] save view:", ex)
|
||||
print("[SECTION] save view:", ex)
|
||||
|
||||
|
||||
def restore_pre_schnitt_view(doc):
|
||||
@@ -393,10 +393,10 @@ def restore_pre_schnitt_view(doc):
|
||||
view.Redraw()
|
||||
try: del sc.sticky[key]
|
||||
except Exception: pass
|
||||
print("[SCHNITT] Pre-Schnitt-View restored")
|
||||
print("[SECTION] Pre-Schnitt-View restored")
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] restore view:", ex)
|
||||
print("[SECTION] restore view:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -449,7 +449,7 @@ def delete_schnitt_entry(doc, schnitt_id):
|
||||
doc.Strings.SetString("dossier_zeichnungsebenen",
|
||||
json.dumps(new_lst, ensure_ascii=False))
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] delete entry:", ex)
|
||||
print("[SECTION] delete entry:", ex)
|
||||
return False
|
||||
cleanup_schnitt_artifacts(doc, schnitt_id, active_id=active_id)
|
||||
return True
|
||||
@@ -499,7 +499,7 @@ def create_schnitt_entry(doc, name, p1, p2, dir_sign=1, depth_back=8.0,
|
||||
doc.Strings.SetString("dossier_zeichnungsebenen",
|
||||
json.dumps(lst, ensure_ascii=False))
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] persist entry:", ex)
|
||||
print("[SECTION] persist entry:", ex)
|
||||
return None
|
||||
|
||||
# 2D-Symbol auf Plan
|
||||
@@ -513,7 +513,7 @@ def create_schnitt_entry(doc, name, p1, p2, dir_sign=1, depth_back=8.0,
|
||||
attrs.SetUserString(_KEY_SCHNITT_ID, schnitt_id)
|
||||
doc.Objects.AddCurve(crv, attrs)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] add symbol curve:", ex)
|
||||
print("[SECTION] add symbol curve:", ex)
|
||||
return schnitt_id
|
||||
|
||||
|
||||
@@ -539,13 +539,13 @@ def activate_schnitt_by_id(doc, schnitt_id):
|
||||
or sc.sticky.get("zeichnungsebenen_bridge_ref")
|
||||
if eb is None:
|
||||
# Fallback: direkt aktivieren ohne broadcast
|
||||
print("[SCHNITT] keine EbenenBridge — direkt aktivieren")
|
||||
print("[SECTION] keine EbenenBridge — direkt aktivieren")
|
||||
activate_schnitt(doc, z)
|
||||
return True
|
||||
eb._set_active_zeichnungsebene(z)
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] activate_by_id:", ex)
|
||||
print("[SECTION] activate_by_id:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -577,7 +577,7 @@ class _SchnittDoubleClickHandler(Rhino.UI.MouseCallback):
|
||||
return
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] OnMouseDoubleClick:", ex)
|
||||
print("[SECTION] OnMouseDoubleClick:", ex)
|
||||
|
||||
|
||||
def install_double_click_handler():
|
||||
@@ -593,9 +593,9 @@ def install_double_click_handler():
|
||||
h = _SchnittDoubleClickHandler()
|
||||
h.Enabled = True
|
||||
sc.sticky["_dossier_schnitt_dblclick_handler"] = h
|
||||
print("[SCHNITT] Double-click handler active")
|
||||
print("[SECTION] Double-click handler active")
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] install_double_click_handler:", ex)
|
||||
print("[SECTION] install_double_click_handler:", ex)
|
||||
|
||||
|
||||
def pick_schnitt_interactive(doc, defaults=None):
|
||||
@@ -642,7 +642,7 @@ def pick_schnitt_interactive(doc, defaults=None):
|
||||
p2 = rg.Point3d(p2.X, p2.Y, 0)
|
||||
|
||||
if p1.DistanceTo(p2) < 0.01:
|
||||
print("[SCHNITT] Linie zu kurz")
|
||||
print("[SECTION] Linie zu kurz")
|
||||
return None
|
||||
|
||||
# Pick Blickrichtung (welche Seite ist "hinten")
|
||||
@@ -687,7 +687,7 @@ def pick_schnitt_interactive(doc, defaults=None):
|
||||
sym_path = _el._layer_path_schnittlinie(doc, geschoss["name"])
|
||||
symbol_layer_idx = _el._ensure_layer(doc, sym_path)
|
||||
except Exception as ex:
|
||||
print("[SCHNITT] symbol-layer resolve:", ex)
|
||||
print("[SECTION] symbol-layer resolve:", ex)
|
||||
|
||||
sid = create_schnitt_entry(doc, auto_name, p1, p2,
|
||||
dir_sign=dir_sign, depth_back=depth_back,
|
||||
|
||||
+73
-73
@@ -50,7 +50,7 @@ def _sync_plot_color_to_display(attrs):
|
||||
else:
|
||||
attrs.PlotColorSource = _PLOT_FROM_LAYER
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] sync plot-color:", ex)
|
||||
print("[STYLES] sync plot-color:", ex)
|
||||
|
||||
_FILL_KEY = "ebenen_fill_hatch_id"
|
||||
_FILL_SOURCE_KEY = "ebenen_fill_source" # "layer" oder "object"
|
||||
@@ -101,7 +101,7 @@ def _save_pending_hatch(curve_id, hatch_obj):
|
||||
"timestamp": time.time(),
|
||||
}
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] save pending-hatch err:", ex)
|
||||
print("[STYLES] save pending-hatch err:", ex)
|
||||
return
|
||||
m = sc.sticky.get("gestaltung_pending_hatch")
|
||||
if not isinstance(m, dict):
|
||||
@@ -130,7 +130,7 @@ def _restore_hatch_from_pending(doc, obj, meta):
|
||||
new_hatches = rg.Hatch.Create(geom,
|
||||
meta["pattern_idx"], meta["rotation"], meta["scale"], 0.0)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] restore Hatch.Create:", ex)
|
||||
print("[STYLES] restore Hatch.Create:", ex)
|
||||
return False
|
||||
if not new_hatches or len(new_hatches) == 0: return False
|
||||
new_attrs = Rhino.DocObjects.ObjectAttributes()
|
||||
@@ -150,7 +150,7 @@ def _restore_hatch_from_pending(doc, obj, meta):
|
||||
try:
|
||||
hatch_id = doc.Objects.AddHatch(new_hatches[0], new_attrs)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] restore AddHatch:", ex)
|
||||
print("[STYLES] restore AddHatch:", ex)
|
||||
return False
|
||||
if hatch_id == System.Guid.Empty: return False
|
||||
try:
|
||||
@@ -173,7 +173,7 @@ def _color_to_hex(c):
|
||||
try:
|
||||
return "#{:02x}{:02x}{:02x}".format(int(c.R), int(c.G), int(c.B))
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] color-hex Fehler:", ex)
|
||||
print("[STYLES] color-hex Fehler:", ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -291,17 +291,17 @@ def _ebene_fill_for_layer(doc, layer):
|
||||
except Exception:
|
||||
code = None
|
||||
if not code:
|
||||
print("[GESTALTUNG] _ebene_fill_for_layer: kein dossier_code auf Layer idx={}".format(
|
||||
print("[STYLES] _ebene_fill_for_layer: kein dossier_code auf Layer idx={}".format(
|
||||
getattr(layer, "LayerIndex", "?")))
|
||||
return None
|
||||
raw = doc.Strings.GetValue("dossier_ebenen")
|
||||
if not raw:
|
||||
print("[GESTALTUNG] _ebene_fill_for_layer: dossier_ebenen leer in doc.Strings")
|
||||
print("[STYLES] _ebene_fill_for_layer: dossier_ebenen leer in doc.Strings")
|
||||
return None
|
||||
try:
|
||||
ebenen = json.loads(raw)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] _ebene_fill_for_layer: json-Fehler:", ex)
|
||||
print("[STYLES] _ebene_fill_for_layer: json-Fehler:", ex)
|
||||
return None
|
||||
if not isinstance(ebenen, list): return None
|
||||
# Rekursiv durch Tree — Sub-Ebenen sind in children verschachtelt
|
||||
@@ -320,7 +320,7 @@ def _ebene_fill_for_layer(doc, layer):
|
||||
if True:
|
||||
f = e.get("fill")
|
||||
if not isinstance(f, dict):
|
||||
print("[GESTALTUNG] _ebene_fill_for_layer: Ebene code={} has NO fill field".format(code))
|
||||
print("[STYLES] _ebene_fill_for_layer: Ebene code={} has NO fill field".format(code))
|
||||
return None
|
||||
# lw: Strichstaerke der Hatch-Linien in mm. None = "wie Stift der Ebene"
|
||||
# (ColorSource/PlotWeightSource bleibt auf FromLayer).
|
||||
@@ -340,9 +340,9 @@ def _ebene_fill_for_layer(doc, layer):
|
||||
"rotation": float(f.get("rotation", 0)) if f.get("rotation") is not None else 0.0,
|
||||
"lw": lw_val,
|
||||
}
|
||||
print("[GESTALTUNG] _ebene_fill_for_layer code={} -> {}".format(code, result))
|
||||
print("[STYLES] _ebene_fill_for_layer code={} -> {}".format(code, result))
|
||||
return result
|
||||
print("[GESTALTUNG] _ebene_fill_for_layer: code={} nicht in dossier_ebenen gefunden".format(code))
|
||||
print("[STYLES] _ebene_fill_for_layer: code={} nicht in dossier_ebenen gefunden".format(code))
|
||||
return None
|
||||
|
||||
|
||||
@@ -400,7 +400,7 @@ def _apply_ebene_fill(doc, obj):
|
||||
try:
|
||||
hatches = rg.Hatch.Create(geom, pattern_idx, rot_rad, scale_v, 0.0)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Auto-Fill Hatch.Create:", ex)
|
||||
print("[STYLES] Auto-Fill Hatch.Create:", ex)
|
||||
return False
|
||||
if not hatches or len(hatches) == 0: return False
|
||||
|
||||
@@ -429,7 +429,7 @@ def _apply_ebene_fill(doc, obj):
|
||||
try:
|
||||
hatch_id = doc.Objects.AddHatch(hatches[0], new_attrs)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Auto-Fill AddHatch:", ex)
|
||||
print("[STYLES] Auto-Fill AddHatch:", ex)
|
||||
return False
|
||||
if hatch_id == System.Guid.Empty: return False
|
||||
|
||||
@@ -440,7 +440,7 @@ def _apply_ebene_fill(doc, obj):
|
||||
if h_obj is not None:
|
||||
massstab.post_create_hatch_scale(doc, h_obj, float(fill["scale"]) or 1.0)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] post_create_hatch_scale (auto-fill):", ex)
|
||||
print("[STYLES] post_create_hatch_scale (auto-fill):", ex)
|
||||
|
||||
try:
|
||||
ca = obj.Attributes.Duplicate()
|
||||
@@ -449,7 +449,7 @@ def _apply_ebene_fill(doc, obj):
|
||||
try: doc.Objects.ModifyAttributes(obj, ca, True)
|
||||
finally: _processing.discard(obj.Id)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Auto-Fill UserString:", ex)
|
||||
print("[STYLES] Auto-Fill UserString:", ex)
|
||||
|
||||
_link_curve_hatch(obj.Id, hatch_id)
|
||||
return True
|
||||
@@ -533,7 +533,7 @@ def refresh_layer_fills(doc):
|
||||
targets.append((obj, owner))
|
||||
owner_ids.add(str(owner.Id))
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] refresh_layer_fills scan:", ex)
|
||||
print("[STYLES] refresh_layer_fills scan:", ex)
|
||||
return 0
|
||||
|
||||
updated = 0
|
||||
@@ -602,9 +602,9 @@ def refresh_layer_fills(doc):
|
||||
if h_obj is not None:
|
||||
_ms.post_create_hatch_scale(doc, h_obj, scale_v)
|
||||
except Exception as _ex:
|
||||
print("[GESTALTUNG] post_create_hatch_scale (refresh):", _ex)
|
||||
print("[STYLES] post_create_hatch_scale (refresh):", _ex)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] refresh rebuild:", ex)
|
||||
print("[STYLES] refresh rebuild:", ex)
|
||||
|
||||
# (2) Farb-Sync — Hatch mit source=='layer' folgt der Ebenen-Definition
|
||||
try:
|
||||
@@ -641,7 +641,7 @@ def refresh_layer_fills(doc):
|
||||
_processing.discard(refreshed.Id)
|
||||
color_updated += 1
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] refresh color-sync:", ex)
|
||||
print("[STYLES] refresh color-sync:", ex)
|
||||
|
||||
# (3) Hatch-PlotWeight an fill.lw anpassen (None = wieder ByLayer)
|
||||
try:
|
||||
@@ -683,7 +683,7 @@ def refresh_layer_fills(doc):
|
||||
finally:
|
||||
_processing.discard(refreshed.Id)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] refresh lw-sync:", ex)
|
||||
print("[STYLES] refresh lw-sync:", ex)
|
||||
|
||||
# --- 3) Auto-Fill nachziehen fuer Kurven ohne Hatch ---
|
||||
added = 0
|
||||
@@ -731,13 +731,13 @@ def refresh_layer_fills(doc):
|
||||
if _apply_ebene_fill(doc, obj):
|
||||
added += 1
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] refresh auto-fill:", ex)
|
||||
print("[STYLES] refresh auto-fill:", ex)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] refresh auto-fill scan:", ex)
|
||||
print("[STYLES] refresh auto-fill scan:", ex)
|
||||
|
||||
if updated or color_updated or added:
|
||||
doc.Views.Redraw()
|
||||
print("[GESTALTUNG] refresh_layer_fills: pattern={}, farbe={}, neu={}, unchanged={}".format(
|
||||
print("[STYLES] refresh_layer_fills: pattern={}, farbe={}, neu={}, unchanged={}".format(
|
||||
updated, color_updated, added, skipped))
|
||||
return updated + color_updated + added
|
||||
|
||||
@@ -791,13 +791,13 @@ def repair_plot_colors(doc):
|
||||
_processing.discard(obj.Id)
|
||||
fixed += 1
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] repair_plot_colors entry:", ex)
|
||||
print("[STYLES] repair_plot_colors entry:", ex)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] repair_plot_colors scan:", ex)
|
||||
print("[STYLES] repair_plot_colors scan:", ex)
|
||||
return 0
|
||||
if fixed:
|
||||
doc.Views.Redraw()
|
||||
print("[GESTALTUNG] repair_plot_colors: {} Objekte repariert (von {} mit Eigenfarbe gescannt)".format(fixed, scanned))
|
||||
print("[STYLES] repair_plot_colors: {} Objekte repariert (von {} mit Eigenfarbe gescannt)".format(fixed, scanned))
|
||||
return fixed
|
||||
|
||||
|
||||
@@ -1137,7 +1137,7 @@ def _selection_summary(doc):
|
||||
"fillRotation": single(fill_rots),
|
||||
"hatchPatterns": _all_hatch_patterns(doc),
|
||||
})
|
||||
print("[GESTALTUNG] sel: n={} colorSrc={} color={} layerColor={}".format(
|
||||
print("[STYLES] sel: n={} colorSrc={} color={} layerColor={}".format(
|
||||
result.get("count"), result.get("colorSource"),
|
||||
result.get("color"), result.get("layerColor")))
|
||||
return result
|
||||
@@ -1153,7 +1153,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
before = doc.Linetypes.Count
|
||||
ok = _force_load_linetypes(doc)
|
||||
after = doc.Linetypes.Count
|
||||
print("[GESTALTUNG] Linetypes before: {}, nach LoadDefaults({}): {}".format(before, ok, after))
|
||||
print("[STYLES] Linetypes before: {}, nach LoadDefaults({}): {}".format(before, ok, after))
|
||||
entries = []
|
||||
for i in range(after):
|
||||
lt = doc.Linetypes[i]
|
||||
@@ -1163,15 +1163,15 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
try: nm = lt.Name
|
||||
except Exception: nm = "?"
|
||||
entries.append("[{}] {} ({})".format(i, nm, flags))
|
||||
print("[GESTALTUNG] {}".format(" | ".join(entries)))
|
||||
print("[STYLES] {}".format(" | ".join(entries)))
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Linetype-Diagnose:", ex)
|
||||
print("[STYLES] Linetype-Diagnose:", ex)
|
||||
# One-Shot Repair: aeltere Hatches (vor dem PlotColor-Fix angelegt)
|
||||
# bekommen ihre Print-Attribute mit Display synchronisiert.
|
||||
try:
|
||||
repair_plot_colors(doc)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] repair on ready:", ex)
|
||||
print("[STYLES] repair on ready:", ex)
|
||||
self._send_selection()
|
||||
|
||||
def handle(self, data):
|
||||
@@ -1222,7 +1222,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
try:
|
||||
self.send("SELECTION", _selection_summary(doc))
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Selection:", ex)
|
||||
print("[STYLES] Selection:", ex)
|
||||
|
||||
# ---- Attribute-Setter ------------------------------------------------
|
||||
|
||||
@@ -1294,7 +1294,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
applied = True
|
||||
break
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] attr {} fehler: {}".format(prop, ex))
|
||||
print("[STYLES] attr {} fehler: {}".format(prop, ex))
|
||||
# Versuch 2: direkt auf RhinoObject
|
||||
if not applied:
|
||||
for prop in ("LinetypePatternLengthScale", "LinetypeScale"):
|
||||
@@ -1304,14 +1304,14 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
applied = True
|
||||
break
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] obj {} fehler: {}".format(prop, ex))
|
||||
print("[STYLES] obj {} fehler: {}".format(prop, ex))
|
||||
if applied:
|
||||
ok += 1
|
||||
doc.Views.Redraw()
|
||||
if ok == 0:
|
||||
print("[GESTALTUNG] Linetype-Scale nicht unterstuetzt (Rhino-Version?)")
|
||||
print("[STYLES] Linetype-Scale nicht unterstuetzt (Rhino-Version?)")
|
||||
else:
|
||||
print("[GESTALTUNG] Linetype-Scale auf {} Objekt(e) applied".format(ok))
|
||||
print("[STYLES] Linetype-Scale auf {} Objekt(e) applied".format(ok))
|
||||
self._send_selection()
|
||||
|
||||
def _set_linetype_source(self, source, name):
|
||||
@@ -1387,7 +1387,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
try: doc.Objects.ModifyAttributes(obj, ca, True)
|
||||
finally: _processing.discard(obj.Id)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] _set_fill follow-layer empty:", ex)
|
||||
print("[STYLES] _set_fill follow-layer empty:", ex)
|
||||
continue
|
||||
else:
|
||||
pattern_idx = doc.HatchPatterns.Find(fill["pattern"], True)
|
||||
@@ -1460,7 +1460,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
if h_obj is not None:
|
||||
_ms2.post_create_hatch_scale(doc, h_obj, scale_v)
|
||||
except Exception as _ex:
|
||||
print("[GESTALTUNG] post_create_hatch_scale (replace):", _ex)
|
||||
print("[STYLES] post_create_hatch_scale (replace):", _ex)
|
||||
# Farbe / Source / FILL_SOURCE-Marker aktualisieren
|
||||
refreshed = doc.Objects.FindId(existing_hatch.Id) or existing_hatch
|
||||
ha = refreshed.Attributes.Duplicate()
|
||||
@@ -1510,7 +1510,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
if h_obj is not None:
|
||||
_ms.post_create_hatch_scale(doc, h_obj, scale_v)
|
||||
except Exception as _ex:
|
||||
print("[GESTALTUNG] post_create_hatch_scale (set_fill):", _ex)
|
||||
print("[STYLES] post_create_hatch_scale (set_fill):", _ex)
|
||||
else:
|
||||
if existing_hatch is not None and not existing_hatch.IsDeleted:
|
||||
_processing.add(existing_hatch.Id)
|
||||
@@ -1545,7 +1545,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
objs = list(doc.Objects.GetSelectedObjects(False, False))
|
||||
is_layer_source = (source == "layer")
|
||||
print("[GESTALTUNG] _set_section_style: source={} enabled={} pattern={}".format(
|
||||
print("[STYLES] _set_section_style: source={} enabled={} pattern={}".format(
|
||||
source, enabled, pattern_name))
|
||||
|
||||
# SectionStyle-Klasse + Source-Enum holen.
|
||||
@@ -1557,28 +1557,28 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
try:
|
||||
SS = Rhino.DocObjects.SectionStyle
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] SectionStyle-Klasse fehlt:", ex)
|
||||
print("[STYLES] SectionStyle-Klasse fehlt:", ex)
|
||||
return
|
||||
SAS = None
|
||||
for cls_name in ("ObjectSectionAttributesSource", "SectionAttributesSource"):
|
||||
try:
|
||||
SAS = getattr(Rhino.DocObjects, cls_name)
|
||||
if SAS is not None:
|
||||
print("[GESTALTUNG] Source-Enum: Rhino.DocObjects.{}".format(cls_name))
|
||||
print("[STYLES] Source-Enum: Rhino.DocObjects.{}".format(cls_name))
|
||||
break
|
||||
except Exception: pass
|
||||
if SAS is None:
|
||||
print("[GESTALTUNG] WARNUNG: kein Source-Enum gefunden")
|
||||
print("[STYLES] WARNUNG: kein Source-Enum gefunden")
|
||||
if objs and not getattr(self, "_ss_api_logged", False):
|
||||
o = objs[0]
|
||||
for meth in ("SetCustomSectionStyle", "RemoveCustomSectionStyle",
|
||||
"HasCustomSectionStyle", "GetCustomSectionStyle"):
|
||||
print("[GESTALTUNG] RhinoObject.{}: {}".format(
|
||||
print("[STYLES] RhinoObject.{}: {}".format(
|
||||
meth, hasattr(o, meth)))
|
||||
try:
|
||||
a = o.Attributes
|
||||
for meth in ("SetCustomSectionStyle", "RemoveCustomSectionStyle"):
|
||||
print("[GESTALTUNG] Attributes.{}: {}".format(
|
||||
print("[STYLES] Attributes.{}: {}".format(
|
||||
meth, hasattr(a, meth)))
|
||||
except Exception: pass
|
||||
self._ss_api_logged = True
|
||||
@@ -1616,13 +1616,13 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
try:
|
||||
a.SectionAttributesSource = SAS.FromObject
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] set Source.FromObject fail:", ex)
|
||||
print("[STYLES] set Source.FromObject fail:", ex)
|
||||
ok_modify = doc.Objects.ModifyAttributes(obj, a, True)
|
||||
_log_post(obj, "Attributes.SetCustomSectionStyle+FromObject",
|
||||
ok_modify)
|
||||
return "Attributes.SetCustomSectionStyle"
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] attr.SetCustomSectionStyle fail:", ex)
|
||||
print("[STYLES] attr.SetCustomSectionStyle fail:", ex)
|
||||
return None
|
||||
|
||||
def _log_post(obj, via, ok_modify=None):
|
||||
@@ -1643,10 +1643,10 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
got = "HatchIndex={}".format(getattr(css, "HatchIndex", "?"))
|
||||
except Exception as ex:
|
||||
got = "get-err: {}".format(ex)
|
||||
print("[GESTALTUNG] post via {} (modify_ok={}): Source={} Got={}".format(
|
||||
print("[STYLES] post via {} (modify_ok={}): Source={} Got={}".format(
|
||||
via, ok_modify, src, got))
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] post-check:", ex)
|
||||
print("[STYLES] post-check:", ex)
|
||||
|
||||
def _remove_custom(obj):
|
||||
"""Entfernt Custom-SectionStyle + schaltet Source auf FromLayer
|
||||
@@ -1659,11 +1659,11 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
try:
|
||||
a.SectionAttributesSource = SAS.FromLayer
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] set Source.FromLayer fail:", ex)
|
||||
print("[STYLES] set Source.FromLayer fail:", ex)
|
||||
doc.Objects.ModifyAttributes(obj, a, True)
|
||||
return "Attributes.RemoveCustomSectionStyle+FromLayer"
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] attr.RemoveCustomSectionStyle fail:", ex)
|
||||
print("[STYLES] attr.RemoveCustomSectionStyle fail:", ex)
|
||||
return None
|
||||
|
||||
n_ok = 0
|
||||
@@ -1674,7 +1674,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
if is_layer_source:
|
||||
# Custom entfernen → Layer-SectionStyle wird wirksam
|
||||
via = _remove_custom(obj)
|
||||
print("[GESTALTUNG] obj {}: remove custom via {}".format(
|
||||
print("[STYLES] obj {}: remove custom via {}".format(
|
||||
str(obj.Id)[:8], via))
|
||||
if via: n_ok += 1
|
||||
continue
|
||||
@@ -1691,7 +1691,7 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
except Exception as ex:
|
||||
obj_col = None
|
||||
obj_col_src = "fail:{}".format(ex)
|
||||
print("[GESTALTUNG] obj {} color src={} val={}".format(
|
||||
print("[STYLES] obj {} color src={} val={}".format(
|
||||
str(obj.Id)[:8], obj_col_src, obj_col))
|
||||
# Per-Object: frischen SectionStyle bauen wie in layer_builder
|
||||
style = SS()
|
||||
@@ -1746,11 +1746,11 @@ class GestaltungBridge(panel_base.BaseBridge):
|
||||
break
|
||||
except Exception: pass
|
||||
via = _apply_custom(obj, style)
|
||||
print("[GESTALTUNG] obj {}: set custom via {} (hatch_idx={})".format(
|
||||
print("[STYLES] obj {}: set custom via {} (hatch_idx={})".format(
|
||||
str(obj.Id)[:8], via, pat_idx))
|
||||
if via: n_ok += 1
|
||||
|
||||
print("[GESTALTUNG] SectionStyle auf {} Objekt(e) appliziert".format(n_ok))
|
||||
print("[STYLES] SectionStyle auf {} Objekt(e) appliziert".format(n_ok))
|
||||
doc.Views.Redraw()
|
||||
self._send_selection()
|
||||
|
||||
@@ -1766,7 +1766,7 @@ def _install_selection_listener(bridge):
|
||||
# Selection-Refresh wird via Idle-Event debounced:
|
||||
# Rhino feuert pro Object-Select/Deselect einzeln. Bei mass-Delete von
|
||||
# 327 Objekten = 327 refresh-Calls → 327 IPC-Sends in den WebView →
|
||||
# UI haengt + Command-History wird mit '[GESTALTUNG] sel: n=N'
|
||||
# UI haengt + Command-History wird mit '[STYLES] sel: n=N'
|
||||
# zugemuellt. Wir setzen nur ein Dirty-Flag und feuern EINMAL beim
|
||||
# naechsten Idle-Tick.
|
||||
def refresh(*args):
|
||||
@@ -1793,7 +1793,7 @@ def _install_selection_listener(bridge):
|
||||
Rhino.RhinoApp.Idle += on_idle_flush
|
||||
sc.sticky["_gestaltung_idle_attached"] = True
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Idle-Hook fail:", ex)
|
||||
print("[STYLES] Idle-Hook fail:", ex)
|
||||
|
||||
def on_replace(sender, args):
|
||||
"""Sync Curve↔Hatch bei Move/Replace:
|
||||
@@ -1838,7 +1838,7 @@ def _install_selection_listener(bridge):
|
||||
try:
|
||||
new_curves = new_obj.Geometry.Get3dCurves(True)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] hatch.Get3dCurves:", ex)
|
||||
print("[STYLES] hatch.Get3dCurves:", ex)
|
||||
return
|
||||
if not new_curves or len(new_curves) == 0:
|
||||
return
|
||||
@@ -1847,14 +1847,14 @@ def _install_selection_listener(bridge):
|
||||
try:
|
||||
doc2.Objects.Replace(owner_id, new_curve)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] hatch→curve replace:", ex)
|
||||
print("[STYLES] hatch→curve replace:", ex)
|
||||
finally:
|
||||
_processing.discard(owner_id)
|
||||
return
|
||||
hatch_id_str = a.GetUserString(_FILL_KEY)
|
||||
if not hatch_id_str:
|
||||
return
|
||||
print("[GESTALTUNG] on_replace fuer Curve mit Fill")
|
||||
print("[STYLES] on_replace fuer Curve mit Fill")
|
||||
try:
|
||||
hatch_id = System.Guid(hatch_id_str)
|
||||
except Exception:
|
||||
@@ -1885,7 +1885,7 @@ def _install_selection_listener(bridge):
|
||||
try:
|
||||
doc.Objects.Replace(hatch_id, new_hatches[0])
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Hatch-Update:", ex)
|
||||
print("[STYLES] Hatch-Update:", ex)
|
||||
finally:
|
||||
_processing.discard(hatch_id)
|
||||
|
||||
@@ -1927,7 +1927,7 @@ def _install_selection_listener(bridge):
|
||||
hatch_id_str = _lookup_hatch_for_curve(obj.Id)
|
||||
if not hatch_id_str:
|
||||
return
|
||||
print("[GESTALTUNG] on_delete: hatch via sticky map gefunden")
|
||||
print("[STYLES] on_delete: hatch via sticky map gefunden")
|
||||
|
||||
# Pfad A: geloeschte Curve hatte eine Hatch -> Hatch mitloeschen
|
||||
if hatch_id_str:
|
||||
@@ -1944,10 +1944,10 @@ def _install_selection_listener(bridge):
|
||||
_processing.add(hatch_id)
|
||||
try:
|
||||
ok = doc.Objects.Delete(hatch_id, True)
|
||||
print("[GESTALTUNG] Curve geloescht -> Hatch {} ({})".format(
|
||||
print("[STYLES] Curve geloescht -> Hatch {} ({})".format(
|
||||
"weg" if ok else "konnte nicht geloescht werden", hatch_id))
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Hatch-Loeschen:", ex)
|
||||
print("[STYLES] Hatch-Loeschen:", ex)
|
||||
finally:
|
||||
_processing.discard(hatch_id)
|
||||
_unlink_curve(obj.Id)
|
||||
@@ -1971,7 +1971,7 @@ def _install_selection_listener(bridge):
|
||||
finally:
|
||||
_processing.discard(owner_id)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] Curve-Verweis aufraeumen:", ex)
|
||||
print("[STYLES] Curve-Verweis aufraeumen:", ex)
|
||||
|
||||
def on_add(sender, args):
|
||||
"""Auto-Fill bzw. Drag-Recovery: neues Objekt -> ggf. Hatch erzeugen.
|
||||
@@ -1998,10 +1998,10 @@ def _install_selection_listener(bridge):
|
||||
try:
|
||||
ok = _restore_hatch_from_pending(doc, obj, pending)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] on_add restore Exception:", ex)
|
||||
print("[STYLES] on_add restore Exception:", ex)
|
||||
ok = False
|
||||
if ok:
|
||||
print("[GESTALTUNG] Drag-Recovery: Hatch wiederhergestellt fuer {}".format(obj.Id))
|
||||
print("[STYLES] Drag-Recovery: Hatch wiederhergestellt fuer {}".format(obj.Id))
|
||||
b = sc.sticky.get("gestaltung_bridge")
|
||||
if b is not None:
|
||||
try: b._send_selection()
|
||||
@@ -2015,7 +2015,7 @@ def _install_selection_listener(bridge):
|
||||
try:
|
||||
ok = _apply_ebene_fill(doc, obj)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] on_add Exception:", ex)
|
||||
print("[STYLES] on_add Exception:", ex)
|
||||
return
|
||||
if ok:
|
||||
b = sc.sticky.get("gestaltung_bridge")
|
||||
@@ -2060,7 +2060,7 @@ def _install_selection_listener(bridge):
|
||||
finally:
|
||||
_processing.discard(obj.Id)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] on_modify_attrs plot-sync:", ex)
|
||||
print("[STYLES] on_modify_attrs plot-sync:", ex)
|
||||
|
||||
# --- (1) Layer-Wechsel -> Hatch mitziehen ---
|
||||
if old_lyr == new_lyr:
|
||||
@@ -2089,16 +2089,16 @@ def _install_selection_listener(bridge):
|
||||
doc.Objects.ModifyAttributes(hatch_obj, ha, True)
|
||||
finally:
|
||||
_processing.discard(hatch_id)
|
||||
print("[GESTALTUNG] Curve {} Layer geaendert -> Hatch mitgezogen".format(obj.Id))
|
||||
print("[STYLES] Curve {} Layer geaendert -> Hatch mitgezogen".format(obj.Id))
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] on_modify_attrs:", ex)
|
||||
print("[STYLES] on_modify_attrs:", ex)
|
||||
return
|
||||
# Falls die neue Ebene andere Fill-Settings hat (Pattern/Skala/Drehung),
|
||||
# die Hatch entsprechend an die neue Layer-Definition angleichen.
|
||||
try:
|
||||
refresh_layer_fills(doc)
|
||||
except Exception as ex:
|
||||
print("[GESTALTUNG] on_modify_attrs refresh:", ex)
|
||||
print("[STYLES] on_modify_attrs refresh:", ex)
|
||||
|
||||
Rhino.RhinoDoc.SelectObjects += refresh
|
||||
Rhino.RhinoDoc.DeselectObjects += refresh
|
||||
@@ -2108,7 +2108,7 @@ def _install_selection_listener(bridge):
|
||||
Rhino.RhinoDoc.AddRhinoObject += on_add
|
||||
Rhino.RhinoDoc.ModifyObjectAttributes += on_modify_attrs
|
||||
sc.sticky[flag] = True
|
||||
print("[GESTALTUNG] Listener active (Selection + Hatch-Live-Update + Ebene-Auto-Fill + Layer-Sync)")
|
||||
print("[STYLES] Listener active (Selection + Hatch-Live-Update + Ebene-Auto-Fill + Layer-Sync)")
|
||||
|
||||
|
||||
def _bridge_factory():
|
||||
|
||||
+134
-134
@@ -33,7 +33,7 @@ def _run(cmd):
|
||||
try:
|
||||
Rhino.RhinoApp.RunScript(cmd, False)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] RunScript-Fehler ({}): {}".format(cmd, ex))
|
||||
print("[TOOLBAR] RunScript-Fehler ({}): {}".format(cmd, ex))
|
||||
|
||||
|
||||
# --- Window-Layout-Management + App-Settings -------------------------------
|
||||
@@ -74,7 +74,7 @@ def _settings_load():
|
||||
data["windowLayout"] = data.get("defaultLayout") or ""
|
||||
return data
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] settings_load ({}):".format(p), ex)
|
||||
print("[TOOLBAR] settings_load ({}):".format(p), ex)
|
||||
return {}
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ def _settings_save(data):
|
||||
.encode("utf-8"))
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] settings_save:", ex)
|
||||
print("[TOOLBAR] settings_save:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ def _apply_viewport_colors(cfg):
|
||||
try:
|
||||
appset = Rhino.ApplicationSettings.AppearanceSettings
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] AppearanceSettings not available:", ex)
|
||||
print("[TOOLBAR] AppearanceSettings not available:", ex)
|
||||
return False
|
||||
applied = []
|
||||
for key, attr in _VIEWPORT_COLOR_ATTRS:
|
||||
@@ -144,13 +144,13 @@ def _apply_viewport_colors(cfg):
|
||||
setattr(appset, attr, col)
|
||||
applied.append(key)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] view-color {} -> {}: {}".format(key, attr, ex))
|
||||
print("[TOOLBAR] view-color {} -> {}: {}".format(key, attr, ex))
|
||||
if applied:
|
||||
# Redraw aller Viewports damit die neuen Farben sofort sichtbar werden.
|
||||
try:
|
||||
for v in Rhino.RhinoDoc.ActiveDoc.Views: v.Redraw()
|
||||
except Exception: pass
|
||||
print("[OBERLEISTE] Viewport-Colors applied:", applied)
|
||||
print("[TOOLBAR] Viewport-Colors applied:", applied)
|
||||
return bool(applied)
|
||||
|
||||
|
||||
@@ -162,20 +162,20 @@ def _import_display_modes(paths):
|
||||
try:
|
||||
DMD = Rhino.Display.DisplayModeDescription
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] DisplayModeDescription not available:", ex)
|
||||
print("[TOOLBAR] DisplayModeDescription not available:", ex)
|
||||
return 0
|
||||
for p in paths:
|
||||
try:
|
||||
if not os.path.isfile(p):
|
||||
print("[OBERLEISTE] Display-Mode-Pfad fehlt:", p); continue
|
||||
print("[TOOLBAR] Display-Mode-Pfad fehlt:", p); continue
|
||||
res = DMD.ImportFromFile(p)
|
||||
if res:
|
||||
count += 1
|
||||
print("[OBERLEISTE] Display-Mode importiert:", p)
|
||||
print("[TOOLBAR] Display-Mode importiert:", p)
|
||||
else:
|
||||
print("[OBERLEISTE] Display-Mode-Import lieferte False:", p)
|
||||
print("[TOOLBAR] Display-Mode-Import lieferte False:", p)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Display-Mode-Import-Fehler ({}): {}".format(p, ex))
|
||||
print("[TOOLBAR] Display-Mode-Import-Fehler ({}): {}".format(p, ex))
|
||||
if count:
|
||||
# Cache invalidieren damit das Display-Dropdown die Neuen aufnimmt.
|
||||
try:
|
||||
@@ -222,7 +222,7 @@ def _apply_dossier_plan_attrs(dmd):
|
||||
and ("idden" in n or "ngent" in n or "ilho" in n
|
||||
or "ire" in n or "soc" in n or "dge" in n
|
||||
or "ech" in n or "hade" in n or "ection" in n)])
|
||||
print("[OBERLEISTE] Plan-Mode Attrs-Inventar:", ", ".join(relevant))
|
||||
print("[TOOLBAR] Plan-Mode Attrs-Inventar:", ", ".join(relevant))
|
||||
# Sub-Objekt-Settings sind in Rhino 8 oft eigene Klassen
|
||||
for sub in ("CurveSettings", "ObjectSettings", "ShadingSettings",
|
||||
"MeshSpecificAttributes"):
|
||||
@@ -234,10 +234,10 @@ def _apply_dossier_plan_attrs(dmd):
|
||||
or "soc" in n or "ire" in n
|
||||
or "dge" in n)])
|
||||
if sub_props:
|
||||
print("[OBERLEISTE] Plan-Mode {}:".format(sub),
|
||||
print("[TOOLBAR] Plan-Mode {}:".format(sub),
|
||||
", ".join(sub_props))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode inspect:", ex)
|
||||
print("[TOOLBAR] Plan-Mode inspect:", ex)
|
||||
_apply_dossier_plan_attrs._props_logged = True
|
||||
# Surfaces gefuellt + weiss + kein Shading
|
||||
try: attrs.ShadingEnabled = False
|
||||
@@ -282,7 +282,7 @@ def _apply_dossier_plan_attrs(dmd):
|
||||
attrs.MeshSpecificAttributes.ShowMeshWires = False
|
||||
attrs.MeshSpecificAttributes.ShowMeshVertices = False
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode MeshSpecificAttributes:", ex)
|
||||
print("[TOOLBAR] Plan-Mode MeshSpecificAttributes:", ex)
|
||||
# Section-Styles MUESSEN aktiv sein damit Custom-Section-Styles
|
||||
# (per-Layer oder per-Object) tatsaechlich gerendert werden. Default
|
||||
# ist False — d.h. Section-Hatches werden zugewiesen aber nicht angezeigt.
|
||||
@@ -294,10 +294,10 @@ def _apply_dossier_plan_attrs(dmd):
|
||||
except Exception: pass
|
||||
try: attrs.UseSectionStyles = True
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode UseSectionStyles set:", ex)
|
||||
print("[TOOLBAR] Plan-Mode UseSectionStyles set:", ex)
|
||||
try: post_uss = bool(attrs.UseSectionStyles)
|
||||
except Exception: post_uss = None
|
||||
print("[OBERLEISTE] Plan-Mode UseSectionStyles pre={} post={}".format(
|
||||
print("[TOOLBAR] Plan-Mode UseSectionStyles pre={} post={}".format(
|
||||
pre_uss, post_uss))
|
||||
# Clipping-Edges + Fills sichtbar
|
||||
try: attrs.ShowClippingEdges = True
|
||||
@@ -314,7 +314,7 @@ def _apply_dossier_plan_attrs(dmd):
|
||||
try:
|
||||
DisplayModeDescription.UpdateDisplayMode(dmd)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode update:", ex)
|
||||
print("[TOOLBAR] Plan-Mode update:", ex)
|
||||
|
||||
|
||||
_TEMPLATES_DIR = os.path.join(_HERE, "templates")
|
||||
@@ -336,11 +336,11 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
template_basename: 'dossier_plan.ini' / 'dossier_3d.ini'
|
||||
fallback_base_name: 'Technical' / 'Shaded' — Mode zum Klonen
|
||||
"""
|
||||
print("[OBERLEISTE] {}: check...".format(target_name))
|
||||
print("[TOOLBAR] {}: check...".format(target_name))
|
||||
try:
|
||||
from Rhino.Display import DisplayModeDescription
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] {}: DMD not available: {}".format(target_name, ex))
|
||||
print("[TOOLBAR] {}: DMD not available: {}".format(target_name, ex))
|
||||
return False
|
||||
import re
|
||||
template_ini_path = os.path.join(_TEMPLATES_DIR, template_basename)
|
||||
@@ -353,7 +353,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
# benutzen — wir nur neu importieren wenn sich die Template-Datei
|
||||
# geaendert hat.
|
||||
template_exists = os.path.isfile(template_ini_path)
|
||||
print("[OBERLEISTE] {} template: {}".format(target_name,
|
||||
print("[TOOLBAR] {} template: {}".format(target_name,
|
||||
"found at " + template_ini_path if template_exists else "missing"))
|
||||
# Fallback-Clone nur fuer "Dossier Plan" erlauben. Bei anderen Modes
|
||||
# ohne Template skippen — sonst klonen wir z.B. den Raytraced-Mode mit
|
||||
@@ -361,7 +361,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
# und ALLE Modes nach Restart verschwinden lassen kann. User soll den
|
||||
# Mode in Rhino bauen + per "Save As" -> templates/<basename> exportieren.
|
||||
if not template_exists and target_name != "Dossier Plan":
|
||||
print("[OBERLEISTE] {}: no template → skip (in Rhino bauen, "
|
||||
print("[TOOLBAR] {}: no template → skip (in Rhino bauen, "
|
||||
"Display-Mode -> Save As -> {})".format(
|
||||
target_name, template_ini_path))
|
||||
return False
|
||||
@@ -380,7 +380,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
# loeschen + reloaden wenn er das Template neu laden will.
|
||||
# Vermeidet delete-loop wenn das Template ini-Werte hat die mein
|
||||
# alter check als "falsch" einstufte.
|
||||
print("[OBERLEISTE] Display mode: existing found, no action (delete manually to refresh)")
|
||||
print("[TOOLBAR] Display mode: existing found, no action (delete manually to refresh)")
|
||||
return True
|
||||
# Sonst kein existing → vor dem Import alle Orphan-Modes mit unserer
|
||||
# Guid ODER Namen "Dossier Plan" wegputzen (alte kaputte Versionen
|
||||
@@ -401,14 +401,14 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
DisplayModeDescription.DeleteDisplayMode(dm.Id)
|
||||
cleanup_count += 1
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode cleanup delete fail:", ex)
|
||||
print("[TOOLBAR] Plan-Mode cleanup delete fail:", ex)
|
||||
if cleanup_count > 0:
|
||||
print("[OBERLEISTE] Plan-Mode: {} Orphan-Mode(s) entfernt vor Import".format(
|
||||
print("[TOOLBAR] Plan-Mode: {} Orphan-Mode(s) entfernt vor Import".format(
|
||||
cleanup_count))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode cleanup:", ex)
|
||||
print("[TOOLBAR] Plan-Mode cleanup:", ex)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode list:", ex)
|
||||
print("[TOOLBAR] Plan-Mode list:", ex)
|
||||
return False
|
||||
# ----------------------------------------------------------------
|
||||
# SOURCE: Template-ini bevorzugt (User hat den Mode manuell gebaut +
|
||||
@@ -422,10 +422,10 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
try:
|
||||
with open(template_ini_path, "r", encoding="utf-8", errors="ignore") as f:
|
||||
content = f.read()
|
||||
print("[OBERLEISTE] {}: Template geladen ({} bytes)".format(
|
||||
print("[TOOLBAR] {}: Template geladen ({} bytes)".format(
|
||||
target_name, len(content)))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] {} Template read: {}".format(target_name, ex))
|
||||
print("[TOOLBAR] {} Template read: {}".format(target_name, ex))
|
||||
return False
|
||||
else:
|
||||
# Fallback: einen Base-Mode exportieren + patchen
|
||||
@@ -440,21 +440,21 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
except Exception: pass
|
||||
if base is not None: break
|
||||
if base is None:
|
||||
print("[OBERLEISTE] Plan-Mode: kein Basis-Modus gefunden")
|
||||
print("[TOOLBAR] Plan-Mode: kein Basis-Modus gefunden")
|
||||
return False
|
||||
try:
|
||||
ok_export = False
|
||||
try:
|
||||
ok_export = bool(DisplayModeDescription.ExportToFile(base, tmp_path))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode ExportToFile:", ex)
|
||||
print("[TOOLBAR] Plan-Mode ExportToFile:", ex)
|
||||
if not ok_export:
|
||||
print("[OBERLEISTE] Plan-Mode: ExportToFile failed")
|
||||
print("[TOOLBAR] Plan-Mode: ExportToFile failed")
|
||||
return False
|
||||
with open(tmp_path, "r", encoding="utf-8", errors="ignore") as f:
|
||||
content = f.read()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode fallback read ini:", ex)
|
||||
print("[TOOLBAR] Plan-Mode fallback read ini:", ex)
|
||||
return False
|
||||
|
||||
try:
|
||||
@@ -479,10 +479,10 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
content = content.replace(old_guid.upper(),
|
||||
target_guid.upper())
|
||||
else:
|
||||
print("[OBERLEISTE] {}: kein DisplayMode-Section-Header "
|
||||
print("[TOOLBAR] {}: kein DisplayMode-Section-Header "
|
||||
"gefunden — Mode-Guid nicht ersetzt".format(target_name))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] {} Guid-Replace: {}".format(target_name, ex))
|
||||
print("[TOOLBAR] {} Guid-Replace: {}".format(target_name, ex))
|
||||
# Plan-Mode-Settings in der ini patchen — Rhino-DisplayMode-ini hat
|
||||
# nested Sections wie [DisplayMode\<guid>\Objects\Surfaces]. Wir
|
||||
# patchen nur EXISTIERENDE Keys (Rhino's Parser stripped unbekannte
|
||||
@@ -518,27 +518,27 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
try:
|
||||
content, found = _ini_replace(content, key, val)
|
||||
if found:
|
||||
print("[OBERLEISTE] Plan-Mode ini {}={}".format(key, val))
|
||||
print("[TOOLBAR] Plan-Mode ini {}={}".format(key, val))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode ini-set {}={} fail: {}".format(
|
||||
print("[TOOLBAR] Plan-Mode ini-set {}={} fail: {}".format(
|
||||
key, val, ex))
|
||||
try:
|
||||
with open(tmp_path, "w", encoding="utf-8") as f:
|
||||
f.write(content)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode write ini:", ex)
|
||||
print("[TOOLBAR] Plan-Mode write ini:", ex)
|
||||
return False
|
||||
# Import
|
||||
try:
|
||||
ok_import = bool(DisplayModeDescription.ImportFromFile(tmp_path))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode ImportFromFile:", ex)
|
||||
print("[TOOLBAR] Plan-Mode ImportFromFile:", ex)
|
||||
return False
|
||||
if not ok_import:
|
||||
print("[OBERLEISTE] Plan-Mode: ImportFromFile gab False")
|
||||
print("[TOOLBAR] Plan-Mode: ImportFromFile gab False")
|
||||
return False
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode clone:", ex)
|
||||
print("[TOOLBAR] Plan-Mode clone:", ex)
|
||||
return False
|
||||
# Neu importierten Mode holen + tweaken
|
||||
try:
|
||||
@@ -553,14 +553,14 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
dmd = dm; break
|
||||
except Exception: pass
|
||||
if dmd is None:
|
||||
print("[OBERLEISTE] Plan-Mode: nach Import not found")
|
||||
print("[TOOLBAR] Plan-Mode: nach Import not found")
|
||||
return False
|
||||
# KEIN _apply_dossier_plan_attrs() hier — der wuerde
|
||||
# UpdateDisplayMode() aufrufen und die ini-Werte (ClipSectionUsage,
|
||||
# TechnicalMask) mit den Python-Default-Attrs ueberschreiben.
|
||||
# Die ini hat schon alle richtigen Werte.
|
||||
src = "Template" if template_exists else (base.EnglishName if base else "?")
|
||||
print("[OBERLEISTE] Display-Mode 'Dossier Plan' angelegt (Basis: {})".format(src))
|
||||
print("[TOOLBAR] Display-Mode 'Dossier Plan' angelegt (Basis: {})".format(src))
|
||||
# Sanity-Check: liste alle Display-Modes auf damit wir sehen ob unser
|
||||
# Mode wirklich registriert ist (und mit welchem Namen).
|
||||
try:
|
||||
@@ -569,7 +569,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
try:
|
||||
names.append(dm_check.EnglishName)
|
||||
except Exception: pass
|
||||
print("[OBERLEISTE] Plan-Mode: alle registrierten Modes: {}".format(
|
||||
print("[TOOLBAR] Plan-Mode: alle registrierten Modes: {}".format(
|
||||
", ".join(names)))
|
||||
except Exception: pass
|
||||
# Cache invalidieren damit das Dropdown ihn sieht
|
||||
@@ -579,7 +579,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
|
||||
except Exception: pass
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Plan-Mode tweak:", ex)
|
||||
print("[TOOLBAR] Plan-Mode tweak:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -600,24 +600,24 @@ def _save_thumbnail(doc):
|
||||
import System.Drawing as _sd
|
||||
size = _sd.Size(int(w), int(h))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] thumb size:", ex); return
|
||||
print("[TOOLBAR] thumb size:", ex); return
|
||||
try:
|
||||
bmp = view.CaptureToBitmap(size)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] CaptureToBitmap:", ex); return
|
||||
print("[TOOLBAR] CaptureToBitmap:", ex); return
|
||||
if bmp is None: return
|
||||
thumb_path = doc_path + ".thumb.png"
|
||||
try:
|
||||
import System.Drawing.Imaging as _imaging
|
||||
bmp.Save(thumb_path, _imaging.ImageFormat.Png)
|
||||
print("[OBERLEISTE] Thumb gespeichert:", thumb_path)
|
||||
print("[TOOLBAR] Thumb gespeichert:", thumb_path)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Thumb-Save:", ex)
|
||||
print("[TOOLBAR] Thumb-Save:", ex)
|
||||
finally:
|
||||
try: bmp.Dispose()
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _save_thumbnail Fehler:", ex)
|
||||
print("[TOOLBAR] _save_thumbnail Fehler:", ex)
|
||||
|
||||
|
||||
def _launch_dossier_app():
|
||||
@@ -637,17 +637,17 @@ def _launch_dossier_app():
|
||||
if os.path.isdir(ap):
|
||||
try:
|
||||
_subprocess.Popen(["open", ap])
|
||||
print("[OBERLEISTE] Dossier-Launcher gestartet:", ap)
|
||||
print("[TOOLBAR] Dossier-Launcher gestartet:", ap)
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open Dossier-App ({}):".format(ap), ex)
|
||||
print("[TOOLBAR] open Dossier-App ({}):".format(ap), ex)
|
||||
# Letzter Versuch: per App-Name (sucht in /Applications)
|
||||
try:
|
||||
_subprocess.Popen(["open", "-a", "Dossier"])
|
||||
print("[OBERLEISTE] Dossier via 'open -a Dossier' gestartet")
|
||||
print("[TOOLBAR] Dossier via 'open -a Dossier' gestartet")
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open -a Dossier:", ex)
|
||||
print("[TOOLBAR] open -a Dossier:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -685,7 +685,7 @@ def _list_window_layouts():
|
||||
for n in names:
|
||||
if n and n not in out: out.append(str(n))
|
||||
if out:
|
||||
print("[OBERLEISTE] Layouts via API.{}: {}".format(attr, out))
|
||||
print("[TOOLBAR] Layouts via API.{}: {}".format(attr, out))
|
||||
return out
|
||||
except Exception: continue
|
||||
except Exception: pass
|
||||
@@ -706,9 +706,9 @@ def _list_window_layouts():
|
||||
name = _extract_layout_name_from_xml(content)
|
||||
if name and name not in out: out.append(name)
|
||||
if out:
|
||||
print("[OBERLEISTE] {} Layouts via XML gefunden".format(len(out)))
|
||||
print("[TOOLBAR] {} Layouts via XML gefunden".format(len(out)))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] workspaces-scan:", ex)
|
||||
print("[TOOLBAR] workspaces-scan:", ex)
|
||||
|
||||
# 3) Legacy .rwl-Pfade (Windows + ggf. aeltere Rhino-Versionen)
|
||||
candidate_dirs = [
|
||||
@@ -731,7 +731,7 @@ def _list_window_layouts():
|
||||
except Exception: continue
|
||||
|
||||
if not out:
|
||||
print("[OBERLEISTE] Keine Layouts gefunden.")
|
||||
print("[TOOLBAR] Keine Layouts gefunden.")
|
||||
return out
|
||||
|
||||
|
||||
@@ -756,7 +756,7 @@ def _layout_name_to_guid(name):
|
||||
if xn and xn.strip().lower() == target:
|
||||
return os.path.splitext(fn)[0]
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] name_to_guid:", ex)
|
||||
print("[TOOLBAR] name_to_guid:", ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -786,7 +786,7 @@ def _rhino_last_restored_layout_guid():
|
||||
txt)
|
||||
if m: return m.group(1).strip().lower()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] last-restored read:", ex)
|
||||
print("[TOOLBAR] last-restored read:", ex)
|
||||
return None
|
||||
|
||||
|
||||
@@ -806,7 +806,7 @@ def _is_layout_recently_applied(name, max_age_sec=600):
|
||||
except Exception: return False
|
||||
return 0 <= age <= max_age_sec
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] layout-marker read:", ex)
|
||||
print("[TOOLBAR] layout-marker read:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -824,7 +824,7 @@ def _mark_layout_applied(name):
|
||||
"appliedAt": _t.time(),
|
||||
}, ensure_ascii=False).encode("utf-8"))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] layout-marker write:", ex)
|
||||
print("[TOOLBAR] layout-marker write:", ex)
|
||||
|
||||
|
||||
def _apply_window_layout(name):
|
||||
@@ -836,7 +836,7 @@ def _apply_window_layout(name):
|
||||
(siehe _is_layout_recently_applied).
|
||||
"""
|
||||
if not name:
|
||||
print("[OBERLEISTE] apply_window_layout: leerer Name")
|
||||
print("[TOOLBAR] apply_window_layout: leerer Name")
|
||||
return False
|
||||
# KEIN Content-Skip mehr: Mac Rhino's Auto-Restore aus LastRestoredWindow
|
||||
# Layout dockt Eto-WebView-Panels NICHT korrekt — sie spawnen floating in
|
||||
@@ -859,7 +859,7 @@ def _apply_window_layout(name):
|
||||
|
||||
def _apply_window_layout_impl(name):
|
||||
guid = _layout_name_to_guid(name)
|
||||
print("[OBERLEISTE] apply_window_layout: name='{}' guid='{}'".format(
|
||||
print("[TOOLBAR] apply_window_layout: name='{}' guid='{}'".format(
|
||||
name, guid))
|
||||
|
||||
# 1) Direkt ueber Rhino.UI-API per Reflection. Wir loggen WAS gefunden
|
||||
@@ -877,10 +877,10 @@ def _apply_window_layout_impl(name):
|
||||
if meth is not None:
|
||||
api_candidates.append((cls_name, meth_name, meth))
|
||||
if api_candidates:
|
||||
print("[OBERLEISTE] API-Kandidaten gefunden:", len(api_candidates),
|
||||
print("[TOOLBAR] API-Kandidaten gefunden:", len(api_candidates),
|
||||
[(c, m) for c, m, _ in api_candidates])
|
||||
else:
|
||||
print("[OBERLEISTE] No Rhino.UI API candidates (Mac Rhino "
|
||||
print("[TOOLBAR] No Rhino.UI API candidates (Mac Rhino "
|
||||
"exposed das nicht statisch). Falling back to scripted commands.")
|
||||
# Args zum Probieren: GUID zuerst (falls present) dann Name.
|
||||
# Beide als 1-arg Tuple. Doppelte Klammern haben in der alten Version
|
||||
@@ -892,13 +892,13 @@ def _apply_window_layout_impl(name):
|
||||
for arg in arg_variants:
|
||||
try:
|
||||
res = meth(*arg)
|
||||
print("[OBERLEISTE] apply via Rhino.UI.{}.{}({!r}) -> {}".format(
|
||||
print("[TOOLBAR] apply via Rhino.UI.{}.{}({!r}) -> {}".format(
|
||||
cls_name, meth_name, arg[0], res))
|
||||
return True
|
||||
except Exception:
|
||||
continue
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] API-Path Fehler:", ex)
|
||||
print("[TOOLBAR] API-Path Fehler:", ex)
|
||||
|
||||
# 2) Scripted Rhino-Commands. STOP on success — RunScript liefert bool.
|
||||
# Beobachtung aus Mac Rhino 8 Logs: _-WindowLayout "<name>" _Enter wirft
|
||||
@@ -915,10 +915,10 @@ def _apply_window_layout_impl(name):
|
||||
try: Rhino.RhinoApp.SendKeystrokes("\x1b", False)
|
||||
except Exception: pass
|
||||
res = Rhino.RhinoApp.RunScript(cmd, False)
|
||||
print("[OBERLEISTE] RunScript({!r}) -> {}".format(cmd, res))
|
||||
print("[TOOLBAR] RunScript({!r}) -> {}".format(cmd, res))
|
||||
return bool(res)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] RunScript-Fehler ({}): {}".format(cmd, ex))
|
||||
print("[TOOLBAR] RunScript-Fehler ({}): {}".format(cmd, ex))
|
||||
return False
|
||||
|
||||
quoted = '"{}"'.format(name.replace('"', ''))
|
||||
@@ -930,10 +930,10 @@ def _apply_window_layout_impl(name):
|
||||
]
|
||||
for cmd in cmd_candidates:
|
||||
if _try_cmd(cmd):
|
||||
print("[OBERLEISTE] Command succeeded, stopping.")
|
||||
print("[TOOLBAR] Command succeeded, stopping.")
|
||||
return True
|
||||
|
||||
print("[OBERLEISTE] apply_window_layout: kein Weg hat funktioniert. "
|
||||
print("[TOOLBAR] apply_window_layout: kein Weg hat funktioniert. "
|
||||
"Wenn das Layout im Rhino-UI bekannt ist aber hier nicht greift, "
|
||||
"manuell via Window-Menue zu wechseln.")
|
||||
return False
|
||||
@@ -948,7 +948,7 @@ def open_settings_dialog():
|
||||
import Eto.Forms as _ef
|
||||
import Eto.Drawing as _ed
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Eto-Import failed:", ex); return
|
||||
print("[TOOLBAR] Eto-Import failed:", ex); return
|
||||
|
||||
cfg = _settings_load()
|
||||
layouts = _list_window_layouts()
|
||||
@@ -1072,7 +1072,7 @@ def open_settings_dialog():
|
||||
dlg.Content = layout
|
||||
try: dlg.Show()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Settings-Dialog Show:", ex)
|
||||
print("[TOOLBAR] Settings-Dialog Show:", ex)
|
||||
|
||||
|
||||
def _get_active_viewport_name():
|
||||
@@ -1121,7 +1121,7 @@ def _list_all_command_names():
|
||||
"Properties","Layer","Snap","Ortho","Planar","Save","SaveAs"):
|
||||
names.add(n)
|
||||
out = sorted(names)
|
||||
print("[OBERLEISTE] {} Rhino commands enumerated for autocomplete".format(len(out)))
|
||||
print("[TOOLBAR] {} Rhino commands enumerated for autocomplete".format(len(out)))
|
||||
return out
|
||||
|
||||
|
||||
@@ -1188,7 +1188,7 @@ def _list_display_modes():
|
||||
except Exception:
|
||||
continue
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _list_display_modes:", ex)
|
||||
print("[TOOLBAR] _list_display_modes:", ex)
|
||||
_display_modes_cache = out
|
||||
return out
|
||||
|
||||
@@ -1202,10 +1202,10 @@ def _set_display_mode(name):
|
||||
if dm.LocalName == name or dm.EnglishName == name:
|
||||
v.ActiveViewport.DisplayMode = dm
|
||||
v.Redraw()
|
||||
print("[OBERLEISTE] Display-Mode: {}".format(name))
|
||||
print("[TOOLBAR] Display-Mode: {}".format(name))
|
||||
return True
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _set_display_mode:", ex)
|
||||
print("[TOOLBAR] _set_display_mode:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -1251,7 +1251,7 @@ def _set_osnap_mode(key, enabled):
|
||||
new = (cur | flag_i) if enabled else (cur & ~flag_i)
|
||||
s.OsnapModes = Rhino.ApplicationSettings.OsnapModes(new)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _set_osnap_mode:", ex)
|
||||
print("[TOOLBAR] _set_osnap_mode:", ex)
|
||||
|
||||
|
||||
def _is_grid_visible():
|
||||
@@ -1306,14 +1306,14 @@ def _set_ortho(v):
|
||||
try:
|
||||
Rhino.ApplicationSettings.ModelAidSettings.Ortho = bool(v)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _set_ortho:", ex)
|
||||
print("[TOOLBAR] _set_ortho:", ex)
|
||||
|
||||
|
||||
def _set_grid_snap(v):
|
||||
try:
|
||||
Rhino.ApplicationSettings.ModelAidSettings.GridSnap = bool(v)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _set_grid_snap:", ex)
|
||||
print("[TOOLBAR] _set_grid_snap:", ex)
|
||||
|
||||
|
||||
def _set_osnap_master(v):
|
||||
@@ -1326,7 +1326,7 @@ def _set_osnap_master(v):
|
||||
setattr(s, attr, bool(v))
|
||||
return
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _set_osnap_master:", ex)
|
||||
print("[TOOLBAR] _set_osnap_master:", ex)
|
||||
|
||||
|
||||
# --- Bridge -----------------------------------------------------------------
|
||||
@@ -1358,7 +1358,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
try:
|
||||
self._all_commands = _list_all_command_names()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] command-enum:", ex)
|
||||
print("[TOOLBAR] command-enum:", ex)
|
||||
self._all_commands = []
|
||||
# Sofort an UI pushen (Autocomplete wird live)
|
||||
try:
|
||||
@@ -1368,7 +1368,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
except Exception: pass
|
||||
try: Rhino.RhinoApp.Idle += _load_once
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] schedule command-load:", ex)
|
||||
print("[TOOLBAR] schedule command-load:", ex)
|
||||
self._commands_loading = False
|
||||
|
||||
def _on_ready(self):
|
||||
@@ -1401,7 +1401,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
if _apply_viewport_colors(cfg):
|
||||
sc.sticky["_dossier_view_colors_applied"] = True
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] auto-apply (layout/colors):", ex)
|
||||
print("[TOOLBAR] auto-apply (layout/colors):", ex)
|
||||
# Splash-Screen (falls noch offen) jetzt wegmachen — Layout-Apply ist
|
||||
# durch, Panels sind in finaler Position. hide() dispatcht intern
|
||||
# auf Main-Thread via Rhino.Idle (Mac-safe).
|
||||
@@ -1409,7 +1409,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
import _startup_splash as _ss
|
||||
_ss.hide()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] splash hide:", ex)
|
||||
print("[TOOLBAR] splash hide:", ex)
|
||||
self._send_state(force=True)
|
||||
|
||||
def handle(self, data):
|
||||
@@ -1449,7 +1449,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
try:
|
||||
self._sync_referenz_for_print(doc, enabled)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] sync referenz for print:", ex)
|
||||
print("[TOOLBAR] sync referenz for print:", ex)
|
||||
self._send_state(force=True)
|
||||
elif t == "SET_DPI":
|
||||
doc, _ = massstab._active_vp()
|
||||
@@ -1472,19 +1472,19 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
try:
|
||||
import kamera
|
||||
kamera.set_top_view(vp); handled = True
|
||||
except Exception as ex: print("[OBERLEISTE] top:", ex)
|
||||
except Exception as ex: print("[TOOLBAR] top:", ex)
|
||||
elif v == "Perspective":
|
||||
_run("_-{} _Enter".format(v)); handled = True
|
||||
elif v == "Iso":
|
||||
try:
|
||||
import kamera
|
||||
kamera._set_iso(vp, "NE"); handled = True
|
||||
except Exception as ex: print("[OBERLEISTE] iso:", ex)
|
||||
except Exception as ex: print("[TOOLBAR] iso:", ex)
|
||||
elif v in ("N", "O", "S", "W"):
|
||||
try:
|
||||
import kamera
|
||||
kamera.set_cardinal_view(vp, v); handled = True
|
||||
except Exception as ex: print("[OBERLEISTE] cardinal:", ex)
|
||||
except Exception as ex: print("[TOOLBAR] cardinal:", ex)
|
||||
elif v in ("Front", "Right", "Left", "Back", "Bottom"):
|
||||
_run("_-{} _Enter".format(v)); handled = True
|
||||
if handled:
|
||||
@@ -1497,7 +1497,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
import kamera
|
||||
kamera.open_as_window()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open kamera:", ex)
|
||||
print("[TOOLBAR] open kamera:", ex)
|
||||
|
||||
# --- About-Fenster ----------------------------------------------
|
||||
elif t == "OPEN_ABOUT":
|
||||
@@ -1505,7 +1505,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
import about
|
||||
about.open_as_window()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open about:", ex)
|
||||
print("[TOOLBAR] open about:", ex)
|
||||
|
||||
# --- Cheatsheet (Shortcuts-Uebersicht) --------------------------
|
||||
elif t == "OPEN_CHEATSHEET":
|
||||
@@ -1513,7 +1513,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
import welcome
|
||||
welcome.show_cheatsheet()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open cheatsheet:", ex)
|
||||
print("[TOOLBAR] open cheatsheet:", ex)
|
||||
|
||||
# --- Text-Erstellung (Floating-Input) ---------------------------
|
||||
elif t == "CREATE_TEXT":
|
||||
@@ -1521,7 +1521,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
import text_create
|
||||
text_create.create_text()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] create text:", ex)
|
||||
print("[TOOLBAR] create text:", ex)
|
||||
elif t == "SET_TEXT_SETTINGS":
|
||||
try:
|
||||
import text_create
|
||||
@@ -1530,7 +1530,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
text_create.save_settings(doc, patch)
|
||||
text_create.apply_settings_to_selection(doc, patch)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] text settings:", ex)
|
||||
print("[TOOLBAR] text settings:", ex)
|
||||
self._send_state(force=True)
|
||||
elif t == "APPLY_TEXT_STYLE":
|
||||
try:
|
||||
@@ -1538,7 +1538,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
text_create.apply_style(
|
||||
Rhino.RhinoDoc.ActiveDoc, p.get("id"))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] apply text style:", ex)
|
||||
print("[TOOLBAR] apply text style:", ex)
|
||||
self._send_state(force=True)
|
||||
elif t == "SAVE_TEXT_STYLE":
|
||||
try:
|
||||
@@ -1547,7 +1547,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
sid = text_create.save_style(doc, p.get("name") or "Stil")
|
||||
if sid: text_create.set_active_style_id(doc, sid)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] save text style:", ex)
|
||||
print("[TOOLBAR] save text style:", ex)
|
||||
self._send_state(force=True)
|
||||
elif t == "DELETE_TEXT_STYLE":
|
||||
try:
|
||||
@@ -1555,7 +1555,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
text_create.delete_style(
|
||||
Rhino.RhinoDoc.ActiveDoc, p.get("id"))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] delete text style:", ex)
|
||||
print("[TOOLBAR] delete text style:", ex)
|
||||
self._send_state(force=True)
|
||||
|
||||
# --- Masse (Mass-Style) -----------------------------------------
|
||||
@@ -1566,30 +1566,30 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
mass_style.set_active_id(doc, p.get("id"))
|
||||
mass_style.regen_all_rooms(doc)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] masse active:", ex)
|
||||
print("[TOOLBAR] masse active:", ex)
|
||||
self._send_state(force=True)
|
||||
elif t == "OPEN_MASSE_SETTINGS":
|
||||
try:
|
||||
import masse_settings
|
||||
masse_settings.open_as_window()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open masse:", ex)
|
||||
print("[TOOLBAR] open masse:", ex)
|
||||
elif t == "OPEN_PROJECT_SETTINGS":
|
||||
# Delegiert an EBENEN-Bridge (sie haelt die Satellite-Logik fuer
|
||||
# Projekt-Settings + Library).
|
||||
try:
|
||||
eb = sc.sticky.get("ebenen_bridge_ref")
|
||||
if eb is not None: eb._open_project_settings()
|
||||
else: print("[OBERLEISTE] open project-settings: ebenen_bridge_ref nicht da")
|
||||
else: print("[TOOLBAR] open project-settings: ebenen_bridge_ref nicht da")
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open project-settings:", ex)
|
||||
print("[TOOLBAR] open project-settings:", ex)
|
||||
elif t == "OPEN_LIBRARY":
|
||||
try:
|
||||
eb = sc.sticky.get("ebenen_bridge_ref")
|
||||
if eb is not None: eb._open_library()
|
||||
else: print("[OBERLEISTE] open library: ebenen_bridge_ref nicht da")
|
||||
else: print("[TOOLBAR] open library: ebenen_bridge_ref nicht da")
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open library:", ex)
|
||||
print("[TOOLBAR] open library:", ex)
|
||||
|
||||
# --- Darstellung (SIA-400 LoD globaler Override) -----------------
|
||||
elif t == "SET_DARSTELLUNG":
|
||||
@@ -1600,7 +1600,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
elemente.set_aktive_darstellung(doc, new_v)
|
||||
elemente.regenerate_all_oeffnungen(doc)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] set darstellung:", ex)
|
||||
print("[TOOLBAR] set darstellung:", ex)
|
||||
self._send_state(force=True)
|
||||
|
||||
# --- Display-Mode -----------------------------------------------
|
||||
@@ -1646,7 +1646,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
if b is not None:
|
||||
b._send_state()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] notify overrides:", ex)
|
||||
print("[TOOLBAR] notify overrides:", ex)
|
||||
elif t == "SAVE_OVERRIDES_PRESET":
|
||||
# Quick-Save direkt aus der Topbar: aktuelle Doc-Rules unter
|
||||
# gegebenem Namen ablegen und sofort als activePreset markieren.
|
||||
@@ -1667,13 +1667,13 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
if b is not None:
|
||||
b._send_state()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] notify overrides:", ex)
|
||||
print("[TOOLBAR] notify overrides:", ex)
|
||||
elif t == "OPEN_OVERRIDES_PANEL":
|
||||
try:
|
||||
import overrides_panel
|
||||
overrides_panel.open_as_window()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open_as_window Overrides:", ex)
|
||||
print("[TOOLBAR] open_as_window Overrides:", ex)
|
||||
|
||||
# --- Ebenenkombinationen ----------------------------------------
|
||||
elif t == "PICK_LAYER_COMBINATION":
|
||||
@@ -1701,7 +1701,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
elif t == "OPEN_LAYER_COMBINATIONS_DIALOG":
|
||||
try: rhinopanel.open_layer_combinations_window()
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open layer-combinations:", ex)
|
||||
print("[TOOLBAR] open layer-combinations:", ex)
|
||||
|
||||
# --- Referenzlinien-Sichtbarkeit togglen ------------------------
|
||||
# Shortcut fuer die Layer-Sichtbarkeit der Referenzlinien-Ebene
|
||||
@@ -1713,7 +1713,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
doc = Rhino.RhinoDoc.ActiveDoc
|
||||
if doc is None: return
|
||||
want_visible = bool(p.get("visible"))
|
||||
print("[OBERLEISTE] TOGGLE_REFERENZLINIEN -> {}".format(want_visible))
|
||||
print("[TOOLBAR] TOGGLE_REFERENZLINIEN -> {}".format(want_visible))
|
||||
|
||||
# Keyword-driven: alle Ebenen mit Namen 'Referenz' im JSON
|
||||
# finden (rekursiv), deren Codes sammeln, dann ALLE Rhino-
|
||||
@@ -1747,7 +1747,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
doc.Strings.SetString("dossier_ebenen",
|
||||
_json.dumps(ebenen, ensure_ascii=False))
|
||||
except Exception: pass
|
||||
print("[OBERLEISTE] Referenz-Codes gefunden: {}".format(codes))
|
||||
print("[TOOLBAR] Referenz-Codes gefunden: {}".format(codes))
|
||||
|
||||
# Rhino-Layer fuer jeden Code toggeln (Praefix-Match)
|
||||
n_toggled = 0
|
||||
@@ -1763,7 +1763,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
doc.Layers.Modify(layer, i, True)
|
||||
n_toggled += 1
|
||||
except Exception: pass
|
||||
print("[OBERLEISTE] {} Rhino-Layer getoggelt".format(n_toggled))
|
||||
print("[TOOLBAR] {} Rhino-Layer getoggelt".format(n_toggled))
|
||||
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
@@ -1771,7 +1771,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
rhinopanel._broadcast_state(doc)
|
||||
self._send_state(force=True)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] TOGGLE_REFERENZLINIEN:", ex)
|
||||
print("[TOOLBAR] TOGGLE_REFERENZLINIEN:", ex)
|
||||
|
||||
# --- Anordnen (DisplayOrder Z-Stack) ----------------------------
|
||||
# Nutzt Rhinos native _BringToFront / _BringForward / _SendBackward
|
||||
@@ -1797,7 +1797,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
Rhino.RhinoApp.SendKeystrokes("\x1b", False)
|
||||
Rhino.RhinoApp.RunScript(cmd, False)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] arrange {}: {}".format(cmd, ex))
|
||||
print("[TOOLBAR] arrange {}: {}".format(cmd, ex))
|
||||
|
||||
# --- Command-Line Integration -----------------------------------
|
||||
elif t == "RUN_COMMAND":
|
||||
@@ -1815,7 +1815,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
Rhino.RhinoApp.SendKeystrokes("\x1b", False)
|
||||
Rhino.RhinoApp.RunScript(cmd, False)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] RunScript-Fehler:", ex)
|
||||
print("[TOOLBAR] RunScript-Fehler:", ex)
|
||||
elif t == "SEND_KEYS":
|
||||
text = p.get("text") or ""
|
||||
append_enter = bool(p.get("enter", True))
|
||||
@@ -1825,7 +1825,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
Rhino.RhinoApp.SendKeystrokes("\x1b", False)
|
||||
Rhino.RhinoApp.SendKeystrokes(text, append_enter)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] SendKeystrokes-Fehler:", ex)
|
||||
print("[TOOLBAR] SendKeystrokes-Fehler:", ex)
|
||||
elif t == "CANCEL_COMMAND":
|
||||
try:
|
||||
# Doppel-ESC: einmal um Eingabe-Buffer zu clearen, einmal um
|
||||
@@ -1927,7 +1927,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
sc.sticky[key] = snap
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
print("[OBERLEISTE] Print AN: {} Referenz-Layer ausgeblendet".format(len(snap)))
|
||||
print("[TOOLBAR] Print AN: {} Referenz-Layer ausgeblendet".format(len(snap)))
|
||||
else:
|
||||
# Restore
|
||||
snap = sc.sticky.get(key) or {}
|
||||
@@ -1946,7 +1946,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
except Exception: pass
|
||||
try: doc.Views.Redraw()
|
||||
except Exception: pass
|
||||
print("[OBERLEISTE] Print AUS: {} Referenz-Layer-Sichtbarkeit restored".format(n))
|
||||
print("[TOOLBAR] Print AUS: {} Referenz-Layer-Sichtbarkeit restored".format(n))
|
||||
|
||||
def _send_state(self, force=False):
|
||||
doc, vp = massstab._active_vp()
|
||||
@@ -2116,10 +2116,10 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
# Re-Apply vom Launcher-Pending — sonst triggert es eine
|
||||
# zweite Re-Mount-Welle ALLER Panels.
|
||||
if sc.sticky.get("_dossier_layout_applied"):
|
||||
print("[OBERLEISTE] pendingApplyLayout '{}' — Cold-Start "
|
||||
print("[TOOLBAR] pendingApplyLayout '{}' — Cold-Start "
|
||||
"hat in dieser Session bereits applied, skip".format(pend_layout))
|
||||
else:
|
||||
print("[OBERLEISTE] pendingApplyLayout:", pend_layout)
|
||||
print("[TOOLBAR] pendingApplyLayout:", pend_layout)
|
||||
_apply_window_layout(pend_layout)
|
||||
sc.sticky["_dossier_layout_applied"] = True
|
||||
cfg.pop("pendingApplyLayout", None)
|
||||
@@ -2127,14 +2127,14 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
|
||||
if cfg.get("pendingApplyViewColors"):
|
||||
if _apply_viewport_colors(cfg):
|
||||
print("[OBERLEISTE] pendingApplyViewColors: applied")
|
||||
print("[TOOLBAR] pendingApplyViewColors: applied")
|
||||
cfg["pendingApplyViewColors"] = False
|
||||
mutated = True
|
||||
|
||||
modes = cfg.get("pendingImportDisplayModes") or []
|
||||
if isinstance(modes, list) and modes:
|
||||
n = _import_display_modes(modes)
|
||||
print("[OBERLEISTE] pendingImportDisplayModes: {} importiert".format(n))
|
||||
print("[TOOLBAR] pendingImportDisplayModes: {} importiert".format(n))
|
||||
cfg["pendingImportDisplayModes"] = []
|
||||
mutated = True
|
||||
|
||||
@@ -2164,21 +2164,21 @@ class OberleisteBridge(panel_base.BaseBridge):
|
||||
})
|
||||
if clean:
|
||||
cfg["layerSchema"] = clean
|
||||
print("[OBERLEISTE] Ebenen-Export: {} Sublayer "
|
||||
print("[TOOLBAR] Ebenen-Export: {} Sublayer "
|
||||
"ins Launcher-Schema geschrieben".format(len(clean)))
|
||||
else:
|
||||
print("[OBERLEISTE] Ebenen-Export: doc.Strings hatte "
|
||||
print("[TOOLBAR] Ebenen-Export: doc.Strings hatte "
|
||||
"keine gueltigen Ebenen")
|
||||
else:
|
||||
print("[OBERLEISTE] Ebenen-Export: doc.Strings ['dossier_ebenen'] leer")
|
||||
print("[TOOLBAR] Ebenen-Export: doc.Strings ['dossier_ebenen'] leer")
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] Ebenen-Export Fehler:", ex)
|
||||
print("[TOOLBAR] Ebenen-Export Fehler:", ex)
|
||||
cfg["pendingExportEbenen"] = False
|
||||
mutated = True
|
||||
|
||||
if mutated: _settings_save(cfg)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] check_pending_launcher_signals:", ex)
|
||||
print("[TOOLBAR] check_pending_launcher_signals:", ex)
|
||||
|
||||
def tick_idle(self):
|
||||
# Command-Prompt aendert sich oft schnell -> separater Pfad: wenn sich
|
||||
@@ -2227,7 +2227,7 @@ def _open_dossier_settings_panel():
|
||||
)
|
||||
sc.sticky["_dossier_settings_form"] = form
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] open_dossier_settings_panel:", ex)
|
||||
print("[TOOLBAR] open_dossier_settings_panel:", ex)
|
||||
|
||||
|
||||
def _reload_all_panel_langs():
|
||||
@@ -2241,9 +2241,9 @@ def _reload_all_panel_langs():
|
||||
try:
|
||||
panel_base.load_inline(val._wv, val.mode)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] reload_lang ({}): {}".format(key, ex))
|
||||
print("[TOOLBAR] reload_lang ({}): {}".format(key, ex))
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] _reload_all_panel_langs:", ex)
|
||||
print("[TOOLBAR] _reload_all_panel_langs:", ex)
|
||||
|
||||
|
||||
# --- Listener-Hookup --------------------------------------------------------
|
||||
@@ -2273,14 +2273,14 @@ def _install_listeners(bridge):
|
||||
doc = getattr(e, "Document", None) or Rhino.RhinoDoc.ActiveDoc
|
||||
_save_thumbnail(doc)
|
||||
except Exception as ex:
|
||||
print("[OBERLEISTE] on_end_save:", ex)
|
||||
print("[TOOLBAR] on_end_save:", ex)
|
||||
|
||||
Rhino.RhinoApp.Idle += on_idle
|
||||
Rhino.RhinoDoc.ActiveDocumentChanged += on_view_change
|
||||
try: Rhino.RhinoDoc.EndSaveDocument += on_end_save
|
||||
except Exception as ex: print("[OBERLEISTE] EndSaveDocument-Hook:", ex)
|
||||
except Exception as ex: print("[TOOLBAR] EndSaveDocument-Hook:", ex)
|
||||
sc.sticky[flag] = True
|
||||
print("[OBERLEISTE] Listener active")
|
||||
print("[TOOLBAR] Listener active")
|
||||
|
||||
|
||||
def _bridge_factory():
|
||||
@@ -2299,7 +2299,7 @@ for _name, _guid, _tmpl, _fallback in _DOSSIER_DISPLAY_MODES:
|
||||
try:
|
||||
_ensure_dossier_display_mode(_name, _guid, _tmpl, _fallback)
|
||||
except Exception as _ex:
|
||||
print("[OBERLEISTE] ensure {}: {}".format(_name, _ex))
|
||||
print("[TOOLBAR] ensure {}: {}".format(_name, _ex))
|
||||
try:
|
||||
panel_base._t_mark("display_modes", "oberleiste", _t_dm_start)
|
||||
except Exception: pass
|
||||
|
||||
+3
-3
@@ -45,11 +45,11 @@ class WerkzeugeBridge(panel_base.BaseBridge):
|
||||
if cmd.startswith("_") and "\n" not in cmd and ";" not in cmd:
|
||||
try:
|
||||
Rhino.RhinoApp.RunScript(cmd, False)
|
||||
print("[WERKZEUGE] {}".format(cmd))
|
||||
print("[TOOLS] {}".format(cmd))
|
||||
except Exception as ex:
|
||||
print("[WERKZEUGE] RunScript-Fehler:", ex)
|
||||
print("[TOOLS] RunScript-Fehler:", ex)
|
||||
else:
|
||||
print("[WERKZEUGE] Befehl ignoriert (kein '_' Praefix oder unsicher):", cmd)
|
||||
print("[TOOLS] Befehl ignoriert (kein '_' Praefix oder unsicher):", cmd)
|
||||
|
||||
|
||||
def _bridge_factory():
|
||||
|
||||
@@ -96,7 +96,7 @@ class _TreppeEndpointConduit(rd.DisplayConduit):
|
||||
try: e.Display.DrawDot(pt, "●", _MARKER_FILL, _MARKER_BORDER)
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[TREPPE_GRIPS] DrawForeground:", ex)
|
||||
print("[STAIR-GRIPS] DrawForeground:", ex)
|
||||
|
||||
|
||||
_STICKY_CONDUIT = "_dossier_treppe_grips_conduit"
|
||||
@@ -113,6 +113,6 @@ def install_handlers():
|
||||
conduit = _TreppeEndpointConduit()
|
||||
conduit.Enabled = True
|
||||
sc.sticky[_STICKY_CONDUIT] = conduit
|
||||
print("[TREPPE_GRIPS] Endpoint conduit active")
|
||||
print("[STAIR-GRIPS] Endpoint conduit active")
|
||||
except Exception as ex:
|
||||
print("[TREPPE_GRIPS] install:", ex)
|
||||
print("[STAIR-GRIPS] install:", ex)
|
||||
|
||||
+6
-6
@@ -133,7 +133,7 @@ def _replace_axis_vertex(doc, axis_obj, vertex_idx, new_pt):
|
||||
new_curve = rg.PolylineCurve(rg.Polyline(pts))
|
||||
return doc.Objects.Replace(axis_obj.Id, new_curve)
|
||||
except Exception as ex:
|
||||
print("[WAND_GRIPS] replace vertex:", ex)
|
||||
print("[WALL-GRIPS] replace vertex:", ex)
|
||||
return False
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ class _EndpointConduit(rd.DisplayConduit):
|
||||
e.Display.DrawLine(line, _MARKER_HOVER, 2)
|
||||
except Exception: pass
|
||||
except Exception as ex:
|
||||
print("[WAND_GRIPS] DrawForeground:", ex)
|
||||
print("[WALL-GRIPS] DrawForeground:", ex)
|
||||
|
||||
|
||||
# --- Mouse-Handler --------------------------------------------------------
|
||||
@@ -268,7 +268,7 @@ class _EndpointMouseHandler(Rhino.UI.MouseCallback):
|
||||
axis, vidx, world_pt = hit
|
||||
self._start_drag(view.Document, axis, vidx, world_pt)
|
||||
except Exception as ex:
|
||||
print("[WAND_GRIPS] OnMouseDown:", ex)
|
||||
print("[WALL-GRIPS] OnMouseDown:", ex)
|
||||
|
||||
def _start_drag(self, doc, axis, vertex_idx, anchor_pt):
|
||||
"""Startet eine Rhino-GetPoint-Interaktion um den Vertex zu
|
||||
@@ -319,7 +319,7 @@ class _EndpointMouseHandler(Rhino.UI.MouseCallback):
|
||||
new_pt = gp.Point()
|
||||
_replace_axis_vertex(doc, axis, vertex_idx, new_pt)
|
||||
except Exception as ex:
|
||||
print("[WAND_GRIPS] _start_drag:", ex)
|
||||
print("[WALL-GRIPS] _start_drag:", ex)
|
||||
finally:
|
||||
self.conduit.drag_key = None
|
||||
self.conduit.drag_preview = None
|
||||
@@ -354,6 +354,6 @@ def install_handlers():
|
||||
handler.Enabled = True
|
||||
sc.sticky[_STICKY_CONDUIT] = conduit
|
||||
sc.sticky[_STICKY_HANDLER] = handler
|
||||
print("[WAND_GRIPS] Endpoint conduit + mouse handler active")
|
||||
print("[WALL-GRIPS] Endpoint conduit + mouse handler active")
|
||||
except Exception as ex:
|
||||
print("[WAND_GRIPS] install:", ex)
|
||||
print("[WALL-GRIPS] install:", ex)
|
||||
|
||||
Reference in New Issue
Block a user