Translate remaining internal log messages to English

- EBENEN: drawing levels updated, sublayer not found, saved/verified
- GESTALTUNG: Linetypes before/after, fill field, opened/focused
- CLIP: disabled done
- ELEMENTE: Bulk-op, Listener bail
- Global: not found, not available, unchanged, failed, present
This commit is contained in:
2026-06-06 12:19:10 +02:00
parent 9fcada260e
commit 24f6b76f06
21 changed files with 112 additions and 112 deletions
+1 -1
View File
@@ -23,7 +23,7 @@ for dm in DisplayModeDescription.GetDisplayModes():
dmd = dm; break dmd = dm; break
if dmd is None: if dmd is None:
print("[INSPECT] 'Dossier Plan' nicht gefunden") print("[INSPECT] 'Dossier Plan' not found")
else: else:
attrs = dmd.DisplayAttributes attrs = dmd.DisplayAttributes
print("[INSPECT] Mode gefunden: {} (Id={})".format(dmd.EnglishName, dmd.Id)) print("[INSPECT] Mode gefunden: {} (Id={})".format(dmd.EnglishName, dmd.Id))
+2 -2
View File
@@ -165,7 +165,7 @@ def _t_join_attempt(doc, sel):
"""T-Join: 2 OFFENE Kurven wobei der EINE Endpunkt der einen Kurve """T-Join: 2 OFFENE Kurven wobei der EINE Endpunkt der einen Kurve
nahe (< 1m) auf der ANDEREN Kurve mitten landet (zwischen deren nahe (< 1m) auf der ANDEREN Kurve mitten landet (zwischen deren
Endpunkten). Schiebt diesen Endpunkt exakt auf die andere Kurve. Endpunkten). Schiebt diesen Endpunkt exakt auf die andere Kurve.
Die andere Kurve bleibt unveraendert. Die andere Kurve bleibt unchanged.
Auch 1-Wand-Modus: wenn nur 1 wand_axis selektiert, sucht automatisch Auch 1-Wand-Modus: wenn nur 1 wand_axis selektiert, sucht automatisch
die naechste andere Wand und snappt diese eine. die naechste andere Wand und snappt diese eine.
@@ -407,7 +407,7 @@ def _run():
curves = [o.Geometry for o in objs] curves = [o.Geometry for o in objs]
result = rg.Curve.CreateBooleanUnion(curves, tol) result = rg.Curve.CreateBooleanUnion(curves, tol)
except Exception as ex: except Exception as ex:
print("[SMART-JOIN] BooleanUnion in Gruppe fehlgeschlagen:", ex) print("[SMART-JOIN] BooleanUnion in Gruppe failed:", ex)
continue continue
if not result: continue if not result: continue
# C) Pre-Check Overlap: wenn result-Anzahl gleich input-Anzahl # C) Pre-Check Overlap: wenn result-Anzahl gleich input-Anzahl
+1 -1
View File
@@ -57,7 +57,7 @@ def _apply(mode_name):
if d.EnglishName == dm_name or d.LocalName == dm_name: if d.EnglishName == dm_name or d.LocalName == dm_name:
target = d; break target = d; break
if target is None: if target is None:
print("[VIEW-MODE] Display-Mode nicht gefunden:", dm_name) print("[VIEW-MODE] Display-Mode not found:", dm_name)
return return
view.ActiveViewport.DisplayMode = target view.ActiveViewport.DisplayMode = target
view.Redraw() view.Redraw()
+2 -2
View File
@@ -75,7 +75,7 @@ _SPECIAL_KEY_NAMES = {
def _normalize_key_part(key_part): def _normalize_key_part(key_part):
"""Mapped Sonderzeichen wie '-' auf Enum-Namen ('Minus'). Buchstaben/F-Keys """Mapped Sonderzeichen wie '-' auf Enum-Namen ('Minus'). Buchstaben/F-Keys
bleiben unveraendert (Case-preserved).""" bleiben unchanged (Case-preserved)."""
if key_part in _SPECIAL_KEY_NAMES: if key_part in _SPECIAL_KEY_NAMES:
return _SPECIAL_KEY_NAMES[key_part] return _SPECIAL_KEY_NAMES[key_part]
return key_part return key_part
@@ -156,7 +156,7 @@ def _xml_persist_shortcut(xml_key, macro, verbose=False):
r'<entry\s+key="' + re.escape(xml_key) + r'"\s*(/>|>[^<]*</entry>)') r'<entry\s+key="' + re.escape(xml_key) + r'"\s*(/>|>[^<]*</entry>)')
m = pat.search(content) m = pat.search(content)
if m: if m:
# Check Line-Kontext: nur diese Entry auf Zeile + unveraendert? # Check Line-Kontext: nur diese Entry auf Zeile + unchanged?
line_start = content.rfind("\n", 0, m.start()) + 1 line_start = content.rfind("\n", 0, m.start()) + 1
line_end = content.find("\n", m.end()) line_end = content.find("\n", m.end())
if line_end < 0: line_end = len(content) if line_end < 0: line_end = len(content)
+4 -4
View File
@@ -243,7 +243,7 @@ def apply_snapshot_to_detail(doc, detail, snap_id):
Liefert True bei Erfolg.""" Liefert True bei Erfolg."""
snap = next((s for s in _load_snapshots(doc) if s.get("id") == snap_id), None) snap = next((s for s in _load_snapshots(doc) if s.get("id") == snap_id), None)
if not snap: if not snap:
print("[AUSSCHNITTE] apply_to_detail: snap nicht gefunden", snap_id) print("[AUSSCHNITTE] apply_to_detail: snap not found", snap_id)
return False return False
# Page-View ermitteln (fuer SetActiveDetail/SetPageAsActive) # Page-View ermitteln (fuer SetActiveDetail/SetPageAsActive)
page_view = None page_view = None
@@ -611,7 +611,7 @@ class AusschnittBridge(panel_base.BaseBridge):
vp.Name = new_name vp.Name = new_name
except Exception as ex: except Exception as ex:
print("[AUSSCHNITTE] Rename:", ex) print("[AUSSCHNITTE] Rename:", ex)
# Gespeicherten Massstab anwenden (z.B. "1:50") — falls vorhanden und # Gespeicherten Massstab anwenden (z.B. "1:50") — falls present und
# Viewport parallel ist (in Perspective ignoriert massstab._apply_scale). # Viewport parallel ist (in Perspective ignoriert massstab._apply_scale).
try: try:
scale_str = (snap.get("scale") or "").strip() scale_str = (snap.get("scale") or "").strip()
@@ -668,7 +668,7 @@ class AusschnittBridge(panel_base.BaseBridge):
doc = Rhino.RhinoDoc.ActiveDoc doc = Rhino.RhinoDoc.ActiveDoc
snap = next((s for s in self._load(doc) if s.get("id") == snap_id), None) snap = next((s for s in self._load(doc) if s.get("id") == snap_id), None)
if not snap: if not snap:
print("[AUSSCHNITTE] Snap nicht gefunden:", snap_id) print("[AUSSCHNITTE] Snap not found:", snap_id)
return return
snap_by_id = {} snap_by_id = {}
for ls in (snap.get("layers") or []): for ls in (snap.get("layers") or []):
@@ -773,7 +773,7 @@ class AusschnittBridge(panel_base.BaseBridge):
doc = Rhino.RhinoDoc.ActiveDoc doc = Rhino.RhinoDoc.ActiveDoc
snap = next((s for s in self._load(doc) if s.get("id") == snap_id), None) snap = next((s for s in self._load(doc) if s.get("id") == snap_id), None)
if not snap: if not snap:
print("[AUSSCHNITTE] open_settings: snap nicht gefunden", snap_id) print("[AUSSCHNITTE] open_settings: snap not found", snap_id)
return return
outer = self outer = self
bridge_holder = {"form": None, "id": snap_id} bridge_holder = {"form": None, "id": snap_id}
+1 -1
View File
@@ -44,7 +44,7 @@ def _on_begin_command(sender, e):
Rhino.UI.Panels.FocusPanel(guid) Rhino.UI.Panels.FocusPanel(guid)
except Exception: pass except Exception: pass
if sc.sticky.get(_VERBOSE_KEY): if sc.sticky.get(_VERBOSE_KEY):
print("[BEGIN-CMD] Gestaltung-Panel opened/fokussiert") print("[BEGIN-CMD] Gestaltung-Panel opened/focused")
except Exception as ex: except Exception as ex:
print("[BEGIN-CMD] OpenPanel:", ex) print("[BEGIN-CMD] OpenPanel:", ex)
try: try:
+38 -38
View File
@@ -488,7 +488,7 @@ def _build_sia_preset_rules():
def _ensure_sia_preset(force=False): def _ensure_sia_preset(force=False):
"""Stellt sicher dass das SIA-Preset im cross-doc Presets-File existiert. """Stellt sicher dass das SIA-Preset im cross-doc Presets-File existiert.
force=True: ueberschreibt bestehendes Preset (Single-Source-of-Truth aus force=True: ueberschreibt bestehendes Preset (Single-Source-of-Truth aus
elemente.py). force=False: nur anlegen wenn noch nicht vorhanden so elemente.py). force=False: nur anlegen wenn noch not present so
bleiben User-Anpassungen aus dem Overrides-Panel erhalten.""" bleiben User-Anpassungen aus dem Overrides-Panel erhalten."""
try: try:
import overrides as _ov import overrides as _ov
@@ -726,7 +726,7 @@ def _resolve_decke_z(doc, gid, dicke, uk_over, ok_over):
def _find_ebene_sublayer_name(doc, keywords, default_code, default_name, def _find_ebene_sublayer_name(doc, keywords, default_code, default_name,
default_color="#888888", default_lw=0.35): default_color="#888888", default_lw=0.35):
"""Findet aus der Ebenen-Liste den ersten Sublayer der einem der Keywords """Findet aus der Ebenen-Liste den ersten Sublayer der einem der Keywords
entspricht. Wenn nicht gefunden, wird der Sublayer mit den Default-Werten entspricht. Wenn not found, wird der Sublayer mit den Default-Werten
AUTOMATISCH in die Ebenen-Liste eingetragen (damit er auch im Ebenen- AUTOMATISCH in die Ebenen-Liste eingetragen (damit er auch im Ebenen-
Manager-UI erscheint) und der Rhinopanel-Bridge ein State-Refresh Manager-UI erscheint) und der Rhinopanel-Bridge ein State-Refresh
getriggert. Ergebnis: 'CODE_NAME' wie 'WAENDE'.""" getriggert. Ergebnis: 'CODE_NAME' wie 'WAENDE'."""
@@ -747,7 +747,7 @@ def _find_ebene_sublayer_name(doc, keywords, default_code, default_name,
if kw in low: if kw in low:
return "{}_{}".format(e.get("code", default_code), return "{}_{}".format(e.get("code", default_code),
name or default_name) name or default_name)
# 2) Auto-Add: weder Keyword noch Code vorhanden → Eintrag anlegen # 2) Auto-Add: weder Keyword noch Code present → Eintrag anlegen
if ebenen and not any(isinstance(e, dict) and e.get("code") == default_code if ebenen and not any(isinstance(e, dict) and e.get("code") == default_code
for e in ebenen): for e in ebenen):
ebenen.append({ ebenen.append({
@@ -821,7 +821,7 @@ def _ensure_referenz_child_in_doc(doc, parent_code, parent_keywords,
parent_code + 'r' (z.B. '20r'). Liefert (parent_sub_name, child_sub_name) parent_code + 'r' (z.B. '20r'). Liefert (parent_sub_name, child_sub_name)
fuer Pfad-Konstruktion. fuer Pfad-Konstruktion.
Idempotent: legt nur an wenn nicht vorhanden, triggert dann Idempotent: legt nur an wenn not present, triggert dann
build_layers + broadcast_state.""" build_layers + broadcast_state."""
parent_sub = _find_ebene_sublayer_name( parent_sub = _find_ebene_sublayer_name(
doc, parent_keywords, parent_code, parent_default_name, doc, parent_keywords, parent_code, parent_default_name,
@@ -1491,7 +1491,7 @@ def _make_treppe_preview_handler(p0, breite, referenz, n_stufen,
- `fixed_length`: Mausvektor wird genau auf diese Laenge reskaliert - `fixed_length`: Mausvektor wird genau auf diese Laenge reskaliert
- `min_length` / `max_length`: Mausvektor wird in dieser Range - `min_length` / `max_length`: Mausvektor wird in dieser Range
geclampt (frei innerhalb, Stop bei den Grenzen) geclampt (frei innerhalb, Stop bei den Grenzen)
- sonst: Mausvektor wird unveraendert benutzt""" - sonst: Mausvektor wird unchanged benutzt"""
import System.Drawing as SD import System.Drawing as SD
color_axis = SD.Color.FromArgb(255, 95, 200, 180) color_axis = SD.Color.FromArgb(255, 95, 200, 180)
color_edge = SD.Color.FromArgb(180, 140, 215, 200) color_edge = SD.Color.FromArgb(180, 140, 215, 200)
@@ -4933,7 +4933,7 @@ def _read_meta(obj):
def _find_objects_by_wall_id(doc, wall_id, type_filter=None): def _find_objects_by_wall_id(doc, wall_id, type_filter=None):
"""Findet alle Rhino-Objekte mit der gegebenen wall_id. Hidden+Locked """Findet alle Rhino-Objekte mit der gegebenen wall_id. Hidden+Locked
werden mit-iteriert sonst werden Treppen-Volumes auf hidden 3D-Layer werden mit-iteriert sonst werden Treppen-Volumes auf hidden 3D-Layer
nicht gefunden + Regen-Replace schlaegt fehl Duplikate.""" not found + Regen-Replace schlaegt fehl Duplikate."""
out = [] out = []
try: try:
_s = Rhino.DocObjects.ObjectEnumeratorSettings() _s = Rhino.DocObjects.ObjectEnumeratorSettings()
@@ -4959,7 +4959,7 @@ def _find_axis(doc, wall_id):
def _wall_group_index(doc, wall_id, create_if_missing=True): def _wall_group_index(doc, wall_id, create_if_missing=True):
"""Liefert den Rhino-Group-Index fuer eine Wand (Group enthaelt axis + """Liefert den Rhino-Group-Index fuer eine Wand (Group enthaelt axis +
alle volumes). Wenn noch keine existiert + create_if_missing: erstelle alle volumes). Wenn noch keine existiert + create_if_missing: erstelle
eine neue Gruppe und ordne die Achse zu. -1 wenn axis nicht gefunden.""" eine neue Gruppe und ordne die Achse zu. -1 wenn axis not found."""
axis_obj = _find_axis(doc, wall_id) axis_obj = _find_axis(doc, wall_id)
if axis_obj is None: return -1 if axis_obj is None: return -1
try: try:
@@ -6570,7 +6570,7 @@ def _make_decke_volume(outline_curve, dicke, uk, ok, hole_curves=None):
rg.Point3d(0, 0, ok)) rg.Point3d(0, 0, ok))
result = face.CreateExtrusion(path, True) result = face.CreateExtrusion(path, True)
if result is None or not result.IsValid: if result is None or not result.IsValid:
print("[ELEMENTE] BrepFace.CreateExtrusion fehlgeschlagen" print("[ELEMENTE] BrepFace.CreateExtrusion failed"
"Fallback ohne Loch.") "Fallback ohne Loch.")
return _make_decke_volume(outline_curve, dicke, uk, ok, None) return _make_decke_volume(outline_curve, dicke, uk, ok, None)
return result return result
@@ -6790,7 +6790,7 @@ def _make_raum_stamp_text(centroid, name, nummer, funktion, area, rundung,
elif align == "rechts": te.Justification = rg.TextJustification.MiddleRight elif align == "rechts": te.Justification = rg.TextJustification.MiddleRight
else: te.Justification = rg.TextJustification.MiddleCenter else: te.Justification = rg.TextJustification.MiddleCenter
except Exception: pass except Exception: pass
# Font/Style — nur wenn doc + font_name vorhanden, sonst Doc-Default # Font/Style — nur wenn doc + font_name present, sonst Doc-Default
if doc is not None and font: if doc is not None and font:
try: try:
f = Rhino.DocObjects.Font.FromQuartetProperties( f = Rhino.DocObjects.Font.FromQuartetProperties(
@@ -9481,7 +9481,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name
Rhino.DocObjects.ObjectColorSource.ColorFromObject) Rhino.DocObjects.ObjectColorSource.ColorFromObject)
attrs.ObjectColor = SD.Color.FromArgb(255, 0, 0, 0) attrs.ObjectColor = SD.Color.FromArgb(255, 0, 0, 0)
except Exception: pass except Exception: pass
# Faces via Material — wenn voll-dict mit PBR vorhanden, PBR- # Faces via Material — wenn voll-dict mit PBR present, PBR-
# Material mit Texturen bauen, sonst einfaches Diffuse-Material. # Material mit Texturen bauen, sonst einfaches Diffuse-Material.
mat_idx = -1 mat_idx = -1
if full_mat_dict is not None: if full_mat_dict is not None:
@@ -10087,7 +10087,7 @@ def _regen_treppe_2d_symbol(doc, element_id, meta, geom, g_start, geschoss_name,
def _ensure_linetype_dashed(doc): def _ensure_linetype_dashed(doc):
"""Liefert Index der 'Dashed'-Linetype. Wenn nicht vorhanden, laedt sie """Liefert Index der 'Dashed'-Linetype. Wenn not present, laedt sie
via LoadDefaultLinetypes nach. Fallback -1 (= By Layer continuous).""" via LoadDefaultLinetypes nach. Fallback -1 (= By Layer continuous)."""
def _find(): def _find():
try: try:
@@ -11033,7 +11033,7 @@ class ElementeBridge(panel_base.BaseBridge):
try: try:
with _TimedBlock("Wand AddCurve + Regen"): with _TimedBlock("Wand AddCurve + Regen"):
if doc.Objects.AddCurve(axis, attrs) == System.Guid.Empty: if doc.Objects.AddCurve(axis, attrs) == System.Guid.Empty:
print("[ELEMENTE] Wand AddCurve fehlgeschlagen"); return print("[ELEMENTE] Wand AddCurve failed"); return
# Joint-Cache invalidieren — neue Wand-Achse ist im Doc. # Joint-Cache invalidieren — neue Wand-Achse ist im Doc.
_invalidate_joints_cache(geschoss_id) _invalidate_joints_cache(geschoss_id)
_regenerate_element(doc, wall_id) _regenerate_element(doc, wall_id)
@@ -11186,7 +11186,7 @@ class ElementeBridge(panel_base.BaseBridge):
dicke, uk_over, ok_over, "mid") dicke, uk_over, ok_over, "mid")
outline_id = doc.Objects.AddCurve(outline, attrs) outline_id = doc.Objects.AddCurve(outline, attrs)
if outline_id == System.Guid.Empty: if outline_id == System.Guid.Empty:
print("[ELEMENTE] Decke AddCurve fehlgeschlagen"); return print("[ELEMENTE] Decke AddCurve failed"); return
_regenerate_element(doc, element_id) _regenerate_element(doc, element_id)
doc.Views.Redraw() doc.Views.Redraw()
print("[ELEMENTE] Decke erzeugt: {}".format(element_id)) print("[ELEMENTE] Decke erzeugt: {}".format(element_id))
@@ -11294,7 +11294,7 @@ class ElementeBridge(panel_base.BaseBridge):
0.0, "", "", "mid", aussp_parent=decke_id) 0.0, "", "", "mid", aussp_parent=decke_id)
new_id = doc.Objects.AddCurve(outline, attrs) new_id = doc.Objects.AddCurve(outline, attrs)
if new_id == System.Guid.Empty: if new_id == System.Guid.Empty:
print("[ELEMENTE] Aussparung AddCurve fehlgeschlagen"); return print("[ELEMENTE] Aussparung AddCurve failed"); return
_save_last(aussp_modus=modus) _save_last(aussp_modus=modus)
# Eltern-Decke regenerieren — das Loch wird abgezogen # Eltern-Decke regenerieren — das Loch wird abgezogen
_regenerate_element(doc, decke_id) _regenerate_element(doc, decke_id)
@@ -11458,7 +11458,7 @@ class ElementeBridge(panel_base.BaseBridge):
dach_variante=dach_variante) dach_variante=dach_variante)
outline_id = doc.Objects.AddCurve(outline, attrs) outline_id = doc.Objects.AddCurve(outline, attrs)
if outline_id == System.Guid.Empty: if outline_id == System.Guid.Empty:
print("[ELEMENTE] Dach AddCurve fehlgeschlagen"); return print("[ELEMENTE] Dach AddCurve failed"); return
_regenerate_element(doc, element_id) _regenerate_element(doc, element_id)
doc.Views.Redraw() doc.Views.Redraw()
print("[ELEMENTE] Dach erzeugt: {} ({}, neigung={}°)".format( print("[ELEMENTE] Dach erzeugt: {} ({}, neigung={}°)".format(
@@ -11725,7 +11725,7 @@ class ElementeBridge(panel_base.BaseBridge):
pt_at_brueest = rg.Point3d(on_axis.X, on_axis.Y, wall_uk + float(brueest)) pt_at_brueest = rg.Point3d(on_axis.X, on_axis.Y, wall_uk + float(brueest))
new_id = doc.Objects.AddPoint(pt_at_brueest, attrs) new_id = doc.Objects.AddPoint(pt_at_brueest, attrs)
if new_id == System.Guid.Empty: if new_id == System.Guid.Empty:
print("[ELEMENTE] AddPoint fehlgeschlagen"); return print("[ELEMENTE] AddPoint failed"); return
# Last-used # Last-used
if typ == "fenster": if typ == "fenster":
@@ -11762,7 +11762,7 @@ class ElementeBridge(panel_base.BaseBridge):
geschosse = _load_geschosse(doc) geschosse = _load_geschosse(doc)
gs = _geschoss_by_id(doc, geschoss_start) gs = _geschoss_by_id(doc, geschoss_start)
if gs is None: if gs is None:
print("[ELEMENTE] Startgeschoss nicht gefunden"); return print("[ELEMENTE] Startgeschoss not found"); return
geschoss_end = p.get("geschossEnd") or "" geschoss_end = p.get("geschossEnd") or ""
if not geschoss_end: if not geschoss_end:
# naechstes Geschoss > start_okff # naechstes Geschoss > start_okff
@@ -12287,7 +12287,7 @@ class ElementeBridge(panel_base.BaseBridge):
treppe_art=treppe_art) treppe_art=treppe_art)
new_id = doc.Objects.AddCurve(line, attrs) new_id = doc.Objects.AddCurve(line, attrs)
if new_id == System.Guid.Empty: if new_id == System.Guid.Empty:
print("[ELEMENTE] AddCurve fehlgeschlagen"); return print("[ELEMENTE] AddCurve failed"); return
save_kwargs = dict(treppe_breite=breite, treppe_n=n_stufen, save_kwargs = dict(treppe_breite=breite, treppe_n=n_stufen,
treppe_referenz=referenz, treppe_referenz=referenz,
treppe_modus=modus_def, treppe_modus=modus_def,
@@ -12415,7 +12415,7 @@ class ElementeBridge(panel_base.BaseBridge):
trag_angle=angle, trag_z_over=z_over) trag_angle=angle, trag_z_over=z_over)
new_id = doc.Objects.AddPoint(pt3, attrs) new_id = doc.Objects.AddPoint(pt3, attrs)
if new_id == System.Guid.Empty: if new_id == System.Guid.Empty:
print("[ELEMENTE] Stuetze AddPoint fehlgeschlagen"); return print("[ELEMENTE] Stuetze AddPoint failed"); return
_save_last(stuetze_profil=profil, stuetze_b=B, stuetze_h=H, _save_last(stuetze_profil=profil, stuetze_b=B, stuetze_h=H,
stuetze_d=D, stuetze_t=t_wall, stuetze_angle=angle) stuetze_d=D, stuetze_t=t_wall, stuetze_angle=angle)
_regenerate_element(doc, element_id) _regenerate_element(doc, element_id)
@@ -12546,7 +12546,7 @@ class ElementeBridge(panel_base.BaseBridge):
trag_angle=angle, trag_z_over=z_over) trag_angle=angle, trag_z_over=z_over)
new_id = doc.Objects.AddCurve(line, attrs) new_id = doc.Objects.AddCurve(line, attrs)
if new_id == System.Guid.Empty: if new_id == System.Guid.Empty:
print("[ELEMENTE] Traeger AddCurve fehlgeschlagen"); return print("[ELEMENTE] Traeger AddCurve failed"); return
_save_last(traeger_profil=profil, traeger_b=B, traeger_h=H, _save_last(traeger_profil=profil, traeger_b=B, traeger_h=H,
traeger_d=D, traeger_t=t_wall, traeger_angle=angle) traeger_d=D, traeger_t=t_wall, traeger_angle=angle)
_regenerate_element(doc, element_id) _regenerate_element(doc, element_id)
@@ -12649,7 +12649,7 @@ class ElementeBridge(panel_base.BaseBridge):
raum_txt_h=txt_h) raum_txt_h=txt_h)
new_id = doc.Objects.AddCurve(outline_curve, attrs) new_id = doc.Objects.AddCurve(outline_curve, attrs)
if new_id == System.Guid.Empty: if new_id == System.Guid.Empty:
print("[ELEMENTE] Raum AddCurve fehlgeschlagen"); return print("[ELEMENTE] Raum AddCurve failed"); return
_save_last(raum_modus=modus, raum_name_last=name, _save_last(raum_modus=modus, raum_name_last=name,
raum_rundung=rundung, raum_funktion=funktion, raum_rundung=rundung, raum_funktion=funktion,
raum_txt_h=txt_h) raum_txt_h=txt_h)
@@ -12701,7 +12701,7 @@ class ElementeBridge(panel_base.BaseBridge):
stempel_scope=scope, stempel_txt_h=txt_h) stempel_scope=scope, stempel_txt_h=txt_h)
new_id = doc.Objects.AddText(te, attrs) new_id = doc.Objects.AddText(te, attrs)
if new_id == System.Guid.Empty: if new_id == System.Guid.Empty:
print("[ELEMENTE] Stempel AddText fehlgeschlagen"); return print("[ELEMENTE] Stempel AddText failed"); return
_save_last(stempel_txt_h=txt_h) _save_last(stempel_txt_h=txt_h)
doc.Views.Redraw() doc.Views.Redraw()
print("[ELEMENTE] Stempel erzeugt: {} (scope={})".format(stempel_id, scope)) print("[ELEMENTE] Stempel erzeugt: {} (scope={})".format(stempel_id, scope))
@@ -12970,7 +12970,7 @@ class ElementeBridge(panel_base.BaseBridge):
stile = load_raum_stempel_stile(doc) stile = load_raum_stempel_stile(doc)
stil = next((s for s in stile if s.get("id") == sid), None) stil = next((s for s in stile if s.get("id") == sid), None)
if stil is None: if stil is None:
print("[ELEMENTE] APPLY_RAUM_STIL: Stil {} nicht gefunden".format(sid)) print("[ELEMENTE] APPLY_RAUM_STIL: Stil {} not found".format(sid))
return return
# Stil-Felder → Patch fuer _update_wall-Pfad # Stil-Felder → Patch fuer _update_wall-Pfad
patch_base = {} patch_base = {}
@@ -13069,7 +13069,7 @@ class ElementeBridge(panel_base.BaseBridge):
stile = load_stempel_stile(doc) stile = load_stempel_stile(doc)
stil = next((s for s in stile if s.get("id") == sid), None) stil = next((s for s in stile if s.get("id") == sid), None)
if stil is None: if stil is None:
print("[ELEMENTE] APPLY_STEMPEL_STIL: {} nicht gefunden".format(sid)) print("[ELEMENTE] APPLY_STEMPEL_STIL: {} not found".format(sid))
return return
# Stil-Felder → Patch fuer _update_wall stempel-Branch # Stil-Felder → Patch fuer _update_wall stempel-Branch
patch_base = {} patch_base = {}
@@ -13214,7 +13214,7 @@ class ElementeBridge(panel_base.BaseBridge):
subprocess.Popen(["open", url]) subprocess.Popen(["open", url])
print("[ELEMENTE] Swisstopo Karte geoeffnet:", url) print("[ELEMENTE] Swisstopo Karte geoeffnet:", url)
except Exception as ex: except Exception as ex:
print("[ELEMENTE] Karte oeffnen fehlgeschlagen:", ex) print("[ELEMENTE] Karte oeffnen failed:", ex)
def _cmd_import_swisstopo(self, p): def _cmd_import_swisstopo(self, p):
"""File-Picker -> Rhino _-Import -> bewege neue Objekte auf den """File-Picker -> Rhino _-Import -> bewege neue Objekte auf den
@@ -13224,7 +13224,7 @@ class ElementeBridge(panel_base.BaseBridge):
doc = Rhino.RhinoDoc.ActiveDoc doc = Rhino.RhinoDoc.ActiveDoc
if doc is None: return if doc is None: return
kind = (p.get("kind") or "buildings").lower() kind = (p.get("kind") or "buildings").lower()
# Target-Sublayer ableiten (auto-anlegen wenn nicht vorhanden) # Target-Sublayer ableiten (auto-anlegen wenn not present)
if kind == "buildings": if kind == "buildings":
sub_name = _find_ebene_sublayer_name( sub_name = _find_ebene_sublayer_name(
doc, ["gebaeude", "gebäude", "buildings"], doc, ["gebaeude", "gebäude", "buildings"],
@@ -13275,7 +13275,7 @@ class ElementeBridge(panel_base.BaseBridge):
try: try:
Rhino.RhinoApp.RunScript(cmd, False) Rhino.RhinoApp.RunScript(cmd, False)
except Exception as ex: except Exception as ex:
print("[ELEMENTE] _-Import fehlgeschlagen:", ex); return print("[ELEMENTE] _-Import failed:", ex); return
# Differenz: neu hinzugekommene Objekte # Differenz: neu hinzugekommene Objekte
new_objs = [] new_objs = []
@@ -13298,13 +13298,13 @@ class ElementeBridge(panel_base.BaseBridge):
import layer_builder import layer_builder
parent_idx = layer_builder._find_top_by_id(doc, z_id) parent_idx = layer_builder._find_top_by_id(doc, z_id)
if parent_idx < 0: if parent_idx < 0:
print("[ELEMENTE] Swisstopo: Parent-Layer nicht gefunden") print("[ELEMENTE] Swisstopo: Parent-Layer not found")
return return
parent_id = doc.Layers[parent_idx].Id parent_id = doc.Layers[parent_idx].Id
code = sub_name.split("_", 1)[0] code = sub_name.split("_", 1)[0]
sub_idx = layer_builder._find_sublayer_by_code(doc, parent_id, code) sub_idx = layer_builder._find_sublayer_by_code(doc, parent_id, code)
if sub_idx < 0: if sub_idx < 0:
print("[ELEMENTE] Swisstopo: Sublayer {} nicht gefunden " print("[ELEMENTE] Swisstopo: Sublayer {} not found "
"— bitte erst Ebenen-Apply ausloesen".format(code)) "— bitte erst Ebenen-Apply ausloesen".format(code))
return return
moved = 0 moved = 0
@@ -13646,7 +13646,7 @@ class ElementeBridge(panel_base.BaseBridge):
len(grids), len(merged["points"]), len(grids), len(merged["points"]),
len(merged["es"]), len(merged["ns"]))) len(merged["es"]), len(merged["ns"])))
except Exception as ex: except Exception as ex:
self._push_log("Grid-Merge fehlgeschlagen: {}".format(ex)) self._push_log("Grid-Merge failed: {}".format(ex))
# Terrain-Volumize-Option: aus Opts lesen. depth in # Terrain-Volumize-Option: aus Opts lesen. depth in
# METERN aus UI → in Doc-Units konvertieren. # METERN aus UI → in Doc-Units konvertieren.
@@ -13676,7 +13676,7 @@ class ElementeBridge(panel_base.BaseBridge):
if vol_obj is not None: obj = vol_obj if vol_obj is not None: obj = vol_obj
if obj: mesh_objects.append((obj, merged_grid["bbox"])) if obj: mesh_objects.append((obj, merged_grid["bbox"]))
except Exception as ex: except Exception as ex:
self._push_log("Mesh-Bau fehlgeschlagen: {}".format(ex)) self._push_log("Mesh-Bau failed: {}".format(ex))
# Contours sind die Grundlage fuer vier moegliche Outputs: # Contours sind die Grundlage fuer vier moegliche Outputs:
# 'contours' → flache 2D-Curves auf OKFF # 'contours' → flache 2D-Curves auf OKFF
@@ -14157,7 +14157,7 @@ class ElementeBridge(panel_base.BaseBridge):
base_idx = layer_builder._find_sublayer_by_code( base_idx = layer_builder._find_sublayer_by_code(
doc, parent_id, "80") doc, parent_id, "80")
if base_idx < 0: if base_idx < 0:
self._push_log(" 80_swisstopo nicht gefunden") self._push_log(" 80_swisstopo not found")
return return
base_id = doc.Layers[base_idx].Id base_id = doc.Layers[base_idx].Id
moved = 0 moved = 0
@@ -14165,7 +14165,7 @@ class ElementeBridge(panel_base.BaseBridge):
sub_idx = layer_builder._find_sublayer_by_code( sub_idx = layer_builder._find_sublayer_by_code(
doc, base_id, tile_id) doc, base_id, tile_id)
if sub_idx < 0: if sub_idx < 0:
self._push_log(" Sub-Layer fuer {} nicht gefunden".format(tile_id)) self._push_log(" Sub-Layer fuer {} not found".format(tile_id))
continue continue
try: try:
attrs = obj.Attributes.Duplicate() attrs = obj.Attributes.Duplicate()
@@ -14342,7 +14342,7 @@ class ElementeBridge(panel_base.BaseBridge):
doc, with_children=not solid) doc, with_children=not solid)
parent_idx = layer_builder._find_top_by_id(doc, z_id) parent_idx = layer_builder._find_top_by_id(doc, z_id)
if parent_idx < 0: if parent_idx < 0:
self._push_log(" Geschoss nicht gefunden"); return self._push_log(" Geschoss not found"); return
parent_id = doc.Layers[parent_idx].Id parent_id = doc.Layers[parent_idx].Id
base_idx = layer_builder._find_sublayer_by_code( base_idx = layer_builder._find_sublayer_by_code(
doc, parent_id, target_code) doc, parent_id, target_code)
@@ -16255,7 +16255,7 @@ def _on_object_deleted(sender, e):
wenn die Source mit gleicher ID zurueckkommt (= Transform, kein User- wenn die Source mit gleicher ID zurueckkommt (= Transform, kein User-
Delete). Delete).
""" """
# Waehrend Swisstopo-Import: keine DOSSIER-Metas vorhanden, nur Overhead # Waehrend Swisstopo-Import: keine DOSSIER-Metas present, nur Overhead
if sc.sticky.get("dossier_swisstopo_busy"): return if sc.sticky.get("dossier_swisstopo_busy"): return
# Waehrend Move/Rotate/Mirror/Scale: CommandEnd-Pfad uebernimmt das # Waehrend Move/Rotate/Mirror/Scale: CommandEnd-Pfad uebernimmt das
# Re-Sync. Sonst queued der Delete-Event ueberfluessige Regen-Calls die # Re-Sync. Sonst queued der Delete-Event ueberfluessige Regen-Calls die
@@ -16628,7 +16628,7 @@ def _migrate_plangrafik_60_to_80_once(doc):
e["code"] = "80" e["code"] = "80"
changed = True changed = True
break break
# RAEUME / GF / AGF proaktiv eintragen wenn noch nicht vorhanden — damit # RAEUME / GF / AGF proaktiv eintragen wenn noch not present — damit
# sie im Ebenen-Manager sichtbar sind ohne erst einen Raum erstellen zu # sie im Ebenen-Manager sichtbar sind ohne erst einen Raum erstellen zu
# muessen. # muessen.
existing_codes = {e.get("code") for e in ebenen if isinstance(e, dict)} existing_codes = {e.get("code") for e in ebenen if isinstance(e, dict)}
@@ -16970,7 +16970,7 @@ def _on_idle_selection(sender, e):
# One-shot: alte wand_outline Curves entfernen (Feature deaktiviert # One-shot: alte wand_outline Curves entfernen (Feature deaktiviert
# wegen Technical-Drawing Konflikt) # wegen Technical-Drawing Konflikt)
_migrate_strip_wand_outlines_once(doc) _migrate_strip_wand_outlines_once(doc)
# Oeffnungen-Tree in dossier_ebenen anlegen falls noch nicht vorhanden # Oeffnungen-Tree in dossier_ebenen anlegen falls noch not present
# (sonst erscheinen die neuen Sublayer nicht im Ebenen-Panel). # (sonst erscheinen die neuen Sublayer nicht im Ebenen-Panel).
_ensure_oeff_ebenen_once(doc) _ensure_oeff_ebenen_once(doc)
@@ -17360,7 +17360,7 @@ def _on_command_begin(sender, e):
# Listener bail-out — am Ende einmal redrawn. # Listener bail-out — am Ende einmal redrawn.
if name in _USER_BULK_CMDS: if name in _USER_BULK_CMDS:
sc.sticky[_BULK_ACTIVE_KEY] = name sc.sticky[_BULK_ACTIVE_KEY] = name
print("[ELEMENTE] Bulk-Op start: '{}' — Listener bail aktiv".format(name)) print("[ELEMENTE] Bulk-op start: '{}' — Listener bail active".format(name))
try: try:
sc.sticky["_dossier_bulk_redraw_prev"] = bool(doc.Views.RedrawEnabled) sc.sticky["_dossier_bulk_redraw_prev"] = bool(doc.Views.RedrawEnabled)
doc.Views.RedrawEnabled = False doc.Views.RedrawEnabled = False
+1 -1
View File
@@ -56,7 +56,7 @@ for n in dir(layer):
except Exception as ex: except Exception as ex:
print(" layer.{} -> err: {}".format(n, ex)) print(" layer.{} -> err: {}".format(n, ex))
# layer.SectionStyle dumpen wenn vorhanden # layer.SectionStyle dumpen wenn present
try: try:
if hasattr(layer, "SectionStyle"): if hasattr(layer, "SectionStyle"):
dump("layer.SectionStyle", layer.SectionStyle) dump("layer.SectionStyle", layer.SectionStyle)
+10 -10
View File
@@ -102,7 +102,7 @@ def _find_linetype_index(doc, name):
def _try_set(obj, prop_names, value): def _try_set(obj, prop_names, value):
"""Versucht den Wert auf das erste vorhandene Property zu setzen. """Versucht den Wert auf das erste presente Property zu setzen.
Liefert den Property-Namen bei Erfolg, sonst None.""" Liefert den Property-Namen bei Erfolg, sonst None."""
if isinstance(prop_names, str): if isinstance(prop_names, str):
prop_names = (prop_names,) prop_names = (prop_names,)
@@ -170,7 +170,7 @@ def _apply_section_style(doc, layer, section_cfg, layer_color):
layer.RemoveCustomSectionStyle() layer.RemoveCustomSectionStyle()
print(diag, "removed (kein Hatch + kein Boundary)") print(diag, "removed (kein Hatch + kein Boundary)")
except Exception as ex: except Exception as ex:
print(diag, "remove fehlgeschlagen:", ex) print(diag, "remove failed:", ex)
return return
style = SS() style = SS()
@@ -384,7 +384,7 @@ def build_layers(doc, zeichnungsebenen, ebenen):
diag_prefix=z_name + "/") diag_prefix=z_name + "/")
doc.Views.Redraw() doc.Views.Redraw()
n_total = len(walk_ebenen(ebenen)) n_total = len(walk_ebenen(ebenen))
print("[EBENEN] {} Zeichnungsebenen x {} Ebenen aktualisiert (inkl. {} Sub)".format( print("[EBENEN] {} drawing levels x {} layers updated (incl. {} sub)".format(
len(zeichnungsebenen), len(ebenen), max(0, n_total - len(ebenen)))) len(zeichnungsebenen), len(ebenen), max(0, n_total - len(ebenen))))
@@ -532,7 +532,7 @@ def update_clipping_plane(doc, active_z, enabled):
is_geschoss = bool(active_z and active_z.get("isGeschoss") and active_z.get("okff") is not None) is_geschoss = bool(active_z and active_z.get("isGeschoss") and active_z.get("okff") is not None)
# IMMER vorhandene Plane loeschen — bei Re-Enable wollen wir frische # IMMER presente Plane loeschen — bei Re-Enable wollen wir frische
# vp_ids (alte koennten leer/falsch sein, dann clippt das Replace zwar # vp_ids (alte koennten leer/falsch sein, dann clippt das Replace zwar
# die Geometrie aber keinen Viewport). # die Geometrie aber keinen Viewport).
if existing is not None: if existing is not None:
@@ -540,15 +540,15 @@ def update_clipping_plane(doc, active_z, enabled):
doc.Objects.Delete(existing.Id, True) doc.Objects.Delete(existing.Id, True)
print("[CLIP] alte Plane geloescht") print("[CLIP] alte Plane geloescht")
except Exception as ex: except Exception as ex:
print("[CLIP] Delete fehlgeschlagen:", ex) print("[CLIP] Delete failed:", ex)
if (not enabled) or (not is_geschoss): if (not enabled) or (not is_geschoss):
print("[CLIP] disabled — fertig (enabled={}, isGeschoss={})".format(enabled, is_geschoss)) print("[CLIP] disabled — done (enabled={}, isGeschoss={})".format(enabled, is_geschoss))
doc.Views.Redraw() doc.Views.Redraw()
return return
# dict.get(k, default) liefert default NUR wenn Key fehlt — bei # dict.get(k, default) liefert default NUR wenn Key fehlt — bei
# Key-vorhanden-aber-None gibt's None zurueck. float(None) crasht. # Key-present-aber-None gibt's None zurueck. float(None) crasht.
# Daher explizit None-faangen: # Daher explizit None-faangen:
okff_raw = active_z.get("okff") okff_raw = active_z.get("okff")
sh_raw = active_z.get("schnitthoehe") sh_raw = active_z.get("schnitthoehe")
@@ -656,7 +656,7 @@ def cleanup_default_layers(doc):
except Exception: except Exception:
pass pass
if deleted: if deleted:
print("[EBENEN] Default-Layer entfernt: {}".format(", ".join(deleted))) print("[EBENEN] Default layer removed: {}".format(", ".join(deleted)))
def _find_sublayer_by_code_recursive(doc, parent_id, code): 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).""" 7101_Strassen liegt zwei Ebenen tief)."""
parent_idx = _find_top_by_id(doc, zeichnungsebene_id) parent_idx = _find_top_by_id(doc, zeichnungsebene_id)
if parent_idx < 0: if parent_idx < 0:
print("[EBENEN] Parent-Layer fuer Zeichnungsebene {} nicht gefunden".format(zeichnungsebene_id)) print("[EBENEN] Parent-Layer fuer Zeichnungsebene {} not found".format(zeichnungsebene_id))
return return
parent_id = doc.Layers[parent_idx].Id parent_id = doc.Layers[parent_idx].Id
sub_idx = _find_sublayer_by_code_recursive(doc, parent_id, code) sub_idx = _find_sublayer_by_code_recursive(doc, parent_id, code)
if sub_idx >= 0: if sub_idx >= 0:
doc.Layers.SetCurrentLayerIndex(sub_idx, True) doc.Layers.SetCurrentLayerIndex(sub_idx, True)
else: else:
print("[EBENEN] Sublayer mit Code {} unter Parent {} nicht gefunden".format(code, doc.Layers[parent_idx].Name)) print("[EBENEN] 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): def apply_visibility(doc, zeichnungsebenen, ebenen, active_z_id, active_code, z_mode, e_mode):
+11 -11
View File
@@ -234,7 +234,7 @@ def _read_launcher_schema():
data = json.loads(f.read().decode("utf-8")) data = json.loads(f.read().decode("utf-8"))
schema = (data or {}).get("layerSchema") schema = (data or {}).get("layerSchema")
if isinstance(schema, list) and schema: if isinstance(schema, list) and schema:
# Sanity: alle vier Pflichtfelder vorhanden # Sanity: alle vier Pflichtfelder present
clean = [r for r in schema clean = [r for r in schema
if isinstance(r, dict) if isinstance(r, dict)
and r.get("code") and r.get("name") and r.get("code") and r.get("name")
@@ -673,7 +673,7 @@ def apply_layer_preset_by_name(doc, name):
presets = load_layer_presets(doc) presets = load_layer_presets(doc)
preset = next((p for p in presets if p.get("name") == name), None) preset = next((p for p in presets if p.get("name") == name), None)
if preset is None: if preset is None:
print("[EBENEN] apply_layer_preset_by_name: '{}' nicht gefunden".format(name)) print("[EBENEN] apply_layer_preset_by_name: '{}' not found".format(name))
return False return False
payload = { payload = {
"layers": preset.get("layers") or [], "layers": preset.get("layers") or [],
@@ -1621,7 +1621,7 @@ class EbenenBridge(panel_base.BaseBridge):
def _send_library(self): def _send_library(self):
"""Sendet aktuelle Library-Items ans Frontend """Sendet aktuelle Library-Items ans Frontend
(LIBRARY_ITEMS-Message). Items kommen mit (LIBRARY_ITEMS-Message). Items kommen mit
previewDataUri (base64 PNG) wenn Vorschau vorhanden.""" previewDataUri (base64 PNG) wenn Vorschau present."""
try: try:
import library import library
m = library.load_manifest() m = library.load_manifest()
@@ -1952,7 +1952,7 @@ class EbenenBridge(panel_base.BaseBridge):
replaced = True replaced = True
break break
if not replaced: if not replaced:
print("[EBENEN] save_geschoss: id {} nicht gefunden".format(gid)) print("[EBENEN] save_geschoss: id {} not found".format(gid))
return return
# Build_layers + Save via _apply (durchlaeuft ohne save_e) # Build_layers + Save via _apply (durchlaeuft ohne save_e)
e_raw = doc.Strings.GetValue("dossier_ebenen") e_raw = doc.Strings.GetValue("dossier_ebenen")
@@ -2055,7 +2055,7 @@ class EbenenBridge(panel_base.BaseBridge):
return False return False
replaced = _replace_in_tree(e_list, orig_code, updated) replaced = _replace_in_tree(e_list, orig_code, updated)
if not replaced: if not replaced:
print("[EBENEN] save_ebene: code {} nicht gefunden".format(orig_code)) print("[EBENEN] save_ebene: code {} not found".format(orig_code))
return return
z_raw = doc.Strings.GetValue("dossier_zeichnungsebenen") z_raw = doc.Strings.GetValue("dossier_zeichnungsebenen")
try: z_list = json.loads(z_raw) if z_raw else [] try: z_list = json.loads(z_raw) if z_raw else []
@@ -2191,10 +2191,10 @@ class EbenenBridge(panel_base.BaseBridge):
n_with_fill = sum(1 for e in ebenen if isinstance(e, dict) n_with_fill = sum(1 for e in ebenen if isinstance(e, dict)
and isinstance(e.get("fill"), dict) and isinstance(e.get("fill"), dict)
and e["fill"].get("pattern") not in (None, "None")) and e["fill"].get("pattern") not in (None, "None"))
print("[EBENEN] dossier_ebenen gespeichert: {} Ebenen, davon {} mit fill, JSON-len={}".format( print("[EBENEN] dossier_ebenen saved: {} layers, of which {} with fill, JSON-len={}".format(
len(ebenen), n_with_fill, len(e_json))) len(ebenen), n_with_fill, len(e_json)))
re_read = doc.Strings.GetValue("dossier_ebenen") re_read = doc.Strings.GetValue("dossier_ebenen")
print("[EBENEN] dossier_ebenen verifiziert: len={}".format(len(re_read) if re_read else 0)) print("[EBENEN] dossier_ebenen verified: len={}".format(len(re_read) if re_read else 0))
print("[EBENEN] _apply: cleanup_default_layers ...") print("[EBENEN] _apply: cleanup_default_layers ...")
layer_builder.cleanup_default_layers(doc) layer_builder.cleanup_default_layers(doc)
print("[EBENEN] _apply: ensure_active_sublayer ...") print("[EBENEN] _apply: ensure_active_sublayer ...")
@@ -2208,7 +2208,7 @@ class EbenenBridge(panel_base.BaseBridge):
if fill_changed: if fill_changed:
gestaltung.refresh_layer_fills(doc) gestaltung.refresh_layer_fills(doc)
else: else:
print("[EBENEN] _apply: fill-Signatur unveraendert -> kein Hatch-Refresh") print("[EBENEN] _apply: fill signature unchanged -> no hatch refresh")
# Plot-Color Repair laeuft immer (no-op falls schon synchron) # Plot-Color Repair laeuft immer (no-op falls schon synchron)
gestaltung.repair_plot_colors(doc) gestaltung.repair_plot_colors(doc)
except Exception as ex: except Exception as ex:
@@ -2600,12 +2600,12 @@ class EbenenBridge(panel_base.BaseBridge):
return return
parent_idx = layer_builder._find_top_by_id(doc, z_id) parent_idx = layer_builder._find_top_by_id(doc, z_id)
if parent_idx < 0: if parent_idx < 0:
print("[EBENEN] Parent fuer aktive Zeichnungsebene nicht gefunden") print("[EBENEN] Parent fuer aktive Zeichnungsebene not found")
return return
parent_id = doc.Layers[parent_idx].Id parent_id = doc.Layers[parent_idx].Id
sub_idx = layer_builder._find_sublayer_by_code(doc, parent_id, code) sub_idx = layer_builder._find_sublayer_by_code(doc, parent_id, code)
if sub_idx < 0: if sub_idx < 0:
print("[EBENEN] Sublayer {} unter {} nicht gefunden".format(code, doc.Layers[parent_idx].Name)) print("[EBENEN] Sublayer {} unter {} not found".format(code, doc.Layers[parent_idx].Name))
return return
objs = list(doc.Objects.GetSelectedObjects(False, False)) objs = list(doc.Objects.GetSelectedObjects(False, False))
moved = 0 moved = 0
@@ -2749,7 +2749,7 @@ class EbenenBridge(panel_base.BaseBridge):
pe_states = None pe_states = None
pz_states = None pz_states = None
# --- Eye-State-Pfad (wenn vorhanden) --- # --- Eye-State-Pfad (wenn present) ---
if pe_states is not None or pz_states is not None: if pe_states is not None or pz_states is not None:
try: try:
e_raw = doc.Strings.GetValue("dossier_ebenen") or "[]" e_raw = doc.Strings.GetValue("dossier_ebenen") or "[]"
+5 -5
View File
@@ -389,7 +389,7 @@ class LayoutsBridge(panel_base.BaseBridge):
try: try:
page = doc.Views.AddPageView(name, w, h) page = doc.Views.AddPageView(name, w, h)
if page is None: if page is None:
print("[LAYOUTS] AddPageView fehlgeschlagen"); return print("[LAYOUTS] AddPageView failed"); return
print("[LAYOUTS] '{}' angelegt ({}x{})".format(name, w, h)) print("[LAYOUTS] '{}' angelegt ({}x{})".format(name, w, h))
except Exception as ex: except Exception as ex:
print("[LAYOUTS] AddPageView Fehler:", ex) print("[LAYOUTS] AddPageView Fehler:", ex)
@@ -414,7 +414,7 @@ class LayoutsBridge(panel_base.BaseBridge):
done = True done = True
print("[LAYOUTS] SetPageSize -> {}x{}".format(w, h)) print("[LAYOUTS] SetPageSize -> {}x{}".format(w, h))
except Exception as ex: except Exception as ex:
print("[LAYOUTS] SetPageSize fehlgeschlagen:", ex) print("[LAYOUTS] SetPageSize failed:", ex)
# 2) Fallback: Properties (haengt von Rhino-Version ab) # 2) Fallback: Properties (haengt von Rhino-Version ab)
if not done: if not done:
try: try:
@@ -423,7 +423,7 @@ class LayoutsBridge(panel_base.BaseBridge):
done = True done = True
print("[LAYOUTS] PageWidth/Height-Properties -> {}x{}".format(w, h)) print("[LAYOUTS] PageWidth/Height-Properties -> {}x{}".format(w, h))
except Exception as ex: except Exception as ex:
print("[LAYOUTS] Property-Setter fehlgeschlagen:", ex) print("[LAYOUTS] Property-Setter failed:", ex)
if not done: if not done:
print("[LAYOUTS] Konnte Seiten-Groesse nicht setzen — bitte ueber Rhinos Layout-Dialog aendern") print("[LAYOUTS] Konnte Seiten-Groesse nicht setzen — bitte ueber Rhinos Layout-Dialog aendern")
try: page.Redraw() try: page.Redraw()
@@ -515,7 +515,7 @@ class LayoutsBridge(panel_base.BaseBridge):
pdf.Write(path) pdf.Write(path)
print("[LAYOUTS] PDF geschrieben: {} ({} Seite(n))".format(path, n_added)) print("[LAYOUTS] PDF geschrieben: {} ({} Seite(n))".format(path, n_added))
except Exception as ex: except Exception as ex:
print("[LAYOUTS] PDF-Export fehlgeschlagen:", ex) print("[LAYOUTS] PDF-Export failed:", ex)
finally: finally:
# Vorherige View wieder aktivieren # Vorherige View wieder aktivieren
if prev_view is not None: if prev_view is not None:
@@ -538,7 +538,7 @@ class LayoutsBridge(panel_base.BaseBridge):
if doc.Path: if doc.Path:
base = os.path.splitext(os.path.basename(doc.Path))[0] + "_Layouts" base = os.path.splitext(os.path.basename(doc.Path))[0] + "_Layouts"
dlg.FileName = "{}.pdf".format(base) dlg.FileName = "{}.pdf".format(base)
# Default-Folder — neben der .3dm wenn vorhanden # Default-Folder — neben der .3dm wenn present
if doc.Path: if doc.Path:
try: dlg.Directory = System.Uri(os.path.dirname(doc.Path)) try: dlg.Directory = System.Uri(os.path.dirname(doc.Path))
except Exception: pass except Exception: pass
+2 -2
View File
@@ -698,7 +698,7 @@ def _read_3dm_geometry(abs_path):
"""Liest alle Top-Level-Objekte aus einer .3dm-Datei. Returns Liste von """Liest alle Top-Level-Objekte aus einer .3dm-Datei. Returns Liste von
(GeometryBase, ObjectAttributes). Bei Fehler leere Liste.""" (GeometryBase, ObjectAttributes). Bei Fehler leere Liste."""
if not abs_path or not os.path.isfile(abs_path): if not abs_path or not os.path.isfile(abs_path):
print("[LIBRARY] _read_3dm: Datei nicht gefunden:", abs_path) print("[LIBRARY] _read_3dm: Datei not found:", abs_path)
return [] return []
try: try:
from Rhino.FileIO import File3dm from Rhino.FileIO import File3dm
@@ -840,7 +840,7 @@ def import_item(doc, item_id, at_point=None, layer2d=-1, layer3d=-1):
symbol/object InstanceDefinition im Doc via File3dm.Read. symbol/object InstanceDefinition im Doc via File3dm.Read.
at_point + layer2d/3d nur fuer symbol/object.""" at_point + layer2d/3d nur fuer symbol/object."""
item = find_item(item_id) item = find_item(item_id)
if item is None: return False, "Item nicht gefunden: " + str(item_id) if item is None: return False, "Item not found: " + str(item_id)
t = item.get("type") t = item.get("type")
if t == "material": if t == "material":
return import_material(doc, item) return import_material(doc, item)
+3 -3
View File
@@ -104,7 +104,7 @@ def _detect_dpi():
try: try:
from System.Diagnostics import Process, ProcessStartInfo from System.Diagnostics import Process, ProcessStartInfo
except Exception as ex: except Exception as ex:
print("[MASSSTAB] auto-detect: .NET Process nicht verfuegbar:", ex) print("[MASSSTAB] auto-detect: .NET Process not available:", ex)
return None return None
if not os.path.isfile("/usr/bin/osascript"): if not os.path.isfile("/usr/bin/osascript"):
# Vermutlich nicht macOS -> nichts zu detecten # Vermutlich nicht macOS -> nichts zu detecten
@@ -162,7 +162,7 @@ def _detect_dpi():
lpx, float(data.get("lpy") or 0))) lpx, float(data.get("lpy") or 0)))
return dpi return dpi
except Exception as ex: except Exception as ex:
print("[MASSSTAB] auto-detect fehlgeschlagen:", ex) print("[MASSSTAB] auto-detect failed:", ex)
return None return None
finally: finally:
if script_path: if script_path:
@@ -875,7 +875,7 @@ def _apply_scale(doc, vp, ratio):
Rhino.RhinoApp.RunScript("_-Zoom _Factor {:.6f} _Enter".format(factor), False) Rhino.RhinoApp.RunScript("_-Zoom _Factor {:.6f} _Enter".format(factor), False)
applied = True applied = True
except Exception as ex3: except Exception as ex3:
print("[MASSSTAB] _apply_scale alle Varianten fehlgeschlagen:", print("[MASSSTAB] _apply_scale alle Varianten failed:",
ex1, ex2, ex3) ex1, ex2, ex3)
if not applied: if not applied:
return False return False
+1 -1
View File
@@ -257,7 +257,7 @@ def delete_rule_template(name):
def set_active_preset(doc, name): def set_active_preset(doc, name):
"""Aktiviert ein gespeichertes Preset: kopiert dessen Rules ins Doc-Config """Aktiviert ein gespeichertes Preset: kopiert dessen Rules ins Doc-Config
und markiert es als activePreset. Wenn name leer/None: aktives Preset und markiert es als activePreset. Wenn name leer/None: aktives Preset
geclear-t, Rules bleiben unveraendert (User waehlt "kein Preset"). Bei geclear-t, Rules bleiben unchanged (User waehlt "kein Preset"). Bei
aktivem enabled-Flag wird sofort neu applied. True bei Erfolg.""" aktivem enabled-Flag wird sofort neu applied. True bei Erfolg."""
if doc is None: return False if doc is None: return False
cfg = load_config(doc) cfg = load_config(doc)
+11 -11
View File
@@ -113,7 +113,7 @@ def migrate_to_dossier(doc):
new = "dossier_" + suffix new = "dossier_" + suffix
try: try:
if doc.Strings.GetValue(new): if doc.Strings.GetValue(new):
continue # Dossier-Variante vorhanden -> nicht ueberschreiben continue # Dossier-Variante present -> nicht ueberschreiben
for prefix in _LEGACY_PREFIXES: for prefix in _LEGACY_PREFIXES:
old_v = doc.Strings.GetValue(prefix + suffix) old_v = doc.Strings.GetValue(prefix + suffix)
if old_v: if old_v:
@@ -327,7 +327,7 @@ def load_inline(wv, mode, params=None):
if _INLINE_TEMPLATE is None or _INLINE_TEMPLATE[0] != cur_mtime: if _INLINE_TEMPLATE is None or _INLINE_TEMPLATE[0] != cur_mtime:
sig, tmpl = _build_inline_template() sig, tmpl = _build_inline_template()
if tmpl is None: if tmpl is None:
print("[{}] dist nicht gefunden".format(mode.upper())) print("[{}] dist not found".format(mode.upper()))
return return
_INLINE_TEMPLATE = (sig, tmpl) _INLINE_TEMPLATE = (sig, tmpl)
@@ -741,7 +741,7 @@ def make_panel_icon(name_or_letter, bg_hex):
except Exception as ex: except Exception as ex:
print("[panel_base] Icon path check error:", ex) print("[panel_base] Icon path check error:", ex)
# 1) Material-Icon-Font (wenn keine SVG vorhanden) # 1) Material-Icon-Font (wenn keine SVG present)
mat_cp = _MATERIAL_CODEPOINTS.get(name_or_letter) mat_cp = _MATERIAL_CODEPOINTS.get(name_or_letter)
if not used_svg and mat_cp is not None: if not used_svg and mat_cp is not None:
font_family_name = _try_material_font() font_family_name = _try_material_font()
@@ -815,7 +815,7 @@ def make_panel_icon(name_or_letter, bg_hex):
print("[panel_base] Icon erzeugt via Eto.Drawing.Icon(path) [{}]".format(tag)) print("[panel_base] Icon erzeugt via Eto.Drawing.Icon(path) [{}]".format(tag))
return ic return ic
except Exception as ex: except Exception as ex:
print("[panel_base] Eto.Drawing.Icon(path) fehlgeschlagen:", ex) print("[panel_base] Eto.Drawing.Icon(path) failed:", ex)
# Bitmap-Fallback (in-memory) — wenn alles vorherige fehlschlaegt # Bitmap-Fallback (in-memory) — wenn alles vorherige fehlschlaegt
try: try:
ic = drawing.Icon(1.0, bmp) ic = drawing.Icon(1.0, bmp)
@@ -825,7 +825,7 @@ def make_panel_icon(name_or_letter, bg_hex):
print("[panel_base] Icon Fallback: Eto.Bitmap zurueck ({})".format(tag)) print("[panel_base] Icon Fallback: Eto.Bitmap zurueck ({})".format(tag))
return bmp return bmp
except Exception as ex: except Exception as ex:
print("[panel_base] Icon-Erstellung fehlgeschlagen:", ex) print("[panel_base] Icon-Erstellung failed:", ex)
return None return None
@@ -860,7 +860,7 @@ def register_and_open(mode, caption, guid_str, bridge_factory, icon_spec=None, m
t_reg = time.time() t_reg = time.time()
plugin = find_plugin() plugin = find_plugin()
if plugin is None: if plugin is None:
print("[{}] Plugin nicht gefunden".format(mode.upper())) print("[{}] Plugin not found".format(mode.upper()))
return return
try: try:
type_name = "DynPanel_" + mode type_name = "DynPanel_" + mode
@@ -900,7 +900,7 @@ def register_and_open(mode, caption, guid_str, bridge_factory, icon_spec=None, m
registered_with_icon = False registered_with_icon = False
# Erst mit Icon versuchen, dann stillschweigend ohne (Mac Rhino-Panels # Erst mit Icon versuchen, dann stillschweigend ohne (Mac Rhino-Panels
# akzeptieren auf manchen Versionen nur System.Drawing.Icon, das auf # akzeptieren auf manchen Versionen nur System.Drawing.Icon, das auf
# Mac nicht verfuegbar ist - die Registrierung ohne Icon ist OK). # Mac not available ist - die Registrierung ohne Icon ist OK).
attempts = [(icon, True)] if icon is not None else [] attempts = [(icon, True)] if icon is not None else []
attempts.append((None, False)) attempts.append((None, False))
for arg, with_icon in attempts: for arg, with_icon in attempts:
@@ -914,10 +914,10 @@ def register_and_open(mode, caption, guid_str, bridge_factory, icon_spec=None, m
break break
except Exception as ex: except Exception as ex:
if with_icon: if with_icon:
print("[{}] RegisterPanel mit Icon fehlgeschlagen: {}".format( print("[{}] RegisterPanel mit Icon failed: {}".format(
mode.upper(), ex)) mode.upper(), ex))
else: else:
print("[{}] RegisterPanel fehlgeschlagen: {}".format( print("[{}] RegisterPanel failed: {}".format(
mode.upper(), ex)) mode.upper(), ex))
if registered and not registered_with_icon and icon is not None: if registered and not registered_with_icon and icon is not None:
print("[{}] Panel ohne Icon registriert (Fallback)".format(mode.upper())) print("[{}] Panel ohne Icon registriert (Fallback)".format(mode.upper()))
@@ -927,7 +927,7 @@ def register_and_open(mode, caption, guid_str, bridge_factory, icon_spec=None, m
sc.sticky[sticky_guid] = System.Guid(guid_str) sc.sticky[sticky_guid] = System.Guid(guid_str)
print("[{}] Panel registered".format(mode.upper())) print("[{}] Panel registered".format(mode.upper()))
except Exception as ex: except Exception as ex:
print("[{}] Registrierung fehlgeschlagen: {}".format(mode.upper(), ex)) print("[{}] Registrierung failed: {}".format(mode.upper(), ex))
return return
_t_mark("register", mode, t_reg) _t_mark("register", mode, t_reg)
@@ -938,5 +938,5 @@ def register_and_open(mode, caption, guid_str, bridge_factory, icon_spec=None, m
_t_mark("OpenPanel", mode, t_open) _t_mark("OpenPanel", mode, t_open)
print("[{}] Panel opened".format(mode.upper())) print("[{}] Panel opened".format(mode.upper()))
except Exception as ex: except Exception as ex:
print("[{}] OpenPanel fehlgeschlagen: {}".format(mode.upper(), ex)) print("[{}] OpenPanel failed: {}".format(mode.upper(), ex))
_t_mark("register_and_open", mode, t_outer) _t_mark("register_and_open", mode, t_outer)
+1 -1
View File
@@ -362,7 +362,7 @@ def _load_all(sender, e):
print("[STARTUP] unit-check active doc error:", ex) print("[STARTUP] unit-check active doc error:", ex)
# Aliases + Shortcuts (Defaults aus rhino/aliases/shortcuts_default.json # Aliases + Shortcuts (Defaults aus rhino/aliases/shortcuts_default.json
# + User-Overrides aus dossier_settings.json) registrieren. Idempotent — # + User-Overrides aus dossier_settings.json) registrieren. Idempotent —
# SetMacro/SetMacro ueberschreibt vorhandene Eintraege. Wenn Bridge noch # SetMacro/SetMacro ueberschreibt presente Eintraege. Wenn Bridge noch
# nicht in sticky liegt (elemente-Panel noch nicht geladen) ist das ok, # nicht in sticky liegt (elemente-Panel noch nicht geladen) ist das ok,
# die Aliases zeigen auf das Dispatch-Skript das die Bridge lazy aus # die Aliases zeigen auf das Dispatch-Skript das die Bridge lazy aus
# sticky liest. # sticky liest.
+3 -3
View File
@@ -191,7 +191,7 @@ def _hex_to_color(h):
def _force_load_linetypes(doc): def _force_load_linetypes(doc):
"""Rhinos Linetype-Tabelle wird lazy initialisiert — wir triggern es.""" """Rhinos Linetype-Tabelle wird lazy initialisiert — wir triggern es."""
# 1) Eingebaute Methode (falls vorhanden) # 1) Eingebaute Methode (falls present)
for method_name in ("LoadDefaultLinetypes", "LoadDefaults", "LoadStandardLinetypes"): for method_name in ("LoadDefaultLinetypes", "LoadDefaults", "LoadStandardLinetypes"):
try: try:
getattr(doc.Linetypes, method_name)() getattr(doc.Linetypes, method_name)()
@@ -320,7 +320,7 @@ def _ebene_fill_for_layer(doc, layer):
if True: if True:
f = e.get("fill") f = e.get("fill")
if not isinstance(f, dict): if not isinstance(f, dict):
print("[GESTALTUNG] _ebene_fill_for_layer: Ebene code={} hat KEIN fill-Feld".format(code)) print("[GESTALTUNG] _ebene_fill_for_layer: Ebene code={} has NO fill field".format(code))
return None return None
# lw: Strichstaerke der Hatch-Linien in mm. None = "wie Stift der Ebene" # lw: Strichstaerke der Hatch-Linien in mm. None = "wie Stift der Ebene"
# (ColorSource/PlotWeightSource bleibt auf FromLayer). # (ColorSource/PlotWeightSource bleibt auf FromLayer).
@@ -737,7 +737,7 @@ def refresh_layer_fills(doc):
if updated or color_updated or added: if updated or color_updated or added:
doc.Views.Redraw() doc.Views.Redraw()
print("[GESTALTUNG] refresh_layer_fills: pattern={}, farbe={}, neu={}, unveraendert={}".format( print("[GESTALTUNG] refresh_layer_fills: pattern={}, farbe={}, neu={}, unchanged={}".format(
updated, color_updated, added, skipped)) updated, color_updated, added, skipped))
return updated + color_updated + added return updated + color_updated + added
+3 -3
View File
@@ -899,7 +899,7 @@ def generate_patch_from_contours(doc, contour_curves, progress=None):
brep = rg.Brep.CreatePatch( brep = rg.Brep.CreatePatch(
geom_list, u_spans, v_spans, doc.ModelAbsoluteTolerance) geom_list, u_spans, v_spans, doc.ModelAbsoluteTolerance)
if brep is None: if brep is None:
if progress: progress("Patch fehlgeschlagen (None zurueck)") if progress: progress("Patch failed (None zurueck)")
return None return None
gid = doc.Objects.AddBrep(brep) gid = doc.Objects.AddBrep(brep)
if gid and gid != System.Guid.Empty: if gid and gid != System.Guid.Empty:
@@ -1027,7 +1027,7 @@ def volumize_terrain_object(doc, top_obj, depth_doc, progress=None):
old_id = top_obj.Id old_id = top_obj.Id
new_gid = doc.Objects.AddMesh(vol, attrs) new_gid = doc.Objects.AddMesh(vol, attrs)
if new_gid is None or new_gid == System.Guid.Empty: if new_gid is None or new_gid == System.Guid.Empty:
if progress: progress("Volumize: AddMesh fehlgeschlagen") if progress: progress("Volumize: AddMesh failed")
return None return None
doc.Objects.Delete(old_id, True) doc.Objects.Delete(old_id, True)
new_obj = doc.Objects.Find(new_gid) new_obj = doc.Objects.Find(new_gid)
@@ -1137,7 +1137,7 @@ def _geotiff_to_png(tif_path, max_dim=2048):
img.width, img.height)) img.width, img.height))
return png_path return png_path
except ImportError: except ImportError:
print("[SWISSTOPO] Pillow nicht verfuegbar — versuche Eto.Drawing") print("[SWISSTOPO] Pillow not available — versuche Eto.Drawing")
except Exception as ex: except Exception as ex:
print("[SWISSTOPO] Pillow-convert fail:", ex) print("[SWISSTOPO] Pillow-convert fail:", ex)
# --- Variante 2: Eto.Drawing (Mac NSImage liest TIFF) # --- Variante 2: Eto.Drawing (Mac NSImage liest TIFF)
+3 -3
View File
@@ -95,7 +95,7 @@ class TextEditorBridge(panel_base.BaseBridge):
self._form_ref = None self._form_ref = None
self._edit_obj_id = edit_obj_id # bei Doppelklick-Edit set self._edit_obj_id = edit_obj_id # bei Doppelklick-Edit set
self._initial_text = initial_text self._initial_text = initial_text
self._initial_runs = initial_runs # rich-format-Runs falls vorhanden self._initial_runs = initial_runs # rich-format-Runs falls present
self._initial_html = initial_html # 1:1 Editor-HTML beim Reopen self._initial_html = initial_html # 1:1 Editor-HTML beim Reopen
def set_form(self, form): def set_form(self, form):
@@ -274,7 +274,7 @@ class TextEditorBridge(panel_base.BaseBridge):
break break
except Exception: pass except Exception: pass
if applied_scale is None: if applied_scale is None:
print("[TEXT-EDITOR] AnnotationScaling-Property nicht gefunden") print("[TEXT-EDITOR] AnnotationScaling-Property not found")
attrs = Rhino.DocObjects.ObjectAttributes() attrs = Rhino.DocObjects.ObjectAttributes()
col = st.get("color") # [r,g,b] oder None col = st.get("color") # [r,g,b] oder None
@@ -573,7 +573,7 @@ def open_for_edit(obj):
if rj: initial_runs = json.loads(rj) if rj: initial_runs = json.loads(rj)
except Exception as ex: except Exception as ex:
print("[TEXT-EDITOR] read runs:", ex) print("[TEXT-EDITOR] read runs:", ex)
# Editor-innerHTML (Round-Trip-Konservierung): wenn vorhanden, # Editor-innerHTML (Round-Trip-Konservierung): wenn present,
# wird der Editor exakt mit diesem HTML geoeffnet # wird der Editor exakt mit diesem HTML geoeffnet
initial_html = None initial_html = None
try: try:
+8 -8
View File
@@ -133,7 +133,7 @@ def _apply_viewport_colors(cfg):
try: try:
appset = Rhino.ApplicationSettings.AppearanceSettings appset = Rhino.ApplicationSettings.AppearanceSettings
except Exception as ex: except Exception as ex:
print("[OBERLEISTE] AppearanceSettings nicht verfuegbar:", ex) print("[OBERLEISTE] AppearanceSettings not available:", ex)
return False return False
applied = [] applied = []
for key, attr in _VIEWPORT_COLOR_ATTRS: for key, attr in _VIEWPORT_COLOR_ATTRS:
@@ -162,7 +162,7 @@ def _import_display_modes(paths):
try: try:
DMD = Rhino.Display.DisplayModeDescription DMD = Rhino.Display.DisplayModeDescription
except Exception as ex: except Exception as ex:
print("[OBERLEISTE] DisplayModeDescription nicht verfuegbar:", ex) print("[OBERLEISTE] DisplayModeDescription not available:", ex)
return 0 return 0
for p in paths: for p in paths:
try: try:
@@ -340,7 +340,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
try: try:
from Rhino.Display import DisplayModeDescription from Rhino.Display import DisplayModeDescription
except Exception as ex: except Exception as ex:
print("[OBERLEISTE] {}: DMD nicht verfuegbar: {}".format(target_name, ex)) print("[OBERLEISTE] {}: DMD not available: {}".format(target_name, ex))
return False return False
import re import re
template_ini_path = os.path.join(_TEMPLATES_DIR, template_basename) template_ini_path = os.path.join(_TEMPLATES_DIR, template_basename)
@@ -349,7 +349,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
target_guid_obj = System.Guid(target_guid) target_guid_obj = System.Guid(target_guid)
except Exception: except Exception:
target_guid_obj = None target_guid_obj = None
# Template-Datei vorhanden? Wenn ja, Hash davon als "version key" # Template-Datei present? Wenn ja, Hash davon als "version key"
# benutzen — wir nur neu importieren wenn sich die Template-Datei # benutzen — wir nur neu importieren wenn sich die Template-Datei
# geaendert hat. # geaendert hat.
template_exists = os.path.isfile(template_ini_path) template_exists = os.path.isfile(template_ini_path)
@@ -553,7 +553,7 @@ def _ensure_dossier_display_mode(target_name, target_guid, template_basename,
dmd = dm; break dmd = dm; break
except Exception: pass except Exception: pass
if dmd is None: if dmd is None:
print("[OBERLEISTE] Plan-Mode: nach Import nicht gefunden") print("[OBERLEISTE] Plan-Mode: nach Import not found")
return False return False
# KEIN _apply_dossier_plan_attrs() hier — der wuerde # KEIN _apply_dossier_plan_attrs() hier — der wuerde
# UpdateDisplayMode() aufrufen und die ini-Werte (ClipSectionUsage, # UpdateDisplayMode() aufrufen und die ini-Werte (ClipSectionUsage,
@@ -882,7 +882,7 @@ def _apply_window_layout_impl(name):
else: else:
print("[OBERLEISTE] No Rhino.UI API candidates (Mac Rhino " print("[OBERLEISTE] No Rhino.UI API candidates (Mac Rhino "
"exposed das nicht statisch). Falling back to scripted commands.") "exposed das nicht statisch). Falling back to scripted commands.")
# Args zum Probieren: GUID zuerst (falls vorhanden) dann Name. # Args zum Probieren: GUID zuerst (falls present) dann Name.
# Beide als 1-arg Tuple. Doppelte Klammern haben in der alten Version # Beide als 1-arg Tuple. Doppelte Klammern haben in der alten Version
# zu mix von String/Tuple gefuehrt — hier sauber als Liste of Tuples. # zu mix von String/Tuple gefuehrt — hier sauber als Liste of Tuples.
arg_variants = [] arg_variants = []
@@ -948,7 +948,7 @@ def open_settings_dialog():
import Eto.Forms as _ef import Eto.Forms as _ef
import Eto.Drawing as _ed import Eto.Drawing as _ed
except Exception as ex: except Exception as ex:
print("[OBERLEISTE] Eto-Import fehlgeschlagen:", ex); return print("[OBERLEISTE] Eto-Import failed:", ex); return
cfg = _settings_load() cfg = _settings_load()
layouts = _list_window_layouts() layouts = _list_window_layouts()
@@ -1803,7 +1803,7 @@ class OberleisteBridge(panel_base.BaseBridge):
elif t == "RUN_COMMAND": elif t == "RUN_COMMAND":
cmd = (p.get("cmd") or "").strip() cmd = (p.get("cmd") or "").strip()
if cmd: if cmd:
# Auto-Praefix mit "_" falls nicht vorhanden, damit auch # Auto-Praefix mit "_" falls not present, damit auch
# lokalisierte Rhino-Installationen die EN-Namen verstehen. # lokalisierte Rhino-Installationen die EN-Namen verstehen.
if not (cmd.startswith("_") or cmd.startswith("'")): if not (cmd.startswith("_") or cmd.startswith("'")):
cmd = "_" + cmd cmd = "_" + cmd
+1 -1
View File
@@ -420,7 +420,7 @@ def _show_html_form(title, html, width=620, height=720, on_navigating=None,
import Eto.Forms as ef import Eto.Forms as ef
import Eto.Drawing as ed import Eto.Drawing as ed
except Exception as ex: except Exception as ex:
print("[WELCOME] Eto.Forms nicht verfuegbar:", ex) print("[WELCOME] Eto.Forms not available:", ex)
return None return None
try: try: