From b9a21240266b7df29df3824e908adbd953c53493 Mon Sep 17 00:00:00 2001 From: karim Date: Sat, 6 Jun 2026 12:48:27 +0200 Subject: [PATCH] Rename all log tags to match English module names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [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] --- rhino/aliases/loader.py | 34 ++--- rhino/ausschnitte.py | 66 ++++----- rhino/begin_cmd_hook.py | 12 +- rhino/curve_vertex_dots.py | 6 +- rhino/dimensions.py | 14 +- rhino/layer_builder.py | 18 +-- rhino/layers_panel.py | 166 +++++++++++------------ rhino/massstab.py | 88 ++++++------ rhino/panel_base.py | 36 ++--- rhino/schnitt_grips.py | 18 +-- rhino/schnitte.py | 46 +++---- rhino/styles.py | 146 ++++++++++---------- rhino/toolbar.py | 268 ++++++++++++++++++------------------- rhino/tools.py | 6 +- rhino/treppe_grips.py | 6 +- rhino/wand_grips.py | 12 +- 16 files changed, 471 insertions(+), 471 deletions(-) diff --git a/rhino/aliases/loader.py b/rhino/aliases/loader.py index 5d79fab..bb11160 100644 --- a/rhino/aliases/loader.py +++ b/rhino/aliases/loader.py @@ -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('') if sec_start < 0: - if verbose: print("[ALIAS-LOADER] ShortcutKeys-section fehlt") + if verbose: print("[ALIASES] ShortcutKeys-section fehlt") continue sec_end = content.find('', 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 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)) diff --git a/rhino/ausschnitte.py b/rhino/ausschnitte.py index 69daffe..b54a0cd 100644 --- a/rhino/ausschnitte.py +++ b/rhino/ausschnitte.py @@ -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): diff --git a/rhino/begin_cmd_hook.py b/rhino/begin_cmd_hook.py index 8a6ff4d..c061059 100644 --- a/rhino/begin_cmd_hook.py +++ b/rhino/begin_cmd_hook.py @@ -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): diff --git a/rhino/curve_vertex_dots.py b/rhino/curve_vertex_dots.py index 6418d16..e5c10db 100644 --- a/rhino/curve_vertex_dots.py +++ b/rhino/curve_vertex_dots.py @@ -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) diff --git a/rhino/dimensions.py b/rhino/dimensions.py index ee19240..d5c3020 100644 --- a/rhino/dimensions.py +++ b/rhino/dimensions.py @@ -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(): diff --git a/rhino/layer_builder.py b/rhino/layer_builder.py index a2b359a..fe12d86 100644 --- a/rhino/layer_builder.py +++ b/rhino/layer_builder.py @@ -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): diff --git a/rhino/layers_panel.py b/rhino/layers_panel.py index 8ac06cf..b276d92 100644 --- a/rhino/layers_panel.py +++ b/rhino/layers_panel.py @@ -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, diff --git a/rhino/massstab.py b/rhino/massstab.py index c0124db..30ee164 100644 --- a/rhino/massstab.py +++ b/rhino/massstab.py @@ -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(): diff --git a/rhino/panel_base.py b/rhino/panel_base.py index 5ed927c..a47345a 100644 --- a/rhino/panel_base.py +++ b/rhino/panel_base.py @@ -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 diff --git a/rhino/schnitt_grips.py b/rhino/schnitt_grips.py index a1f76cb..6712722 100644 --- a/rhino/schnitt_grips.py +++ b/rhino/schnitt_grips.py @@ -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) diff --git a/rhino/schnitte.py b/rhino/schnitte.py index 2ed6ffd..6609626 100644 --- a/rhino/schnitte.py +++ b/rhino/schnitte.py @@ -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, diff --git a/rhino/styles.py b/rhino/styles.py index 90db819..1ba5465 100644 --- a/rhino/styles.py +++ b/rhino/styles.py @@ -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(): diff --git a/rhino/toolbar.py b/rhino/toolbar.py index b92b620..f611bad 100644 --- a/rhino/toolbar.py +++ b/rhino/toolbar.py @@ -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/ 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\\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 "" _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 diff --git a/rhino/tools.py b/rhino/tools.py index 825b302..f51790d 100644 --- a/rhino/tools.py +++ b/rhino/tools.py @@ -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(): diff --git a/rhino/treppe_grips.py b/rhino/treppe_grips.py index 6951561..ccd0c89 100644 --- a/rhino/treppe_grips.py +++ b/rhino/treppe_grips.py @@ -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) diff --git a/rhino/wand_grips.py b/rhino/wand_grips.py index ed267a3..e318af3 100644 --- a/rhino/wand_grips.py +++ b/rhino/wand_grips.py @@ -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)