From 82d0939a18895d19e5a8ca5dc7e6f2bef9964214 Mon Sep 17 00:00:00 2001 From: karim Date: Sat, 6 Jun 2026 13:38:04 +0200 Subject: [PATCH] Fix last German log remnants: [ELEMENTS], re-persisted, after LoadDefaults, exposes --- rhino/elemente.py | 722 +++++++++++++++++++++++----------------------- rhino/toolbar.py | 2 +- 2 files changed, 362 insertions(+), 362 deletions(-) diff --git a/rhino/elemente.py b/rhino/elemente.py index 5379063..e4ca5f4 100644 --- a/rhino/elemente.py +++ b/rhino/elemente.py @@ -110,7 +110,7 @@ def set_aktive_darstellung(doc, value): v = value if value in ("einfach", "standard", "detail") else _DARSTELLUNG_DEFAULT_GLOBAL doc.Strings.SetString(_KEY_AKTIVE_DARSTELLUNG, v) except Exception as ex: - print("[ELEMENTE] set_aktive_darstellung:", ex) + print("[ELEMENTS] set_aktive_darstellung:", ex) # --------------------------------------------------------------------------- @@ -204,7 +204,7 @@ def list_oeff_styles(doc, typ=None): out = [s for s in out if s.get("typ") == typ] return out except Exception as ex: - print("[ELEMENTE] list_oeff_styles:", ex) + print("[ELEMENTS] list_oeff_styles:", ex) return [] @@ -233,7 +233,7 @@ def save_oeff_style(doc, name, settings): items_all.append(norm) try: doc.Strings.SetString(_KEY_OEFF_STYLES, json.dumps(items_all)) except Exception as ex: - print("[ELEMENTE] save_oeff_style:", ex) + print("[ELEMENTS] save_oeff_style:", ex) return norm["id"] @@ -387,7 +387,7 @@ def load_raum_stempel_stile(doc): out.append(s) return out except Exception as ex: - print("[ELEMENTE] load_raum_stempel_stile:", ex) + print("[ELEMENTS] load_raum_stempel_stile:", ex) return [] @@ -405,7 +405,7 @@ def save_raum_stempel_stile(doc, stile): _json.dumps(clean, ensure_ascii=False)) return True except Exception as ex: - print("[ELEMENTE] save_raum_stempel_stile:", ex) + print("[ELEMENTS] save_raum_stempel_stile:", ex) return False @@ -495,7 +495,7 @@ def _ensure_sia_preset(force=False): if force or _ov.load_preset(_SIA_PRESET_NAME) is None: _ov.save_preset(_SIA_PRESET_NAME, _build_sia_preset_rules()) except Exception as ex: - print("[ELEMENTE] ensure_sia_preset:", ex) + print("[ELEMENTS] ensure_sia_preset:", ex) def _sia_fill_enabled(doc): @@ -522,7 +522,7 @@ def _list_hatch_patterns(doc): if name and name not in out: out.append(name) except Exception as ex: - print("[ELEMENTE] list_hatch_patterns:", ex) + print("[ELEMENTS] list_hatch_patterns:", ex) return out @@ -737,7 +737,7 @@ def _find_ebene_sublayer_name(doc, keywords, default_code, default_name, data = json.loads(raw) if isinstance(data, list): ebenen = data except Exception as ex: - print("[ELEMENTE] sublayer-lookup:", ex) + print("[ELEMENTS] sublayer-lookup:", ex) # 1) Per Keyword in der Liste suchen for e in ebenen: if not isinstance(e, dict): continue @@ -758,7 +758,7 @@ def _find_ebene_sublayer_name(doc, keywords, default_code, default_name, try: doc.Strings.SetString("dossier_ebenen", json.dumps(ebenen, ensure_ascii=False)) - print("[ELEMENTE] Ebene '{}_{}' automatisch hinzugefuegt".format( + print("[ELEMENTS] Ebene '{}_{}' automatisch hinzugefuegt".format( default_code, default_name)) # build_layers synchron damit Rhino-Layer existieren bevor # Objekte verschoben werden @@ -768,15 +768,15 @@ def _find_ebene_sublayer_name(doc, keywords, default_code, default_name, zlist = json.loads(z_raw) if z_raw else [] if zlist: layer_builder.build_layers(doc, zlist, ebenen) except Exception as ex: - print("[ELEMENTE] build_layers nach auto-add:", ex) + print("[ELEMENTS] build_layers nach auto-add:", ex) # Ebenen-Manager UI mit-informieren via broadcast_state try: import layers_panel as rhinopanel rhinopanel._broadcast_state(doc) except Exception as ex: - print("[ELEMENTE] broadcast_state:", ex) + print("[ELEMENTS] broadcast_state:", ex) except Exception as ex: - print("[ELEMENTE] Auto-Add fehler:", ex) + print("[ELEMENTS] Auto-Add fehler:", ex) return "{}_{}".format(default_code, default_name) @@ -869,7 +869,7 @@ def _ensure_referenz_child_in_doc(doc, parent_code, parent_keywords, import layers_panel as rhinopanel rhinopanel._broadcast_state(doc) except Exception as ex: - print("[ELEMENTE] _ensure_referenz_child:", ex) + print("[ELEMENTS] _ensure_referenz_child:", ex) return parent_sub, ref_child_sub @@ -956,7 +956,7 @@ def _ensure_oeff_ebenen_in_doc(doc): import layers_panel as rhinopanel rhinopanel._broadcast_state(doc) except Exception as ex: - print("[ELEMENTE] _ensure_oeff_ebenen_in_doc build:", ex) + print("[ELEMENTS] _ensure_oeff_ebenen_in_doc build:", ex) return wand_code @@ -1055,7 +1055,7 @@ def _ensure_oeff_material(doc, kind): cache[kind] = idx return idx except Exception as ex: - print("[ELEMENTE] _ensure_oeff_material:", ex) + print("[ELEMENTS] _ensure_oeff_material:", ex) return -1 @@ -2633,10 +2633,10 @@ def _build_cluster_union_brep(doc, cluster_ids, uk, ok): try: unioned = rg.Brep.CreateBooleanUnion(breps, tol) except Exception as ex: - print("[ELEMENTE] cluster boolean-union exc:", ex) + print("[ELEMENTS] cluster boolean-union exc:", ex) return None if not unioned or len(unioned) == 0: - print("[ELEMENTE] cluster boolean-union empty (cluster={})".format( + print("[ELEMENTS] cluster boolean-union empty (cluster={})".format( cluster_ids)) return None if len(unioned) == 1: @@ -2652,7 +2652,7 @@ def _build_cluster_union_brep(doc, cluster_ids, uk, ok): result = max(unioned, key=lambda b: b.GetVolume() if b else 0) # MergeCoplanarFaces entfernt interne Nahtlinien zwischen koplanaren Faces try: result.MergeCoplanarFaces(tol) - except Exception as ex: print("[ELEMENTE] MergeCoplanarFaces:", ex) + except Exception as ex: print("[ELEMENTS] MergeCoplanarFaces:", ex) return result @@ -2736,11 +2736,11 @@ def _build_cluster_layered_breps(doc, cluster_ids, layers_def, uk, ok): try: unioned = rg.Brep.CreateBooleanUnion(layer_breps, tol) except Exception as ex: - print("[ELEMENTE] cluster layered union exc layer={}:".format( + print("[ELEMENTS] cluster layered union exc layer={}:".format( layer_idx), ex) unioned = None if not unioned or len(unioned) == 0: - print("[ELEMENTE] cluster layered union empty layer={}".format( + print("[ELEMENTS] cluster layered union empty layer={}".format( layer_idx)) out.append((None, color, name)); continue if len(unioned) == 1: @@ -2910,7 +2910,7 @@ class _ClusterVolumeSelectHandler(Rhino.UI.MouseCallback): finally: self._busy = False except Exception as ex: - print("[ELEMENTE] cluster-select OnMouseDown:", ex) + print("[ELEMENTS] cluster-select OnMouseDown:", ex) _STICKY_CLUSTER_SELECT = "_dossier_cluster_select_handler" @@ -2948,9 +2948,9 @@ def _prewarm_native_libs(): rg.Brep.CreateBooleanUnion([b1, b2], 0.001) rg.Brep.CreateBooleanDifference([b1], [b2], 0.001) except Exception: pass - print("[ELEMENTE] Native libs pre-warmed (offset/extrude/boolean)") + print("[ELEMENTS] Native libs pre-warmed (offset/extrude/boolean)") except Exception as ex: - print("[ELEMENTE] prewarm:", ex) + print("[ELEMENTS] prewarm:", ex) def install_cluster_select_handler(): @@ -2963,9 +2963,9 @@ def install_cluster_select_handler(): h = _ClusterVolumeSelectHandler() h.Enabled = True sc.sticky[_STICKY_CLUSTER_SELECT] = h - print("[ELEMENTE] Cluster-Volume Select-Handler active") + print("[ELEMENTS] Cluster-Volume Select-Handler active") except Exception as ex: - print("[ELEMENTE] cluster-select install:", ex) + print("[ELEMENTS] cluster-select install:", ex) def _regen_cluster_anchor(doc, anchor_id, cluster_ids, anchor_meta): @@ -3023,7 +3023,7 @@ def _regen_cluster_anchor(doc, anchor_id, cluster_ids, anchor_meta): op_meta["oeff_brueest"], uk) if co: cutouts.append(co) except Exception as ex: - print("[ELEMENTE] cluster cutout:", ex) + print("[ELEMENTS] cluster cutout:", ex) # Cutouts pro Layer-Result abziehen if cutouts: new_results = [] @@ -3035,7 +3035,7 @@ def _regen_cluster_anchor(doc, anchor_id, cluster_ids, anchor_meta): if diff and len(diff) > 0: b = diff[0] except Exception as ex: - print("[ELEMENTE] cluster bool-diff openings:", ex) + print("[ELEMENTS] cluster bool-diff openings:", ex) new_results.append((b, col, nm)) layer_results = new_results @@ -3110,7 +3110,7 @@ def _regen_cluster_anchor(doc, anchor_id, cluster_ids, anchor_meta): try: doc.Objects.AddBrep(lbrep, attrs) except Exception as ex: - print("[ELEMENTE] AddBrep cluster layer {}:".format(idx), ex) + print("[ELEMENTS] AddBrep cluster layer {}:".format(idx), ex) return False # Stale Auto-Groups + Centerlines fuer alle Cluster-Member regen try: @@ -3118,8 +3118,8 @@ def _regen_cluster_anchor(doc, anchor_id, cluster_ids, anchor_meta): _strip_wall_auto_group(doc, _wid) _regen_wall_lines(doc, _wid, in_cluster=True) except Exception as ex: - print("[ELEMENTE] strip/lines (cluster):", ex) - print("[ELEMENTE] cluster-union anchor={} members={} layers={} cutouts={}".format( + print("[ELEMENTS] strip/lines (cluster):", ex) + print("[ELEMENTS] cluster-union anchor={} members={} layers={} cutouts={}".format( anchor_id, len(cluster_list), len(layer_results) if is_layered else 1, len(cutouts))) return True @@ -3574,14 +3574,14 @@ def _regen_wall_lines(doc, wall_id, in_cluster=False): try: doc.Objects.AddCurve(cl, _build_attrs("wand_centerline", dashed=True)) except Exception as ex: - print("[ELEMENTE] AddCurve centerline:", ex) + print("[ELEMENTS] AddCurve centerline:", ex) outline = _make_wall_outline(axis_curve, dicke, referenz) if outline is not None: try: doc.Objects.AddCurve(outline, _build_attrs("wand_outline", dashed=False)) except Exception as ex: - print("[ELEMENTE] AddCurve outline:", ex) + print("[ELEMENTS] AddCurve outline:", ex) # Alias fuer Backwards-Compat — alte Callsites benutzen den alten Namen. @@ -3649,7 +3649,7 @@ def _get_all_materials(doc): if not n: continue merged[n] = dict(m) except Exception as ex: - print("[ELEMENTE] _get_all_materials:", ex) + print("[ELEMENTS] _get_all_materials:", ex) return merged @@ -3662,7 +3662,7 @@ def _get_all_wand_styles(doc): if isinstance(ps, dict): return list(ps.get("wand_styles", []) or []) except Exception as ex: - print("[ELEMENTE] _get_all_wand_styles:", ex) + print("[ELEMENTS] _get_all_wand_styles:", ex) return [] @@ -3793,7 +3793,7 @@ def _t_junction_layer_overrides(doc, my_meta, through_meta, ep_pt, out_dir, backbone_ext = max(backbone_dL, backbone_dR, 0.0) else: backbone_ext = max(-backbone_dL, -backbone_dR, 0.0) - print(("[ELEMENTE] bb-ext-calc: bb_dL={:.3f} bb_dR={:.3f}" + print(("[ELEMENTS] bb-ext-calc: bb_dL={:.3f} bb_dR={:.3f}" " btan=({:.2f},{:.2f}) perp=({:.2f},{:.2f})" " od=({:.2f},{:.2f}) dot_opx={:.2f} → ext={:.3f}").format( backbone_dL, backbone_dR, @@ -3841,7 +3841,7 @@ def _t_junction_layer_overrides(doc, my_meta, through_meta, ep_pt, out_dir, per_ext.append(0.0) per_miter.append(standard_miter) match_log.append("{}=stop".format(mat or "?")) - print("[ELEMENTE] T-Junction Schichtdurchdringung: backbone={} " + print("[ELEMENTS] T-Junction Schichtdurchdringung: backbone={} " "(prio={}, ext={:.3f}), through-mats={}, layers: {}".format( backbone or "none", backbone_prio, backbone_ext, sorted(th_materials), ", ".join(match_log))) @@ -3909,7 +3909,7 @@ def _set_layer_section_hatch(doc, layer_idx, hatch_name, scale=1.0, except Exception: pass return changed except Exception as ex: - print("[ELEMENTE] _set_layer_section_hatch:", ex) + print("[ELEMENTS] _set_layer_section_hatch:", ex) return False @@ -3951,7 +3951,7 @@ def _ensure_material_sublayer(doc, geschoss_name, material_name): doc.Layers.Modify(layer, idx, True) except Exception: pass except Exception as ex: - print("[ELEMENTE] _ensure_material_sublayer:", ex) + print("[ELEMENTS] _ensure_material_sublayer:", ex) return idx @@ -3990,7 +3990,7 @@ def _ensure_material(doc, hex_color): cache[key] = idx return idx except Exception as ex: - print("[ELEMENTE] _ensure_material:", ex) + print("[ELEMENTS] _ensure_material:", ex) return -1 @@ -4071,7 +4071,7 @@ def _ensure_pbr_material(doc, mat_dict): try: pbr.OpacityIor = float(mat_dict.get("iorN", 1.0)) except Exception: pass except Exception as ex: - print("[ELEMENTE] PBR setup:", ex) + print("[ELEMENTS] PBR setup:", ex) # Texturen + UV-Repeat try: uv = float(mat_dict.get("uvScaleM", 1.0)) or 1.0 @@ -4099,7 +4099,7 @@ def _ensure_pbr_material(doc, mat_dict): except Exception: pass except Exception: pass except Exception as ex: - print("[ELEMENTE] apply tex {}:".format(slot), ex) + print("[ELEMENTS] apply tex {}:".format(slot), ex) _apply_tex("diffuse", "SetBitmapTexture") _apply_tex("bump", "SetBumpTexture") _apply_tex("transparency", "SetTransparencyTexture") @@ -4110,7 +4110,7 @@ def _ensure_pbr_material(doc, mat_dict): cache[sig] = idx return idx except Exception as ex: - print("[ELEMENTE] _ensure_pbr_material:", ex) + print("[ELEMENTS] _ensure_pbr_material:", ex) return -1 @@ -4461,7 +4461,7 @@ def _attach_meta(obj_attrs, wall_id, type_, geschoss, dicke, uk_over, ok_over, obj_attrs.SetUserString(_KEY_RAUM_LAYOUT, _json.dumps(raum_layout)) except Exception as ex: - print("[ELEMENTE] raum_layout set:", ex) + print("[ELEMENTS] raum_layout set:", ex) if raum_txt_modus is not None and raum_txt_modus in ("fix", "masstab"): obj_attrs.SetUserString(_KEY_RAUM_TXT_MODUS, raum_txt_modus) # Stempel-Felder @@ -4972,14 +4972,14 @@ def _wall_group_index(doc, wall_id, create_if_missing=True): try: grp_idx = doc.Groups.Add() except Exception as ex: - print("[ELEMENTE] wall-group Add:", ex) + print("[ELEMENTS] wall-group Add:", ex) return -1 try: new_attrs = axis_obj.Attributes.Duplicate() new_attrs.AddToGroup(grp_idx) doc.Objects.ModifyAttributes(axis_obj, new_attrs, True) except Exception as ex: - print("[ELEMENTE] wall-group attach axis:", ex) + print("[ELEMENTS] wall-group attach axis:", ex) return grp_idx @@ -5018,7 +5018,7 @@ def _strip_wall_auto_group(doc, wall_id): except Exception: pass doc.Objects.ModifyAttributes(axis_obj, new_attrs, True) except Exception as ex: - print("[ELEMENTE] strip auto-group:", ex) + print("[ELEMENTS] strip auto-group:", ex) def _add_to_wall_group(doc, obj_id, wall_id): @@ -5035,7 +5035,7 @@ def _add_to_wall_group(doc, obj_id, wall_id): new_attrs.AddToGroup(grp_idx) doc.Objects.ModifyAttributes(obj, new_attrs, True) except Exception as ex: - print("[ELEMENTE] wall-group attach:", ex) + print("[ELEMENTS] wall-group attach:", ex) def _find_volume(doc, wall_id): @@ -5150,7 +5150,7 @@ def _make_oeffnung_cutout(axis_curve, point_on_axis, wall_dicke, breite, if extrusion is None: return None return extrusion.ToBrep() except Exception as ex: - print("[ELEMENTE] _make_oeffnung_cutout:", ex) + print("[ELEMENTS] _make_oeffnung_cutout:", ex) return None @@ -5186,7 +5186,7 @@ def _make_oeff_box(pt, tan, tan_lo, tan_hi, z_lo, z_hi, perp_lo, perp_hi): rg.Interval(perp_lo, perp_hi)) return box.ToBrep() except Exception as ex: - print("[ELEMENTE] _make_oeff_box:", ex) + print("[ELEMENTS] _make_oeff_box:", ex) return None @@ -5331,7 +5331,7 @@ def _make_tuer_swing_curves(axis_curve, point_on_axis, wall_dicke, leaf_line = rg.LineCurve(hinge_pt, open_pt) curves.append(leaf_line) except Exception as ex: - print("[ELEMENTE] swing leaf:", ex) + print("[ELEMENTS] swing leaf:", ex) # 2) Schwung-Arc — Mittelpunkt = Scharnier, Radius = Tuerblatt-Laenge. # Plane mit X→closed_pt + Y→open_pt; Arc(plane, radius, angle) startet # auf der X-Achse und sweept CCW um angle Radian. Damit liegt der @@ -5344,7 +5344,7 @@ def _make_tuer_swing_curves(axis_curve, point_on_axis, wall_dicke, if arc.IsValid: curves.append(rg.ArcCurve(arc)) except Exception as ex: - print("[ELEMENTE] swing arc:", ex) + print("[ELEMENTS] swing arc:", ex) return curves @@ -5503,7 +5503,7 @@ def _make_oeffnung_pieces(axis_curve, point_on_axis, wall_dicke, oeff_meta, base brep = surf.ToBrep() return [(brep, "pane")] if brep is not None else [] except Exception as ex: - print("[ELEMENTE] einfach pane:", ex) + print("[ELEMENTS] einfach pane:", ex) return [] pieces = [] @@ -5534,7 +5534,7 @@ def _make_oeffnung_pieces(axis_curve, point_on_axis, wall_dicke, oeff_meta, base else: pieces.append((outer_box, "rahmen")) except Exception as ex: - print("[ELEMENTE] Rahmen BoolDiff:", ex) + print("[ELEMENTS] Rahmen BoolDiff:", ex) # --- Mittelpfosten (Fluegel > 1): kleine Stege im inneren Bereich. # Gleiche Material-Klasse wie Rahmen → 'rahmen'-Kind. @@ -5674,7 +5674,7 @@ def load_stempel_stile(doc): return [s for s in data if isinstance(s, dict) and s.get("id") and s.get("name")] except Exception as ex: - print("[ELEMENTE] load_stempel_stile:", ex) + print("[ELEMENTS] load_stempel_stile:", ex) return [] @@ -5688,7 +5688,7 @@ def save_stempel_stile(doc, stile): _json.dumps(clean, ensure_ascii=False)) return True except Exception as ex: - print("[ELEMENTE] save_stempel_stile:", ex) + print("[ELEMENTS] save_stempel_stile:", ex) return False # Oeffnungs-Cutout: Boolean-Difference aus Wand. Zusaetzlich kriegt die # Oeffnung ihr eigenes Volumen (Rahmen + Sims + Glas) als Sub-Element. @@ -5769,7 +5769,7 @@ def _thicken_roof_inward(top_brep, dicke, tol=0.001): if arr and len(arr) > 0: return arr[0] except Exception as ex: - print("[ELEMENTE] CreateOffsetBrep ({}, extend={}):".format(distance, extend), ex) + print("[ELEMENTS] CreateOffsetBrep ({}, extend={}):".format(distance, extend), ex) return None # Probiere beide Vorzeichen (+/-d), beide extend-Varianten. @@ -5803,7 +5803,7 @@ def _join_open_shell(faces, tol=0.001): if joined and len(joined) > 0: return joined[0] except Exception as ex: - print("[ELEMENTE] _join_open_shell:", ex) + print("[ELEMENTS] _join_open_shell:", ex) return None @@ -5847,7 +5847,7 @@ def _make_pultdach_volume(outline_curve, dicke, base_height, slope_deg, eave_idx top_brep = top_faces[0] return _thicken_roof_inward(top_brep, dicke, tol) except Exception as ex: - print("[ELEMENTE] Pultdach Brep:", ex) + print("[ELEMENTS] Pultdach Brep:", ex) return None @@ -6428,7 +6428,7 @@ def _make_stuetze_volume(point, profil_typ, B, H, D, t, angle, uk, ok): return diff[0] return outer except Exception as ex: - print("[ELEMENTE] Stuetze extrusion:", ex) + print("[ELEMENTS] Stuetze extrusion:", ex) return None @@ -6487,7 +6487,7 @@ def _make_traeger_volume(axis_curve, profil_typ, B, H, D, t, angle, z_top): if outer is None: return None outer = outer.CapPlanarHoles(0.001) or outer except Exception as ex: - print("[ELEMENTE] Traeger extrusion:", ex) + print("[ELEMENTS] Traeger extrusion:", ex) return None # Bei Rohr: Innen-Kreis ausstanzen @@ -6509,10 +6509,10 @@ def _make_traeger_volume(axis_curve, profil_typ, B, H, D, t, angle, z_top): if diff and len(diff) > 0: outer = diff[0] except Exception as ex: - print("[ELEMENTE] Traeger rohr-diff:", ex) + print("[ELEMENTS] Traeger rohr-diff:", ex) return outer except Exception as ex: - print("[ELEMENTE] Traeger:", ex) + print("[ELEMENTS] Traeger:", ex) return None @@ -6559,7 +6559,7 @@ def _make_decke_volume(outline_curve, dicke, uk, ok, hole_curves=None): tol = 0.001 planar = rg.Brep.CreatePlanarBreps([outer] + holes, tol) if not planar or len(planar) == 0: - print("[ELEMENTE] Decke planar w/ holes — CreatePlanarBreps " + print("[ELEMENTS] Decke planar w/ holes — CreatePlanarBreps " "lieferte nichts. Fallback ohne Loch.") return _make_decke_volume(outline_curve, dicke, uk, ok, None) base = planar[0] @@ -6570,12 +6570,12 @@ def _make_decke_volume(outline_curve, dicke, uk, ok, hole_curves=None): rg.Point3d(0, 0, ok)) result = face.CreateExtrusion(path, True) if result is None or not result.IsValid: - print("[ELEMENTE] BrepFace.CreateExtrusion failed — " + print("[ELEMENTS] BrepFace.CreateExtrusion failed — " "Fallback ohne Loch.") return _make_decke_volume(outline_curve, dicke, uk, ok, None) return result except Exception as ex: - print("[ELEMENTE] Decke mit Loch:", ex) + print("[ELEMENTS] Decke mit Loch:", ex) return _make_decke_volume(outline_curve, dicke, uk, ok, None) @@ -6804,7 +6804,7 @@ def _make_raum_stamp_text(centroid, name, nummer, funktion, area, rundung, try: te.SetFontIndex(idx) except Exception: pass except Exception as ex: - print("[ELEMENTE] Raum Stamp Font:", ex) + print("[ELEMENTS] Raum Stamp Font:", ex) elif doc is not None and (bold or italic): # Kein expliziter Font, aber Stil set — auf Default-Font # bold/italic anwenden @@ -6820,10 +6820,10 @@ def _make_raum_stamp_text(centroid, name, nummer, funktion, area, rundung, try: te.SetFontIndex(idx) except Exception: pass except Exception as ex: - print("[ELEMENTE] Raum Stamp Style:", ex) + print("[ELEMENTS] Raum Stamp Style:", ex) return te except Exception as ex: - print("[ELEMENTE] Raum Stamp:", ex) + print("[ELEMENTS] Raum Stamp:", ex) return None @@ -6980,7 +6980,7 @@ def _make_stempel_text(pos, scope, doc, text_height=0.20, z=0.0, except Exception: pass return te except Exception as ex: - print("[ELEMENTE] _make_stempel_text:", ex) + print("[ELEMENTS] _make_stempel_text:", ex) return None @@ -7008,7 +7008,7 @@ def _regenerate_stempel_for_geschoss(doc, geschoss_id): for sid in ids: try: _regenerate_element(doc, sid) except Exception as ex: - print("[ELEMENTE] stempel-regen", sid, ":", ex) + print("[ELEMENTS] stempel-regen", sid, ":", ex) finally: sc.sticky[_REGEN_BUSY] = _was @@ -7035,7 +7035,7 @@ def _make_raum_hatch(outline_curve, z_uk, doc, pattern_name="Solid"): if not hatches or len(hatches) == 0: return None return hatches[0] except Exception as ex: - print("[ELEMENTE] Raum Hatch:", ex) + print("[ELEMENTS] Raum Hatch:", ex) return None @@ -7264,7 +7264,7 @@ def _wendel_wedge_brep(center, r_in, r_out, a0, a1, top_z, if joined and len(joined) > 0: return joined[0] except Exception as ex: - print("[ELEMENTE] wendel wedge join:", ex) + print("[ELEMENTS] wendel wedge join:", ex) return breps[0] if breps else None @@ -7362,7 +7362,7 @@ def _make_treppe_wendel_volume(axis_polyline, breite, referenz, n_stufen, ext = rg.Extrusion.Create(crv, z_top - z_bot, True) if ext is not None: parts.append(ext.ToBrep()) except Exception as ex: - print("[ELEMENTE] Wendel massiv step:", ex) + print("[ELEMENTS] Wendel massiv step:", ex) elif modus == "plattenrand": # Gestuft: flat bottom bei z_top - D unter jedem Tritt. # Adjacent Wedges haben unterschiedliche Bottom-Z → visible @@ -7436,7 +7436,7 @@ def _make_treppe_l_volume(axis_polyline, breite, referenz, n_stufen, uk, ok, eff_L1 = v1.Length eff_L2 = v2.Length if eff_L1 < 0.05 or eff_L2 < 0.05: - print("[ELEMENTE] L-Treppe: Lauflinien zu kurz") + print("[ELEMENTS] L-Treppe: Lauflinien zu kurz") return None elif poly.Count == 3: # Kompakt: KEIN Cut-Back (lauf geht bis zum Eckpunkt). Lage=links/ @@ -7451,7 +7451,7 @@ def _make_treppe_l_volume(axis_polyline, breite, referenz, n_stufen, uk, ok, L1 = v1.Length L2 = v2.Length if L1 < 0.21 or L2 < 0.21: - print("[ELEMENTE] L-Treppe: Lauflinie zu kurz (min 1 Stufe)") + print("[ELEMENTS] L-Treppe: Lauflinie zu kurz (min 1 Stufe)") return None run1_end = rg.Point3d(p1.X, p1.Y, 0) run2_start = rg.Point3d(p1.X, p1.Y, 0) @@ -7556,7 +7556,7 @@ def _make_treppe_l_volume(axis_polyline, breite, referenz, n_stufen, uk, ok, if ext is not None: podest_brep = ext.ToBrep() except Exception as ex: - print("[ELEMENTE] Podest hexagon:", ex) + print("[ELEMENTS] Podest hexagon:", ex) parts = [b for b in (brep1, podest_brep, brep2) if b is not None] if not parts: return None @@ -7622,10 +7622,10 @@ def _make_treppe_volume(axis_curve, breite, referenz, n_stufen, uk, ok, if ext is not None: return ext.ToBrep() except Exception as ex: - print("[ELEMENTE] Treppe Extrusion:", ex) + print("[ELEMENTS] Treppe Extrusion:", ex) return None except Exception as ex: - print("[ELEMENTE] _make_treppe_volume:", ex) + print("[ELEMENTS] _make_treppe_volume:", ex) return None @@ -7699,7 +7699,7 @@ def _treppe_2d_arrow_curves(p_tail, p_head, head_size, style="klassisch", if hatches and len(hatches) > 0: out.append(hatches[0]) except Exception as ex: - print("[ELEMENTE] arrow hatch:", ex) + print("[ELEMENTS] arrow hatch:", ex) elif style == "breit": out.extend(_v_at(p_head.X, p_head.Y, head_size * 1.2, deg=55.0)) elif style == "voll" and wide_off_l is not None and wide_off_r is not None: @@ -7719,7 +7719,7 @@ def _treppe_2d_arrow_curves(p_tail, p_head, head_size, style="klassisch", else: # klassisch (Default + Fallback bei 'voll' ohne breite) out.extend(_v_at(p_head.X, p_head.Y, head_size)) except Exception as ex: - print("[ELEMENTE] _treppe_2d_arrow_curves:", ex) + print("[ELEMENTS] _treppe_2d_arrow_curves:", ex) return out @@ -8116,7 +8116,7 @@ def _aussen_l_polygon(axis_polyline, breite, referenz, z): return rg.PolylineCurve(rg.Polyline(pts)) return None except Exception as ex: - print("[ELEMENTE] _aussen_l_polygon:", ex) + print("[ELEMENTS] _aussen_l_polygon:", ex) return None @@ -8492,7 +8492,7 @@ def _make_treppe_2d_symbol(meta, geom, z, total_h, cut_h, doc=None): solid.extend(_bruch_gerade(geom, breite, ref, n, total_h, cut_h, z)) except Exception as ex: - print("[ELEMENTE] _make_treppe_2d_symbol:", ex) + print("[ELEMENTS] _make_treppe_2d_symbol:", ex) return solid, dashed @@ -8552,7 +8552,7 @@ def _regenerate_element(doc, element_id): sc.sticky["_dossier_stempel_dirty"] = None _regenerate_stempel_for_geschoss(doc, dirty_gid) except Exception as ex: - print("[ELEMENTE] stempel-cascade:", ex) + print("[ELEMENTS] stempel-cascade:", ex) return result @@ -8568,7 +8568,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name try: cluster_ids = _find_wall_cluster(doc, element_id) except Exception as ex: - print("[ELEMENTE] cluster detect:", ex) + print("[ELEMENTS] cluster detect:", ex) # Cluster-Path (Boolean-Union): nur fuer SOLID + non-linear (T, branched). # Layered + non-linear: per-Layer-Union ist geometrisch unsinnig weil # die Schichten zwischen perpendikulaeren Waenden orthogonal stehen. @@ -8585,7 +8585,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name except Exception: pass try: _regenerate_element(doc, anchor) except Exception as ex: - print("[ELEMENTE] cluster anchor regen:", ex) + print("[ELEMENTS] cluster anchor regen:", ex) # Covered-Check: hat Anchor uns ins gemeinsame Brep aufgenommen? for obj in doc.Objects: m = _read_meta(obj) @@ -8607,7 +8607,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name try: chain_ids = _find_wall_chain(doc, element_id) except Exception as ex: - print("[ELEMENTE] chain detect:", ex) + print("[ELEMENTS] chain detect:", ex) if len(chain_ids) > 1: anchor = _chain_anchor(chain_ids) if anchor != element_id: @@ -8618,7 +8618,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name except Exception: pass try: _regenerate_element(doc, anchor) except Exception as ex: - print("[ELEMENTE] anchor regen:", ex) + print("[ELEMENTS] anchor regen:", ex) # Pruefen: hat Anchor ein Chain-Volume gebaut das uns deckt? # Wenn ja → fertig. Wenn nein (z.B. Polyline-Build failed) → # weiterlaufen + uns als Solo-Wand bauen. @@ -8642,7 +8642,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name try: chain_curve = _build_chain_polyline(doc, chain_ids) except Exception as ex: - print("[ELEMENTE] chain polyline:", ex) + print("[ELEMENTS] chain polyline:", ex) if chain_curve is not None: _test_uk, _test_ok = _resolve_uk_ok(doc, meta["geschoss"], meta["uk_override"], @@ -8651,7 +8651,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name chain_curve, meta["dicke"], _test_uk, _test_ok, meta.get("referenz", "mid")) if _test_brep is None: - print("[ELEMENTE] chain {} brep build FAILED — fallback " + print("[ELEMENTS] chain {} brep build FAILED — fallback " "per-wand (Offset evtl. mehrteilig)".format(chain_ids)) chain_curve = None if chain_curve is None: @@ -8676,7 +8676,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name geom = chain_curve uk, ok = _resolve_uk_ok(doc, meta["geschoss"], meta["uk_override"], meta["ok_override"]) - print("[ELEMENTE] regen wand {}: uk={:.3f} ok={:.3f} chain={} (uk_over='{}' ok_over='{}')".format( + print("[ELEMENTS] regen wand {}: uk={:.3f} ok={:.3f} chain={} (uk_over='{}' ok_over='{}')".format( element_id, uk, ok, len(chain_ids) if chain_ids else 1, meta.get("uk_override", ""), meta.get("ok_override", ""))) # Wand-Verbindungen: Miter-Linien aus Nachbarwand-Joints (Corner + T). @@ -8756,7 +8756,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name b_dicke, b_ref) if tm is not None: miter_end = tm except Exception as ex: - print("[ELEMENTE] wall joints:", ex) + print("[ELEMENTS] wall joints:", ex) # Schichten ermitteln. Layered + nicht-leere Liste → mehrere Breps, # sonst ein einzelnes (solid). @@ -8790,7 +8790,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name per_layer_miter_end=pl_miter_e) # Diagnostic: layer build status _n_ok = sum(1 for (b, _c, _n) in layer_breps if b is not None) - print("[ELEMENTE] layered build {} (chain={}): {}/{} layers built" + print("[ELEMENTS] layered build {} (chain={}): {}/{} layers built" " (def={} layers)".format( element_id, len(chain_ids) if chain_ids else 1, _n_ok, len(layer_breps), len(layers_def))) @@ -8909,7 +8909,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name _pe = _backbone_axis_ext.PointAtEnd _gs = geom.PointAtStart _ge = geom.PointAtEnd - print(("[ELEMENTE] axis-ext: geom y=[{:.3f}{:.3f}]" + print(("[ELEMENTS] axis-ext: geom y=[{:.3f}{:.3f}]" " → bb-ext y=[{:.3f}{:.3f}] (ext_val={:.3f}," " is_end={})").format( _gs.Y, _ge.Y, _ps.Y, _pe.Y, @@ -9061,7 +9061,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name (_cbb.Min.X, _cbb.Max.X)) _layer_breps_3d.append(_br) except Exception as _ex: - print("[ELEMENTE] Column-extr exc ({}):" + print("[ELEMENTS] Column-extr exc ({}):" .format(_mat), _ex) if not _layer_breps_3d: continue # Kein 3D Union — bei disjoint breps wuerde Union eine @@ -9102,7 +9102,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name for _di, _dbr in enumerate(_result_breps): try: _bbd = _dbr.GetBoundingBox(True) - print(("[ELEMENTE] {} PRE-CARVE br[{}]" + print(("[ELEMENTS] {} PRE-CARVE br[{}]" " x=[{:.3f},{:.3f}]" " y=[{:.3f},{:.3f}]").format( _mat, _di, @@ -9112,7 +9112,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name for _di, _dcb in enumerate(_carve_breps): try: _bbd = _dcb.GetBoundingBox(True) - print(("[ELEMENTE] {} CARVE cb[{}]" + print(("[ELEMENTS] {} CARVE cb[{}]" " x=[{:.3f},{:.3f}]" " y=[{:.3f},{:.3f}]").format( _mat, _di, @@ -9135,11 +9135,11 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name or _cb_bb.Min.Y + _eps >= _br_bb.Max.Y or _br_bb.Min.Z + _eps >= _cb_bb.Max.Z or _cb_bb.Min.Z + _eps >= _br_bb.Max.Z): - print(("[ELEMENTE] {} SKIP carve" + print(("[ELEMENTS] {} SKIP carve" " cb[{}] vs br[{}]").format( _mat, _ci, _bi)) _next.append(_br); continue - print(("[ELEMENTE] {} DO carve" + print(("[ELEMENTS] {} DO carve" " cb[{}] vs br[{}]").format( _mat, _ci, _bi)) try: @@ -9169,7 +9169,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name if _u3d_post and len(_u3d_post) > 0: _result_breps = list(_u3d_post) except Exception as _ex: - print("[ELEMENTE] {} post-Union exc:" + print("[ELEMENTS] {} post-Union exc:" .format(_mat), _ex) # 4. Validity + MergeCoplanarFaces _result_breps = [_br for _br in _result_breps @@ -9185,7 +9185,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name for _bri, _br_diag in enumerate(_result_breps): try: _bb_d = _br_diag.GetBoundingBox(True) - print("[ELEMENTE] {} result[{}] y=[{:.3f}" + print("[ELEMENTS] {} result[{}] y=[{:.3f}" ",{:.3f}]".format( _mat, _bri, _bb_d.Min.Y, _bb_d.Max.Y)) except Exception: pass @@ -9197,7 +9197,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name doc.Objects.Replace( _existing[_ri].Id, _result_breps[_ri]) except Exception as _ex: - print("[ELEMENTE] 2D Replace:", _ex) + print("[ELEMENTS] 2D Replace:", _ex) else: if _existing: try: @@ -9205,7 +9205,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name doc.Objects.AddBrep( _result_breps[_ri], _attrs) except Exception as _ex: - print("[ELEMENTE] 2D Add:", _ex) + print("[ELEMENTS] 2D Add:", _ex) for _ei in range(len(_result_breps), len(_existing)): try: doc.Objects.Delete( _existing[_ei].Id, True) @@ -9218,13 +9218,13 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name _lb_old = layer_breps[_layer_i] layer_breps[_layer_i] = ( None, _lb_old[1], _lb_old[2]) - print("[ELEMENTE] 2D-Phase2: {} ({}) → {} brep(s)" + print("[ELEMENTS] 2D-Phase2: {} ({}) → {} brep(s)" " aus {} cols".format( _mat, "backbone" if _is_backbone else "L-merge", len(_result_breps), len(_column_breps))) except Exception as _ex: - print("[ELEMENTE] T-Junction Phase2 2D:", _ex) + print("[ELEMENTS] T-Junction Phase2 2D:", _ex) else: single_brep = _make_volume_geometry( geom, meta["dicke"], uk, ok, @@ -9235,10 +9235,10 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name # an mehrteiliger Curve scheitern. Pro-Segment-Fallback. if (chain_ids and len(chain_ids) > 1 and isinstance(geom, rg.PolylineCurve)): - print("[ELEMENTE] chain volume geom FAILED, fallback " + print("[ELEMENTS] chain volume geom FAILED, fallback " "per-segment (chain={})".format(chain_ids)) else: - print("[ELEMENTE] wand volume geom FAILED for {}".format( + print("[ELEMENTS] wand volume geom FAILED for {}".format( element_id)) layer_breps = [(single_brep, "", "")] if single_brep else [] @@ -9288,7 +9288,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name if diff and len(diff) > 0: brep = diff[0] except Exception as ex: - print("[ELEMENTE] BoolDiff layer:", ex) + print("[ELEMENTS] BoolDiff layer:", ex) new_layer_breps.append((brep, color, lname)) layer_breps = new_layer_breps @@ -9367,12 +9367,12 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name for (old_obj, _m), (pbrep, _k) in zip(old_objs, pieces): try: doc.Objects.Replace(old_obj.Id, pbrep) except Exception as ex: - print("[ELEMENTE] replace oeff vol:", ex) + print("[ELEMENTS] replace oeff vol:", ex) continue # Fallback: Anzahl oder Kind hat sich geaendert → alte loeschen + neue adden. for o, _m in old_objs: try: doc.Objects.Delete(o.Id, True) - except Exception as ex: print("[ELEMENTE] del old oeff vol:", ex) + except Exception as ex: print("[ELEMENTS] del old oeff vol:", ex) for (pbrep, kind) in pieces: op_attrs = Rhino.DocObjects.ObjectAttributes() # Per-Kind Sublayer unter WAENDE::Öffnungen:: @@ -9430,7 +9430,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name new_attrs.LayerIndex = src_layer doc.Objects.ModifyAttributes(src_obj, new_attrs, True) except Exception as ex: - print("[ELEMENTE] migrate src-layer:", ex) + print("[ELEMENTS] migrate src-layer:", ex) # Alle alten wand_volume-Objekte loeschen, neue (1..N) hinzufuegen. # Loesche auch alte Chain-Volumes (Anchor-Volumes mit chain_members @@ -9508,7 +9508,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name # Handler auf naechste Achse, Click auf Rand/Eck selektiert # Volumen. Delete-Kaskade Volumen-nach-Axis-Delete laeuft via # _elemente_pending_source_cascade. - except Exception as ex: print("[ELEMENTE] AddBrep wand layer:", ex) + except Exception as ex: print("[ELEMENTS] AddBrep wand layer:", ex) # Stale Auto-Groups aus frueheren Versionen aufraeumen — Achse aus # auto-erstellten Wand-Groups loesen. try: @@ -9517,7 +9517,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name _strip_wall_auto_group(doc, _wid) _regen_wall_lines(doc, _wid, in_cluster=_is_chain) except Exception as ex: - print("[ELEMENTE] strip/lines (chain):", ex) + print("[ELEMENTS] strip/lines (chain):", ex) return True elif meta["type"] == "decke_outline": uk, ok = _resolve_decke_z(doc, meta["geschoss"], meta["dicke"], @@ -9532,7 +9532,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name if isinstance(ap_geom, rg.Curve) and ap_geom.IsClosed: hole_curves.append(ap_geom) else: - print("[ELEMENTE] Aussparung", ap_meta["id"], + print("[ELEMENTS] Aussparung", ap_meta["id"], "Source ist keine geschlossene Curve — uebersprungen") brep = _make_decke_volume(geom, meta["dicke"], uk, ok, hole_curves) vol_type = "decke_volume" @@ -9773,7 +9773,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name "1") doc.Objects.ModifyAttributes(new_h, fresh, True) except Exception as ex: - print("[ELEMENTE] Raum AddHatch:", ex) + print("[ELEMENTS] Raum AddHatch:", ex) # Hatch via Gestaltung-Konvention an die Curve linken (UserString # `ebenen_fill_hatch_id` auf der Source) — damit das Override- @@ -9785,7 +9785,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name str(new_hatch_id)) doc.Objects.ModifyAttributes(src_obj, src_attrs, True) except Exception as ex: - print("[ELEMENTE] Raum link hatch:", ex) + print("[ELEMENTS] Raum link hatch:", ex) # Override-Engine zusaetzlich anstossen (Safety-Net + Pattern- # Override). Der ModifyAttributes-Aufruf oben loest KEIN # ReplaceRhinoObject-Event aus, also wuerde der Override-Listener @@ -9802,7 +9802,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name try: _ov._apply_to_single_object(doc, cur) finally: sc.sticky["overrides_applying"] = was except Exception as ex: - print("[ELEMENTE] override re-apply:", ex) + print("[ELEMENTS] override re-apply:", ex) # Stempel-Position: Centroid + persistierter User-Offset (dx,dy). # So bleibt der Stempel wo der User ihn zuletzt gezogen hat, auch @@ -9859,7 +9859,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name raum_show_sia=meta.get("raum_show_sia"), raum_txt_modus=meta.get("raum_txt_modus")) try: doc.Objects.AddText(te, attrs) - except Exception as ex: print("[ELEMENTE] Raum AddText:", ex) + except Exception as ex: print("[ELEMENTS] Raum AddText:", ex) # Stempel im selben Geschoss + Total-Stempel regennen, damit ihre # SIA-Bilanz sich aktualisiert. Deferred via Sticky-Marker damit # das nicht im aktuellen _REGEN_BUSY-Zyklus laeuft. @@ -9873,7 +9873,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name # ersetzen die TextEntity in-place. Position bleibt aus der alten # Geometrie erhalten. if not isinstance(geom, rg.TextEntity): - print("[ELEMENTE] stempel regen: geom ist keine TextEntity") + print("[ELEMENTS] stempel regen: geom ist keine TextEntity") return False try: pos = geom.Plane.Origin @@ -9910,7 +9910,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name try: doc.Objects.Replace(src_obj.Id, new_te) except Exception as ex: - print("[ELEMENTE] stempel Replace:", ex) + print("[ELEMENTS] stempel Replace:", ex) return False return True else: @@ -9925,7 +9925,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name new_attrs.LayerIndex = src_layer doc.Objects.ModifyAttributes(src_obj, new_attrs, True) except Exception as ex: - print("[ELEMENTE] migrate src-layer:", ex) + print("[ELEMENTS] migrate src-layer:", ex) if brep is None: return False vol_obj = _find_target_volume(doc, element_id) @@ -9943,10 +9943,10 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name if str(ex_obj.Id) != first_id: try: doc.Objects.Delete(ex_obj.Id, True) except Exception: pass - print("[ELEMENTE] Treppen-Volumen-Duplikat-Cleanup: " + print("[ELEMENTS] Treppen-Volumen-Duplikat-Cleanup: " "{} extra entfernt".format(len(extras) - 1)) except Exception as ex: - print("[ELEMENTE] dup-cleanup treppe:", ex) + print("[ELEMENTS] dup-cleanup treppe:", ex) attrs = Rhino.DocObjects.ObjectAttributes() attrs.LayerIndex = layer _attach_meta(attrs, element_id, vol_type, meta["geschoss"], @@ -10012,7 +10012,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name _regen_treppe_2d_symbol(doc, element_id, meta, geom, g_start, geschoss_name, float(ok) - float(uk)) except Exception as ex: - print("[ELEMENTE] treppe 2d symbol:", ex) + print("[ELEMENTS] treppe 2d symbol:", ex) return True @@ -10074,7 +10074,7 @@ def _regen_treppe_2d_symbol(doc, element_id, meta, geom, g_start, geschoss_name, else: doc.Objects.AddCurve(item, attrs) except Exception as ex: - print("[ELEMENTE] add 2d item:", ex) + print("[ELEMENTS] add 2d item:", ex) attrs_solid = _make_attrs() for c in solid: @@ -10105,7 +10105,7 @@ def _ensure_linetype_dashed(doc): # Mac Rhino 8: LoadDefaultLinetypes(quiet=True) doc.Linetypes.LoadDefaultLinetypes(True) except Exception as ex: - print("[ELEMENTE] LoadDefaultLinetypes:", ex) + print("[ELEMENTS] LoadDefaultLinetypes:", ex) return _find() @@ -10163,13 +10163,13 @@ class ElementeBridge(panel_base.BaseBridge): try: doc = Rhino.RhinoDoc.ActiveDoc save_oeff_style(doc, p.get("name") or "Stil", p.get("settings") or {}) - except Exception as ex: print("[ELEMENTE] save oeff style:", ex) + except Exception as ex: print("[ELEMENTS] save oeff style:", ex) self._send_state() elif t == "DELETE_OEFF_STYLE": try: doc = Rhino.RhinoDoc.ActiveDoc delete_oeff_style(doc, p.get("id")) - except Exception as ex: print("[ELEMENTE] del oeff style:", ex) + except Exception as ex: print("[ELEMENTS] del oeff style:", ex) self._send_state() elif t == "SAVE_RAUM_STIL": # Speichert aktuelle Raum-Stil-Settings (vom Frontend gepacked) @@ -10212,18 +10212,18 @@ class ElementeBridge(panel_base.BaseBridge): if m and m.get("type") == "treppe_axis": try: _regenerate_element(doc, m["id"]) except Exception as ex: - print("[ELEMENTE] treppe regen:", ex) + print("[ELEMENTS] treppe regen:", ex) try: doc.Views.Redraw() except Exception: pass except Exception as ex: - print("[ELEMENTE] SET_TREPPE_2D_SHOW:", ex) + print("[ELEMENTS] SET_TREPPE_2D_SHOW:", ex) self._send_state() elif t == "OPEN_ELEMENTE_UEBERSICHT": try: import elemente_uebersicht elemente_uebersicht.open_as_window() except Exception as ex: - print("[ELEMENTE] open uebersicht:", ex) + print("[ELEMENTS] open uebersicht:", ex) elif t == "OPEN_ELEMENTE_PROPERTIES": try: import elemente_properties @@ -10231,7 +10231,7 @@ class ElementeBridge(panel_base.BaseBridge): # Direkt mal pushen damit das Fenster sofort Daten hat self._send_state() except Exception as ex: - print("[ELEMENTE] open properties:", ex) + print("[ELEMENTS] open properties:", ex) def _notify_active_geschoss(self): """Schlanker Partial-Push: nur activeGeschoss + activeGeschossName. @@ -10248,7 +10248,7 @@ class ElementeBridge(panel_base.BaseBridge): "activeGeschossName": _active_geschoss_name(doc), }) except Exception as ex: - print("[ELEMENTE] _notify_active_geschoss:", ex) + print("[ELEMENTS] _notify_active_geschoss:", ex) def _send_state(self): doc = Rhino.RhinoDoc.ActiveDoc @@ -10615,7 +10615,7 @@ class ElementeBridge(panel_base.BaseBridge): }) elements.append(base) except Exception as ex: - print("[ELEMENTE] hidden-source fallback:", ex) + print("[ELEMENTS] hidden-source fallback:", ex) sel_id = next((e["id"] for e in elements if e["selected"]), None) payload = { "elements": elements, @@ -10661,7 +10661,7 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return geschoss = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return # Last-Used: Werte ueberleben den Befehl. Frontend kann ueberschreiben, # sonst nehmen wir den letzten Wert aus der Session. d_in = p.get("dicke") @@ -10709,7 +10709,7 @@ class ElementeBridge(panel_base.BaseBridge): import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return modi = ["Polylinie", "Linie", "Rechteck", "Spline", "Bogen"] modus = p.get("modus") or _last("wand_modus", "Polylinie") @@ -10764,7 +10764,7 @@ class ElementeBridge(panel_base.BaseBridge): if new_ref in ref_codes: ref_idx = ref_codes.index(new_ref) except Exception as ex: - print("[ELEMENTE] Aufbau toggle:", ex) + print("[ELEMENTS] Aufbau toggle:", ex) elif styles and gp.OptionIndex() == opt_style: try: style_idx = gp.Option().CurrentListOptionIndex @@ -10785,7 +10785,7 @@ class ElementeBridge(panel_base.BaseBridge): gn.SetLowerLimit(0.01, False) if gn.Get() == GetResult.Number: dicke = float(gn.Number()) - except Exception as ex: print("[ELEMENTE] GetNumber:", ex) + except Exception as ex: print("[ELEMENTS] GetNumber:", ex) continue if res != GetResult.Point: return first_pt = gp.Point() @@ -10794,7 +10794,7 @@ class ElementeBridge(panel_base.BaseBridge): if _snap is not None: first_pt = _snap break except Exception as ex: - print("[ELEMENTE] wand first-point:", ex); return + print("[ELEMENTS] wand first-point:", ex); return referenz = ref_codes[ref_idx] style_id = styles[style_idx]["id"] if styles else None @@ -10802,7 +10802,7 @@ class ElementeBridge(panel_base.BaseBridge): if modus == "Rechteck": axes = self._collect_wall_rectangle(doc, first_pt, dicke, referenz) if not axes: - print("[ELEMENTE] Rechteck abgebrochen"); return + print("[ELEMENTS] Rechteck abgebrochen"); return for ac in axes: self._make_wall_from_axis(doc, ac, geschoss, dicke, uk_over, ok_over, referenz, @@ -10824,10 +10824,10 @@ class ElementeBridge(panel_base.BaseBridge): else: axis_curve = None except Exception as ex: - print("[ELEMENTE] wand collect:", ex); return + print("[ELEMENTS] wand collect:", ex); return if axis_curve is None: - print("[ELEMENTE] keine gueltige Achse"); return + print("[ELEMENTS] keine gueltige Achse"); return # Polylinie-Modus: jedes Segment als eigenstaendige Wand. So kann der # User einzelne Segmente loeschen ohne die Nachbarn zu verlieren. Bei # Linie/Spline/Bogen bleibt's bei einer Wand (semantisch sinnvoll). @@ -11033,7 +11033,7 @@ class ElementeBridge(panel_base.BaseBridge): try: with _TimedBlock("Wand AddCurve + Regen"): if doc.Objects.AddCurve(axis, attrs) == System.Guid.Empty: - print("[ELEMENTE] Wand AddCurve failed"); return + print("[ELEMENTS] Wand AddCurve failed"); return # Joint-Cache invalidieren — neue Wand-Achse ist im Doc. _invalidate_joints_cache(geschoss_id) _regenerate_element(doc, wall_id) @@ -11044,15 +11044,15 @@ class ElementeBridge(panel_base.BaseBridge): for wid in deps: try: _regenerate_element(doc, wid) except Exception as ex: - print("[ELEMENTE] dep regen:", ex) + print("[ELEMENTS] dep regen:", ex) except Exception as ex: - print("[ELEMENTE] deps:", ex) + print("[ELEMENTS] deps:", ex) finally: doc.Views.RedrawEnabled = prev_redraw try: doc.EndUndoRecord(undo_serial) except Exception: pass doc.Views.Redraw() - print("[ELEMENTE] Wand erzeugt: {}".format(wall_id)) + print("[ELEMENTS] Wand erzeugt: {}".format(wall_id)) def _cmd_create_decke(self, p): """Decken-Erzeugung mit Modus-Auswahl: Polylinie, Rechteck, @@ -11061,7 +11061,7 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return geschoss = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return d_in = p.get("dicke") try: dicke = float(d_in) if d_in else _last("decke_dicke", 0.20) except Exception: dicke = _last("decke_dicke", 0.20) @@ -11072,7 +11072,7 @@ class ElementeBridge(panel_base.BaseBridge): import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return modi = ["Polylinie", "Rechteck", "Rechteck3Punkte", "Kreis"] modus = p.get("modus") or _last("decke_modus", "Polylinie") @@ -11102,13 +11102,13 @@ class ElementeBridge(panel_base.BaseBridge): gn.SetLowerLimit(0.01, False) if gn.Get() == GetResult.Number: dicke = float(gn.Number()) - except Exception as ex: print("[ELEMENTE] GetNumber:", ex) + except Exception as ex: print("[ELEMENTS] GetNumber:", ex) continue if res != GetResult.Point: return first_pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] decke first-point:", ex); return + print("[ELEMENTS] decke first-point:", ex); return outline_curve = None try: @@ -11121,11 +11121,11 @@ class ElementeBridge(panel_base.BaseBridge): elif modus == "Kreis": outline_curve = _collect_circle(doc, first_pt) except Exception as ex: - print("[ELEMENTE] decke collect:", ex) + print("[ELEMENTS] decke collect:", ex) return if outline_curve is None or not outline_curve.IsClosed: - print("[ELEMENTE] keine gueltige Outline") + print("[ELEMENTS] keine gueltige Outline") return self._make_decke_from_outline(doc, outline_curve, geschoss, dicke, uk_over, ok_over) @@ -11186,10 +11186,10 @@ class ElementeBridge(panel_base.BaseBridge): dicke, uk_over, ok_over, "mid") outline_id = doc.Objects.AddCurve(outline, attrs) if outline_id == System.Guid.Empty: - print("[ELEMENTE] Decke AddCurve failed"); return + print("[ELEMENTS] Decke AddCurve failed"); return _regenerate_element(doc, element_id) doc.Views.Redraw() - print("[ELEMENTE] Decke erzeugt: {}".format(element_id)) + print("[ELEMENTS] Decke erzeugt: {}".format(element_id)) def _cmd_create_aussparung(self, p): """Decken-Aussparung: geschlossene Outline auf einer Decke. Outline @@ -11200,12 +11200,12 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return geschoss = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return try: import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return modi = ["Polylinie", "Rechteck", "Rechteck3Punkte", "Kreis"] modus = p.get("modus") or _last("aussp_modus", "Rechteck") @@ -11230,7 +11230,7 @@ class ElementeBridge(panel_base.BaseBridge): first_pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] aussp first-pt:", ex); return + print("[ELEMENTS] aussp first-pt:", ex); return outline_curve = None try: @@ -11243,10 +11243,10 @@ class ElementeBridge(panel_base.BaseBridge): elif modus == "Kreis": outline_curve = _collect_circle(doc, first_pt) except Exception as ex: - print("[ELEMENTE] aussp collect:", ex); return + print("[ELEMENTS] aussp collect:", ex); return if outline_curve is None or not outline_curve.IsClosed: - print("[ELEMENTE] keine gueltige Outline"); return + print("[ELEMENTS] keine gueltige Outline"); return # Outline auf Z=0 normalisieren outline = outline_curve.DuplicateCurve() @@ -11274,10 +11274,10 @@ class ElementeBridge(panel_base.BaseBridge): m = _read_meta(obj) if m and m["type"] == "decke_outline": n_decken += 1 if n_decken == 0: - print("[ELEMENTE] Aussparung: keine Decke im Dokument — " + print("[ELEMENTS] Aussparung: keine Decke im Dokument — " "erst eine Decke zeichnen.") else: - print(("[ELEMENTE] Aussparung: keine der {} Decken enthaelt " + print(("[ELEMENTS] Aussparung: keine der {} Decken enthaelt " "den Centroid ({:.3f}, {:.3f}). Outline muss " "geometrisch INNERHALB einer Decken-Outline " "liegen.").format(n_decken, ctr_xy.X, ctr_xy.Y)) @@ -11294,12 +11294,12 @@ class ElementeBridge(panel_base.BaseBridge): 0.0, "", "", "mid", aussp_parent=decke_id) new_id = doc.Objects.AddCurve(outline, attrs) if new_id == System.Guid.Empty: - print("[ELEMENTE] Aussparung AddCurve failed"); return + print("[ELEMENTS] Aussparung AddCurve failed"); return _save_last(aussp_modus=modus) # Eltern-Decke regenerieren — das Loch wird abgezogen _regenerate_element(doc, decke_id) doc.Views.Redraw() - print("[ELEMENTE] Aussparung erzeugt: {}".format(element_id)) + print("[ELEMENTS] Aussparung erzeugt: {}".format(element_id)) self._send_state() def _cmd_create_dach(self, p): @@ -11310,7 +11310,7 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return geschoss = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return d_in = p.get("dicke") try: dicke = float(d_in) if d_in else _last("dach_dicke", 0.20) except Exception: dicke = _last("dach_dicke", 0.20) @@ -11323,7 +11323,7 @@ class ElementeBridge(panel_base.BaseBridge): import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return modi = ["Polylinie", "Rechteck", "Rechteck3Punkte"] modus = p.get("modus") or _last("dach_modus", "Polylinie") @@ -11383,7 +11383,7 @@ class ElementeBridge(panel_base.BaseBridge): gn.SetUpperLimit(89.0, False) if gn.Get() == GetResult.Number: neigung = float(gn.Number()) - except Exception as ex: print("[ELEMENTE] GetNumber:", ex) + except Exception as ex: print("[ELEMENTS] GetNumber:", ex) elif gp.OptionIndex() == opt_d: try: gn = ric.GetNumber() @@ -11392,13 +11392,13 @@ class ElementeBridge(panel_base.BaseBridge): gn.SetLowerLimit(0.01, False) if gn.Get() == GetResult.Number: dicke = float(gn.Number()) - except Exception as ex: print("[ELEMENTE] GetNumber:", ex) + except Exception as ex: print("[ELEMENTS] GetNumber:", ex) continue if res != GetResult.Point: return first_pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] dach first-point:", ex); return + print("[ELEMENTS] dach first-point:", ex); return outline_curve = None try: @@ -11409,17 +11409,17 @@ class ElementeBridge(panel_base.BaseBridge): elif modus == "Rechteck3Punkte": outline_curve = _collect_rectangle_3pt(doc, first_pt) except Exception as ex: - print("[ELEMENTE] dach collect:", ex); return + print("[ELEMENTS] dach collect:", ex); return if outline_curve is None or not outline_curve.IsClosed: - print("[ELEMENTE] keine gueltige Outline"); return + print("[ELEMENTS] keine gueltige Outline"); return # Sattel/Walm/Mansarde brauchen Rechteck-Outline. Sonst Fallback Pult. dt_code = dach_typ.lower() if dt_code in ("sattel", "walm", "mansarde"): try: ok, poly = outline_curve.TryGetPolyline() if not ok or poly is None or poly.Count != 5: - print("[ELEMENTE] {} braucht Rechteck-Outline — Fallback Pult".format(dach_typ)) + print("[ELEMENTS] {} braucht Rechteck-Outline — Fallback Pult".format(dach_typ)) dt_code = "pult" except Exception: dt_code = "pult" self._make_dach_from_outline(doc, outline_curve, geschoss, dicke, @@ -11458,10 +11458,10 @@ class ElementeBridge(panel_base.BaseBridge): dach_variante=dach_variante) outline_id = doc.Objects.AddCurve(outline, attrs) if outline_id == System.Guid.Empty: - print("[ELEMENTE] Dach AddCurve failed"); return + print("[ELEMENTS] Dach AddCurve failed"); return _regenerate_element(doc, element_id) doc.Views.Redraw() - print("[ELEMENTE] Dach erzeugt: {} ({}, neigung={}°)".format( + print("[ELEMENTS] Dach erzeugt: {} ({}, neigung={}°)".format( element_id, dach_typ, neigung)) @@ -11476,7 +11476,7 @@ class ElementeBridge(panel_base.BaseBridge): import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return # Defaults if typ == "fenster": @@ -11511,7 +11511,7 @@ class ElementeBridge(panel_base.BaseBridge): if res != GetResult.Object: return wall_obj = gw.Object(0).Object() except Exception as ex: - print("[ELEMENTE] Wand-Auswahl:", ex); return + print("[ELEMENTS] Wand-Auswahl:", ex); return wall_meta = _read_meta(wall_obj) if wall_meta is None: return axis_curve = wall_obj.Geometry @@ -11598,7 +11598,7 @@ class ElementeBridge(panel_base.BaseBridge): if idx == opt_st: styles = list_oeff_styles(doc, typ) if not styles: - print("[ELEMENTE] Keine Styles fuer {}".format(typ)) + print("[ELEMENTS] Keine Styles fuer {}".format(typ)) else: try: go = ric.GetOption() @@ -11627,9 +11627,9 @@ class ElementeBridge(panel_base.BaseBridge): tuer_rahmen_def = chosen["tuerRahmen"] pending_sid = chosen["id"] set_active_oeff_style_id(doc, typ, chosen["id"]) - print("[ELEMENTE] Stil '{}' geladen".format(chosen["name"])) + print("[ELEMENTS] Stil '{}' geladen".format(chosen["name"])) except Exception as ex: - print("[ELEMENTE] Stil-Picker:", ex) + print("[ELEMENTS] Stil-Picker:", ex) continue if idx == opt_b: gn = ric.GetNumber() @@ -11654,7 +11654,7 @@ class ElementeBridge(panel_base.BaseBridge): click_pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] Oeffnung point:", ex); return + print("[ELEMENTS] Oeffnung point:", ex); return # Auf Achse projizieren (Constrain garantiert das eigentlich schon) try: @@ -11662,7 +11662,7 @@ class ElementeBridge(panel_base.BaseBridge): if not ok: return on_axis = axis_curve.PointAt(t) except Exception as ex: - print("[ELEMENTE] ClosestPoint:", ex); return + print("[ELEMENTS] ClosestPoint:", ex); return # Aussenseite aus Click-Richtung ableiten: Vektor on_axis→click_pt # mit der Perp-Richtung der Achse vergleichen. Vorzeichen entscheidet @@ -11678,7 +11678,7 @@ class ElementeBridge(panel_base.BaseBridge): if side < -1e-6: detected_aussen = "links" elif side > 1e-6: detected_aussen = "rechts" except Exception as ex: - print("[ELEMENTE] aussenseite detect:", ex) + print("[ELEMENTS] aussenseite detect:", ex) # Point-Objekt mit Metadaten anlegen prefix = "fenster_" if typ == "fenster" else "tuer_" @@ -11725,7 +11725,7 @@ class ElementeBridge(panel_base.BaseBridge): pt_at_brueest = rg.Point3d(on_axis.X, on_axis.Y, wall_uk + float(brueest)) new_id = doc.Objects.AddPoint(pt_at_brueest, attrs) if new_id == System.Guid.Empty: - print("[ELEMENTE] AddPoint failed"); return + print("[ELEMENTS] AddPoint failed"); return # Last-used if typ == "fenster": @@ -11737,7 +11737,7 @@ class ElementeBridge(panel_base.BaseBridge): # Eltern-Wand regen _regenerate_element(doc, wall_meta["id"]) doc.Views.Redraw() - print("[ELEMENTE] {} erzeugt: {} an Wand {}".format( + print("[ELEMENTS] {} erzeugt: {} an Wand {}".format( "Fenster" if typ == "fenster" else "Tuer", oeff_id, wall_meta["id"])) self._send_state() @@ -11750,19 +11750,19 @@ class ElementeBridge(panel_base.BaseBridge): if treppe_art not in _TREPPE_ARTEN: treppe_art = "gerade" geschoss_start = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss_start: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return try: import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return # Zielgeschoss-Default: das naechste Geschoss vom gleichen Typ in der # Liste, oder None falls keins existiert. geschosse = _load_geschosse(doc) gs = _geschoss_by_id(doc, geschoss_start) if gs is None: - print("[ELEMENTE] Startgeschoss not found"); return + print("[ELEMENTS] Startgeschoss not found"); return geschoss_end = p.get("geschossEnd") or "" if not geschoss_end: # naechstes Geschoss > start_okff @@ -11932,7 +11932,7 @@ class ElementeBridge(panel_base.BaseBridge): first_pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] treppe first-pt:", ex); return + print("[ELEMENTS] treppe first-pt:", ex); return # Zweiter Punkt mit DynamicDraw. Bei Regel-Modus: Maus gibt nur # die RICHTUNG vor — die Lauflinien-Laenge wird auf den optimalen @@ -12012,7 +12012,7 @@ class ElementeBridge(panel_base.BaseBridge): dy = clicked.Y - first_pt.Y dist = (dx * dx + dy * dy) ** 0.5 if dist < 1e-4: - print("[ELEMENTE] Keine Richtung gewaehlt"); return + print("[ELEMENTS] Keine Richtung gewaehlt"); return if treppe_art == "gerade": if a_lock: L_min2 = L_max2 = n_stufen * a_target @@ -12058,11 +12058,11 @@ class ElementeBridge(panel_base.BaseBridge): if referenz == "mid": return True cross_z_v = d1x * d2y_v - d1y * d2x_v if referenz == "links" and cross_z_v <= 1e-6: - print("[ELEMENTE] Lage=links erwartet Linkskurve — " + print("[ELEMENTS] Lage=links erwartet Linkskurve — " "Endpunkt liegt rechts der ersten Lauflinie, abgebrochen") return False if referenz == "rechts" and cross_z_v >= -1e-6: - print("[ELEMENTE] Lage=rechts erwartet Rechtskurve — " + print("[ELEMENTS] Lage=rechts erwartet Rechtskurve — " "Endpunkt liegt links der ersten Lauflinie, abgebrochen") return False return True @@ -12125,7 +12125,7 @@ class ElementeBridge(panel_base.BaseBridge): d4y = l2_end_raw.Y - l2_start_pt.Y d4 = (d4x * d4x + d4y * d4y) ** 0.5 if d4 < 1e-4: - print("[ELEMENTE] Keine Richtung gewaehlt"); return + print("[ELEMENTS] Keine Richtung gewaehlt"); return if preview_l2_min is not None: L4 = preview_l2_min if (preview_l2_min == preview_l2_max ) else max(preview_l2_min, min(preview_l2_max, d4)) @@ -12144,7 +12144,7 @@ class ElementeBridge(panel_base.BaseBridge): pl = rg.Polyline([p0pt, p1pt, p2pt, p3pt]) line = rg.PolylineCurve(pl) if line.GetLength() < 0.2: - print("[ELEMENTE] L-Lauflinie zu kurz"); return + print("[ELEMENTS] L-Lauflinie zu kurz"); return else: # KOMPAKT: gp3 = Lauf2-Ende mit Cut-Back-Schrittmass gp3 = ric.GetPoint() @@ -12194,7 +12194,7 @@ class ElementeBridge(panel_base.BaseBridge): d2y = third_pt_raw.Y - second_pt.Y d2 = (d2x * d2x + d2y * d2y) ** 0.5 if d2 < 1e-4: - print("[ELEMENTE] Keine Richtung gewaehlt"); return + print("[ELEMENTS] Keine Richtung gewaehlt"); return if preview_l2_min is not None: L_final = preview_l2_min if ( preview_l2_min == preview_l2_max @@ -12212,7 +12212,7 @@ class ElementeBridge(panel_base.BaseBridge): pl = rg.Polyline([p_first, p_corner, p_end]) line = rg.PolylineCurve(pl) if line.GetLength() < 0.2: - print("[ELEMENTE] L-Lauflinie zu kurz"); return + print("[ELEMENTS] L-Lauflinie zu kurz"); return elif treppe_art == "wendel": # Wendel: 3. Klick = Endpunkt (Sweep-Winkel + Drehrichtung). # Im Regel-Modus wird der Sweep auf den durch r_lauf + Soll @@ -12257,14 +12257,14 @@ class ElementeBridge(panel_base.BaseBridge): # Wichtig: dlt_w fuer den nachfolgenden < 0.05 Check aktualisieren dlt_w = dlt_clamped if abs(dlt_w) < 0.05: - print("[ELEMENTE] Wendel-Sweep zu klein"); return + print("[ELEMENTS] Wendel-Sweep zu klein"); return pl = rg.Polyline([p_center, p_start_w, p_end_w]) line = rg.PolylineCurve(pl) else: line = rg.LineCurve(rg.Point3d(first_pt.X, first_pt.Y, 0), rg.Point3d(second_pt.X, second_pt.Y, 0)) if line.GetLength() < 0.1: - print("[ELEMENTE] Lauflinie zu kurz"); return + print("[ELEMENTS] Lauflinie zu kurz"); return # Element anlegen treppe_id = "treppe_" + uuid.uuid4().hex[:10] @@ -12287,7 +12287,7 @@ class ElementeBridge(panel_base.BaseBridge): treppe_art=treppe_art) new_id = doc.Objects.AddCurve(line, attrs) if new_id == System.Guid.Empty: - print("[ELEMENTE] AddCurve failed"); return + print("[ELEMENTS] AddCurve failed"); return save_kwargs = dict(treppe_breite=breite, treppe_n=n_stufen, treppe_referenz=referenz, treppe_modus=modus_def, @@ -12303,7 +12303,7 @@ class ElementeBridge(panel_base.BaseBridge): _save_last(**save_kwargs) _regenerate_element(doc, treppe_id) doc.Views.Redraw() - print("[ELEMENTE] Treppe erzeugt: {}".format(treppe_id)) + print("[ELEMENTS] Treppe erzeugt: {}".format(treppe_id)) self._send_state() def _cmd_create_stuetze(self, p): @@ -12315,12 +12315,12 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return geschoss = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return try: import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return profil = p.get("profil") or _last("stuetze_profil", "quadrat") if profil not in _TRAG_PROFILE: profil = "quadrat" @@ -12398,7 +12398,7 @@ class ElementeBridge(panel_base.BaseBridge): pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] stuetze point:", ex); return + print("[ELEMENTS] stuetze point:", ex); return # Source-Point auf Z=0 setzen pt3 = rg.Point3d(pt.X, pt.Y, 0) @@ -12415,12 +12415,12 @@ class ElementeBridge(panel_base.BaseBridge): trag_angle=angle, trag_z_over=z_over) new_id = doc.Objects.AddPoint(pt3, attrs) if new_id == System.Guid.Empty: - print("[ELEMENTE] Stuetze AddPoint failed"); return + print("[ELEMENTS] Stuetze AddPoint failed"); return _save_last(stuetze_profil=profil, stuetze_b=B, stuetze_h=H, stuetze_d=D, stuetze_t=t_wall, stuetze_angle=angle) _regenerate_element(doc, element_id) doc.Views.Redraw() - print("[ELEMENTE] Stuetze erzeugt: {}".format(element_id)) + print("[ELEMENTS] Stuetze erzeugt: {}".format(element_id)) self._send_state() def _cmd_create_traeger(self, p): @@ -12431,12 +12431,12 @@ class ElementeBridge(panel_base.BaseBridge): kind = "traeger" geschoss = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return try: import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return profil = p.get("profil") or _last("traeger_profil", "rechteck") if profil not in _TRAG_PROFILE: profil = "rechteck" @@ -12513,7 +12513,7 @@ class ElementeBridge(panel_base.BaseBridge): first_pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] traeger first-pt:", ex); return + print("[ELEMENTS] traeger first-pt:", ex); return gp2 = ric.GetPoint() gp2.SetCommandPrompt(_prompt("Endpunkt")) @@ -12530,7 +12530,7 @@ class ElementeBridge(panel_base.BaseBridge): p0 = rg.Point3d(first_pt.X, first_pt.Y, 0) p1 = rg.Point3d(end_pt.X, end_pt.Y, 0) if p0.DistanceTo(p1) < 1e-6: - print("[ELEMENTE] Achse zu kurz"); return + print("[ELEMENTS] Achse zu kurz"); return line = rg.LineCurve(p0, p1) element_id = "trag_" + uuid.uuid4().hex[:10] @@ -12546,12 +12546,12 @@ class ElementeBridge(panel_base.BaseBridge): trag_angle=angle, trag_z_over=z_over) new_id = doc.Objects.AddCurve(line, attrs) if new_id == System.Guid.Empty: - print("[ELEMENTE] Traeger AddCurve failed"); return + print("[ELEMENTS] Traeger AddCurve failed"); return _save_last(traeger_profil=profil, traeger_b=B, traeger_h=H, traeger_d=D, traeger_t=t_wall, traeger_angle=angle) _regenerate_element(doc, element_id) doc.Views.Redraw() - print("[ELEMENTE] Traeger erzeugt: {}".format(element_id)) + print("[ELEMENTS] Traeger erzeugt: {}".format(element_id)) self._send_state() def _cmd_create_raum(self, p): @@ -12561,12 +12561,12 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return geschoss = p.get("geschoss") or _active_geschoss_id(doc) if not geschoss: - print("[ELEMENTE] Kein Geschoss aktiv"); return + print("[ELEMENTS] Kein Geschoss aktiv"); return try: import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return modi = ["Polylinie", "Rechteck", "Rechteck3Punkte", "Kreis"] modus = p.get("modus") or _last("raum_modus", "Polylinie") @@ -12609,13 +12609,13 @@ class ElementeBridge(panel_base.BaseBridge): if gs.Get() == GetResult.String: name = (gs.StringResult() or "Raum").strip() except Exception as ex: - print("[ELEMENTE] GetString:", ex) + print("[ELEMENTS] GetString:", ex) continue if res != GetResult.Point: return first_pt = gp.Point() break except Exception as ex: - print("[ELEMENTE] raum first-pt:", ex); return + print("[ELEMENTS] raum first-pt:", ex); return outline_curve = None try: @@ -12628,10 +12628,10 @@ class ElementeBridge(panel_base.BaseBridge): elif modus == "Kreis": outline_curve = _collect_circle(doc, first_pt) except Exception as ex: - print("[ELEMENTE] raum collect:", ex); return + print("[ELEMENTS] raum collect:", ex); return if outline_curve is None or not outline_curve.IsClosed: - print("[ELEMENTE] keine gueltige Outline"); return + print("[ELEMENTS] keine gueltige Outline"); return # Element anlegen raum_id = "raum_" + uuid.uuid4().hex[:10] @@ -12649,13 +12649,13 @@ class ElementeBridge(panel_base.BaseBridge): raum_txt_h=txt_h) new_id = doc.Objects.AddCurve(outline_curve, attrs) if new_id == System.Guid.Empty: - print("[ELEMENTE] Raum AddCurve failed"); return + print("[ELEMENTS] Raum AddCurve failed"); return _save_last(raum_modus=modus, raum_name_last=name, raum_rundung=rundung, raum_funktion=funktion, raum_txt_h=txt_h) _regenerate_element(doc, raum_id) doc.Views.Redraw() - print("[ELEMENTE] Raum erzeugt: {} ({})".format(name, raum_id)) + print("[ELEMENTS] Raum erzeugt: {} ({})".format(name, raum_id)) self._send_state() def _cmd_create_stempel(self, p): @@ -12676,7 +12676,7 @@ class ElementeBridge(panel_base.BaseBridge): import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] CREATE_STEMPEL imports:", ex); return + print("[ELEMENTS] CREATE_STEMPEL imports:", ex); return gp = ric.GetPoint() gp.SetCommandPrompt("Stempel platzieren ({})".format(scope)) res = gp.Get() @@ -12692,7 +12692,7 @@ class ElementeBridge(panel_base.BaseBridge): # TextEntity bauen te = _make_stempel_text(pos, scope, doc, text_height=txt_h, z=pos.Z) if te is None: - print("[ELEMENTE] CREATE_STEMPEL: Text-Build failed"); return + print("[ELEMENTS] CREATE_STEMPEL: Text-Build failed"); return attrs = Rhino.DocObjects.ObjectAttributes() attrs.LayerIndex = layer _attach_meta(attrs, stempel_id, "stempel", @@ -12701,10 +12701,10 @@ class ElementeBridge(panel_base.BaseBridge): stempel_scope=scope, stempel_txt_h=txt_h) new_id = doc.Objects.AddText(te, attrs) if new_id == System.Guid.Empty: - print("[ELEMENTE] Stempel AddText failed"); return + print("[ELEMENTS] Stempel AddText failed"); return _save_last(stempel_txt_h=txt_h) doc.Views.Redraw() - print("[ELEMENTE] Stempel erzeugt: {} (scope={})".format(stempel_id, scope)) + print("[ELEMENTS] Stempel erzeugt: {} (scope={})".format(stempel_id, scope)) self._send_state() def _cmd_export_raeume(self, p): @@ -12724,10 +12724,10 @@ class ElementeBridge(panel_base.BaseBridge): try: ok = sfd.ShowDialog() except Exception: ok = False if not ok: - print("[ELEMENTE] Export abgebrochen"); return + print("[ELEMENTS] Export abgebrochen"); return path = sfd.FileName except Exception as ex: - print("[ELEMENTE] SaveFileDialog:", ex); return + print("[ELEMENTS] SaveFileDialog:", ex); return rows = [] for obj in doc.Objects: @@ -12749,7 +12749,7 @@ class ElementeBridge(panel_base.BaseBridge): "umfang": "{:.4f}".format(perim), }) except Exception as ex: - print("[ELEMENTE] export row:", ex) + print("[ELEMENTS] export row:", ex) # Stabil sortieren: Geschoss, Nummer, Name rows.sort(key=lambda r: (r["geschoss"], r["nummer"], r["name"])) @@ -12773,10 +12773,10 @@ class ElementeBridge(panel_base.BaseBridge): r["area_fmt"].replace(".", ","), r["umfang"].replace(".", ","), ]) + "\n") - print("[ELEMENTE] Export Raeume: {} ({} Zeilen)".format( + print("[ELEMENTS] Export Raeume: {} ({} Zeilen)".format( path, len(rows))) except Exception as ex: - print("[ELEMENTE] CSV schreiben:", ex) + print("[ELEMENTS] CSV schreiben:", ex) # ------------------------------------------------------------------ # Swisstopo — Option-A-Workflow: @@ -12802,7 +12802,7 @@ class ElementeBridge(panel_base.BaseBridge): items = rhinopanel._enrich_library_items_with_previews( manifest.get("items", [])) except Exception as ex: - print("[ELEMENTE] list library:", ex) + print("[ELEMENTS] list library:", ex) items = [] outer_bridge = self bridge_holder = {"form": None} @@ -12852,7 +12852,7 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return name = (p.get("name") or "").strip() if not name: - print("[ELEMENTE] SAVE_RAUM_STIL: name leer") + print("[ELEMENTS] SAVE_RAUM_STIL: name leer") return settings = p.get("settings") or {} sid = (p.get("id") or "").strip() or ("stil_" + uuid.uuid4().hex[:8]) @@ -12869,7 +12869,7 @@ class ElementeBridge(panel_base.BaseBridge): if not found: stile.append(new_stil) if save_raum_stempel_stile(doc, stile): - print("[ELEMENTE] Stempel-Stil '{}' ({}) gespeichert".format( + print("[ELEMENTS] Stempel-Stil '{}' ({}) gespeichert".format( name, sid)) # Apply to listed rooms — schreibt nur stilId, nicht die Settings # (die sind ja schon am Raum, sonst waeren sie nicht gespeichert @@ -12884,7 +12884,7 @@ class ElementeBridge(panel_base.BaseBridge): attrs.SetUserString(_KEY_RAUM_STIL_ID, sid) doc.Objects.ModifyAttributes(src_obj.Id, attrs, True) except Exception as ex: - print("[ELEMENTE] save-stil apply-to {}: {}".format(eid, ex)) + print("[ELEMENTS] save-stil apply-to {}: {}".format(eid, ex)) self._send_state() def _cmd_delete_raum_stil(self, p): @@ -12896,7 +12896,7 @@ class ElementeBridge(panel_base.BaseBridge): stile = load_raum_stempel_stile(doc) stile = [s for s in stile if s.get("id") != sid] if save_raum_stempel_stile(doc, stile): - print("[ELEMENTE] Stempel-Stil {} geloescht".format(sid)) + print("[ELEMENTS] Stempel-Stil {} geloescht".format(sid)) self._send_state() def _cmd_reorder_raum_stile(self, p): @@ -12942,7 +12942,7 @@ class ElementeBridge(panel_base.BaseBridge): except StopIteration: stile.append(new_stil) save_raum_stempel_stile(doc, stile) - print("[ELEMENTE] Stempel-Stil '{}' dupliziert -> '{}'".format( + print("[ELEMENTS] Stempel-Stil '{}' dupliziert -> '{}'".format( src.get("name"), new_name)) self._send_state() @@ -12970,7 +12970,7 @@ class ElementeBridge(panel_base.BaseBridge): stile = load_raum_stempel_stile(doc) stil = next((s for s in stile if s.get("id") == sid), None) if stil is None: - print("[ELEMENTE] APPLY_RAUM_STIL: Stil {} not found".format(sid)) + print("[ELEMENTS] APPLY_RAUM_STIL: Stil {} not found".format(sid)) return # Stil-Felder → Patch fuer _update_wall-Pfad patch_base = {} @@ -12993,12 +12993,12 @@ class ElementeBridge(panel_base.BaseBridge): attrs.SetUserString(_KEY_RAUM_STIL_ID, sid) doc.Objects.ModifyAttributes(src_obj.Id, attrs, True) except Exception as ex: - print("[ELEMENTE] write stil_id on {}: {}".format(eid, ex)) + print("[ELEMENTS] write stil_id on {}: {}".format(eid, ex)) n_applied += 1 except Exception as ex: - print("[ELEMENTE] apply stil {} -> {}: {}".format(sid, eid, ex)) + print("[ELEMENTS] apply stil {} -> {}: {}".format(sid, eid, ex)) if n_applied > 0: - print("[ELEMENTE] Stempel-Stil '{}' auf {} Raum/Raeume applied".format( + print("[ELEMENTS] Stempel-Stil '{}' auf {} Raum/Raeume applied".format( stil.get("name"), n_applied)) self._send_state() @@ -13011,7 +13011,7 @@ class ElementeBridge(panel_base.BaseBridge): if doc is None: return name = (p.get("name") or "").strip() if not name: - print("[ELEMENTE] SAVE_STEMPEL_STIL: name leer"); return + print("[ELEMENTS] SAVE_STEMPEL_STIL: name leer"); return settings = p.get("settings") or {} sid = (p.get("id") or "").strip() or ("stestil_" + uuid.uuid4().hex[:8]) stile = load_stempel_stile(doc) @@ -13024,7 +13024,7 @@ class ElementeBridge(panel_base.BaseBridge): stile[i] = new_stil; found = True; break if not found: stile.append(new_stil) if save_stempel_stile(doc, stile): - print("[ELEMENTE] Stempel-Stil '{}' ({}) gespeichert".format( + print("[ELEMENTS] Stempel-Stil '{}' ({}) gespeichert".format( name, sid)) # Apply on listed Stempel (nur stil_id schreiben) for eid in (p.get("applyToIds") or []): @@ -13035,7 +13035,7 @@ class ElementeBridge(panel_base.BaseBridge): attrs.SetUserString(_KEY_STEMPEL_STIL_ID, sid) doc.Objects.ModifyAttributes(src_obj.Id, attrs, True) except Exception as ex: - print("[ELEMENTE] save-stempel-stil apply-to:", ex) + print("[ELEMENTS] save-stempel-stil apply-to:", ex) self._send_state() def _cmd_delete_stempel_stil(self, p): @@ -13046,7 +13046,7 @@ class ElementeBridge(panel_base.BaseBridge): stile = load_stempel_stile(doc) stile = [s for s in stile if s.get("id") != sid] if save_stempel_stile(doc, stile): - print("[ELEMENTE] Stempel-Stil {} geloescht".format(sid)) + print("[ELEMENTS] Stempel-Stil {} geloescht".format(sid)) self._send_state() def _cmd_apply_stempel_stil(self, p): @@ -13069,7 +13069,7 @@ class ElementeBridge(panel_base.BaseBridge): stile = load_stempel_stile(doc) stil = next((s for s in stile if s.get("id") == sid), None) if stil is None: - print("[ELEMENTE] APPLY_STEMPEL_STIL: {} not found".format(sid)) + print("[ELEMENTS] APPLY_STEMPEL_STIL: {} not found".format(sid)) return # Stil-Felder → Patch fuer _update_wall stempel-Branch patch_base = {} @@ -13090,10 +13090,10 @@ class ElementeBridge(panel_base.BaseBridge): except Exception: pass n += 1 except Exception as ex: - print("[ELEMENTE] apply stempel-stil {} -> {}: {}".format( + print("[ELEMENTS] apply stempel-stil {} -> {}: {}".format( sid, eid, ex)) if n > 0: - print("[ELEMENTE] Stempel-Stil '{}' auf {} Stempel applied".format( + print("[ELEMENTS] Stempel-Stil '{}' auf {} Stempel applied".format( stil.get("name"), n)) self._send_state() @@ -13116,7 +13116,7 @@ class ElementeBridge(panel_base.BaseBridge): except StopIteration: stile.append(new_stil) save_stempel_stile(doc, stile) - print("[ELEMENTE] Stempel-Stil '{}' dupliziert -> '{}'".format( + print("[ELEMENTS] Stempel-Stil '{}' dupliziert -> '{}'".format( src.get("name"), new_name)) self._send_state() @@ -13144,24 +13144,24 @@ class ElementeBridge(panel_base.BaseBridge): unter aktivem Geschoss.""" lib_id = (p.get("id") or "").strip() if not lib_id: - print("[ELEMENTE] CREATE_SYMBOL ohne id") + print("[ELEMENTS] CREATE_SYMBOL ohne id") return doc = Rhino.RhinoDoc.ActiveDoc if doc is None: return import library item = library.find_item(lib_id) if item is None: - print("[ELEMENTE] CREATE_SYMBOL: item not found", lib_id) + print("[ELEMENTS] CREATE_SYMBOL: item not found", lib_id) return if item.get("type") not in ("symbol", "object"): - print("[ELEMENTE] CREATE_SYMBOL: ungueltiger Typ", item.get("type")) + print("[ELEMENTS] CREATE_SYMBOL: ungueltiger Typ", item.get("type")) return # Interactive point pick try: import Rhino.Input.Custom as ric from Rhino.Input import GetResult except Exception as ex: - print("[ELEMENTE] Imports:", ex); return + print("[ELEMENTS] Imports:", ex); return try: gp = ric.GetPoint() gp.SetCommandPrompt("Symbol platzieren — Punkt waehlen") @@ -13169,7 +13169,7 @@ class ElementeBridge(panel_base.BaseBridge): if res != GetResult.Point: return pt = gp.Point() except Exception as ex: - print("[ELEMENTE] GetPoint:", ex); return + print("[ELEMENTS] GetPoint:", ex); return # Layer-Routing geschoss_id = _active_geschoss_id(doc) g = _geschoss_by_id(doc, geschoss_id) if geschoss_id else None @@ -13182,7 +13182,7 @@ class ElementeBridge(panel_base.BaseBridge): try: ok, msg = library.import_item(doc, lib_id, at_point=pt, layer2d=layer2d, layer3d=layer3d) - print("[ELEMENTE] CREATE_SYMBOL '{}': ok={} ({})".format( + print("[ELEMENTS] CREATE_SYMBOL '{}': ok={} ({})".format( item.get("name"), ok, msg)) finally: try: doc.EndUndoRecord(undo_serial) @@ -13212,9 +13212,9 @@ class ElementeBridge(panel_base.BaseBridge): "&E={}&N={}&zoom=8&layers={}").format(E, N, layers) try: subprocess.Popen(["open", url]) - print("[ELEMENTE] Swisstopo Karte geoeffnet:", url) + print("[ELEMENTS] Swisstopo Karte geoeffnet:", url) except Exception as ex: - print("[ELEMENTE] Karte oeffnen failed:", ex) + print("[ELEMENTS] Karte oeffnen failed:", ex) def _cmd_import_swisstopo(self, p): """File-Picker -> Rhino _-Import -> bewege neue Objekte auf den @@ -13253,12 +13253,12 @@ class ElementeBridge(panel_base.BaseBridge): try: ok = ofd.ShowDialog() except Exception: ok = False if not ok: - print("[ELEMENTE] Swisstopo-Import abgebrochen"); return + print("[ELEMENTS] Swisstopo-Import abgebrochen"); return path = ofd.FileName except Exception as ex: - print("[ELEMENTE] OpenFileDialog:", ex); return + print("[ELEMENTS] OpenFileDialog:", ex); return if not path or not os.path.isfile(path): - print("[ELEMENTE] Pfad ungueltig:", path); return + print("[ELEMENTS] Pfad ungueltig:", path); return # Snapshot vor Import: existierende Object-IDs before_ids = set() @@ -13271,11 +13271,11 @@ class ElementeBridge(panel_base.BaseBridge): # Pfad fuer Rhino-Command escapen (Spaces!) cmd_path = path.replace('"', '\\"') cmd = '_-Import "{}" _Enter'.format(cmd_path) - print("[ELEMENTE] Swisstopo-Import:", cmd) + print("[ELEMENTS] Swisstopo-Import:", cmd) try: Rhino.RhinoApp.RunScript(cmd, False) except Exception as ex: - print("[ELEMENTE] _-Import failed:", ex); return + print("[ELEMENTS] _-Import failed:", ex); return # Differenz: neu hinzugekommene Objekte new_objs = [] @@ -13285,26 +13285,26 @@ class ElementeBridge(panel_base.BaseBridge): if obj.Id not in before_ids: new_objs.append(obj) except Exception: pass - print("[ELEMENTE] Swisstopo-Import: {} neue Objekte".format(len(new_objs))) + print("[ELEMENTS] Swisstopo-Import: {} neue Objekte".format(len(new_objs))) if not new_objs: return # Target-Layer finden + Objekte verschieben (nur wenn sub_name set) if sub_name: z_id = doc.Strings.GetValue("dossier_active_id") if not z_id: - print("[ELEMENTE] Swisstopo: kein aktives Geschoss — Objekte " + print("[ELEMENTS] Swisstopo: kein aktives Geschoss — Objekte " "bleiben auf Import-Default-Layer"); return try: import layer_builder parent_idx = layer_builder._find_top_by_id(doc, z_id) if parent_idx < 0: - print("[ELEMENTE] Swisstopo: Parent-Layer not found") + print("[ELEMENTS] Swisstopo: Parent-Layer not found") return parent_id = doc.Layers[parent_idx].Id code = sub_name.split("_", 1)[0] sub_idx = layer_builder._find_sublayer_by_code(doc, parent_id, code) if sub_idx < 0: - print("[ELEMENTE] Swisstopo: Sublayer {} not found " + print("[ELEMENTS] Swisstopo: Sublayer {} not found " "— bitte erst Ebenen-Apply ausloesen".format(code)) return moved = 0 @@ -13315,10 +13315,10 @@ class ElementeBridge(panel_base.BaseBridge): if doc.Objects.ModifyAttributes(obj, attrs, True): moved += 1 except Exception: pass - print("[ELEMENTE] Swisstopo: {} Objekte auf {} verschoben".format( + print("[ELEMENTS] Swisstopo: {} Objekte auf {} verschoben".format( moved, doc.Layers[sub_idx].FullPath)) except Exception as ex: - print("[ELEMENTE] Layer-Move fehler:", ex) + print("[ELEMENTS] Layer-Move fehler:", ex) try: doc.Views.Redraw() except Exception: pass @@ -14806,7 +14806,7 @@ class ElementeBridge(panel_base.BaseBridge): elif r_modus == "fix" and old_modus == "masstab": # paper-mm → m: m = paper_mm * scale / 1000 r_th = float(r_th) * float(scale) / 1000.0 - print("[ELEMENTE] Raum-Modus {} → {} @ 1:{:.0f}: " + print("[ELEMENTS] Raum-Modus {} → {} @ 1:{:.0f}: " "txt_h umgerechnet auf {:.4f}".format( old_modus, r_modus, scale, r_th)) gstart = p.get("geschoss", old_meta["geschoss"]) @@ -15104,7 +15104,7 @@ class ElementeBridge(panel_base.BaseBridge): _max = 2 * _m.pi - 0.05 if abs(new_delta) > _max: new_delta = sign * _max - print("[ELEMENTE] Wendel-Lock: Sweep auf 2π geclamped") + print("[ELEMENTS] Wendel-Lock: Sweep auf 2π geclamped") a_end_new = a_start_cur + new_delta pend_n = rg.Point3d( center.X + r_click * _m.cos(a_end_new), @@ -15116,11 +15116,11 @@ class ElementeBridge(panel_base.BaseBridge): axis_obj = doc.Objects.Find(axis_obj.Id) attrs = axis_obj.Attributes except Exception as ex: - print("[ELEMENTE] lock axis-len adjust:", ex) - print("[ELEMENTE] Lock: H={:.3f}/S={:.3f}→n={}, A={:.3f}".format( + print("[ELEMENTS] lock axis-len adjust:", ex) + print("[ELEMENTS] Lock: H={:.3f}/S={:.3f}→n={}, A={:.3f}".format( H_now, ttarget_s, tn, ttarget_a)) except Exception as ex: - print("[ELEMENTE] lock recompute:", ex) + print("[ELEMENTS] lock recompute:", ex) tarr = p.get("arrowStyle", old_meta.get("treppe_arrow_style", "klassisch")) if tarr not in ("klassisch", "filled", "breit", "voll"): @@ -15376,7 +15376,7 @@ class ElementeBridge(panel_base.BaseBridge): if wid == wall_id: continue try: _regenerate_element(doc, wid) except Exception as ex: - print("[ELEMENTE] old-chain regen:", ex) + print("[ELEMENTS] old-chain regen:", ex) doc.Views.Redraw() self._send_state() @@ -15402,7 +15402,7 @@ class ElementeBridge(panel_base.BaseBridge): # Haupt-Element loeschen for obj, meta in _find_objects_by_wall_id(doc, wall_id): try: doc.Objects.Delete(obj.Id, True) - except Exception as ex: print("[ELEMENTE] delete:", ex) + except Exception as ex: print("[ELEMENTS] delete:", ex) # Bei Oeffnung-Delete: Elternwand regen if parent_id: _regenerate_element(doc, parent_id) @@ -15444,7 +15444,7 @@ def regenerate_all_oeffnungen(doc): n += 1 try: doc.Views.Redraw() except Exception: pass - print("[ELEMENTE] regen all oeffnungen via {} Waende".format(n)) + print("[ELEMENTS] regen all oeffnungen via {} Waende".format(n)) return n @@ -15486,7 +15486,7 @@ def _apply_wand_z_drag_constraint(new_obj, meta): # Sticky reset — bei JEDEM Replace, damit kein alter Delta haengt sc.sticky["_elemente_wand_z_delta"] = None if not isinstance(geom, rg.Curve): - print("[ELEMENTE] wand z-drag skip: geom is {}".format(type(geom).__name__)) + print("[ELEMENTS] wand z-drag skip: geom is {}".format(type(geom).__name__)) return False # Z aus den Endpunkten der Curve (funktioniert fuer Line, Polyline, Spline). z0 = geom.PointAtStart.Z @@ -15498,7 +15498,7 @@ def _apply_wand_z_drag_constraint(new_obj, meta): # auf GripsOn oder Replace mit veraltetem Display-Z. Wand-Axis flatten # ohne uk/ok zu modifizieren. if _is_active_view_top_like(): - print("[ELEMENTE] wand z-drag IGNORED (top view, z0={:.3f} z1={:.3f}) " + print("[ELEMENTS] wand z-drag IGNORED (top view, z0={:.3f} z1={:.3f}) " "— axis auf Z=0 flatten".format(z0, z1)) try: doc = Rhino.RhinoDoc.ActiveDoc @@ -15513,10 +15513,10 @@ def _apply_wand_z_drag_constraint(new_obj, meta): flat.Translate(rg.Vector3d(0, 0, -(z0 if abs(z0) > abs(z1) else z1))) doc.Objects.Replace(new_obj.Id, flat) except Exception as ex: - print("[ELEMENTE] flatten in top-view:", ex) + print("[ELEMENTS] flatten in top-view:", ex) return False delta = z1 if abs(z1) > abs(z0) else z0 - print("[ELEMENTE] wand z-drag triggered: z0={:.3f} z1={:.3f} delta={:.3f}".format(z0, z1, delta)) + print("[ELEMENTS] wand z-drag triggered: z0={:.3f} z1={:.3f} delta={:.3f}".format(z0, z1, delta)) doc = Rhino.RhinoDoc.ActiveDoc if doc is None: return False @@ -15524,7 +15524,7 @@ def _apply_wand_z_drag_constraint(new_obj, meta): meta["uk_override"], meta["ok_override"]) new_uk = uk_cur + delta new_ok = ok_cur + delta - print("[ELEMENTE] wand z-drag: uk_cur={:.3f} ok_cur={:.3f} new_uk={:.3f} new_ok={:.3f} (meta uk_over='{}' ok_over='{}')".format( + print("[ELEMENTS] wand z-drag: uk_cur={:.3f} ok_cur={:.3f} new_uk={:.3f} new_ok={:.3f} (meta uk_over='{}' ok_over='{}')".format( uk_cur, ok_cur, new_uk, new_ok, meta.get("uk_override", ""), meta.get("ok_override", ""))) attrs = new_obj.Attributes.Duplicate() attrs.SetUserString(_KEY_UK_OVER, "{:.6f}".format(new_uk)) @@ -15535,10 +15535,10 @@ def _apply_wand_z_drag_constraint(new_obj, meta): if verify is not None: actual_uk = verify.Attributes.GetUserString(_KEY_UK_OVER) or "" actual_ok = verify.Attributes.GetUserString(_KEY_OK_OVER) or "" - print("[ELEMENTE] wand z-drag ModifyAttributes returned={} → stored uk_over='{}' ok_over='{}'".format( + print("[ELEMENTS] wand z-drag ModifyAttributes returned={} → stored uk_over='{}' ok_over='{}'".format( mod_ok, actual_uk, actual_ok)) else: - print("[ELEMENTE] wand z-drag verify: FindId returned None!") + print("[ELEMENTS] wand z-drag verify: FindId returned None!") # Curve auf Z=0 fixen. LineCurve: explizit beide Endpunkte (auch bei # einzelnem End-Grip-Drag). Andere Curves: ueber Translation (akzeptiert # leichten Schraeg bei End-Grip-Drag, gleicht sich beim naechsten @@ -15643,7 +15643,7 @@ def _apply_oeffnung_constraint(new_obj, meta, old_obj=None): p_on = parent_curve.PointAt(t_new) target_x, target_y = p_on.X, p_on.Y except Exception as ex: - print("[ELEMENTE] tangential project:", ex) + print("[ELEMENTS] tangential project:", ex) else: try: rc, t = parent_curve.ClosestPoint( @@ -15712,7 +15712,7 @@ def _apply_oeffnung_constraint(new_obj, meta, old_obj=None): if not sc.sticky.get("_dossier_skip_sync_regen"): try: _regenerate_element(doc, parent_id) except Exception as ex: - print("[ELEMENTE] sync regen oeffnung:", ex) + print("[ELEMENTS] sync regen oeffnung:", ex) return geom_changed @@ -15783,12 +15783,12 @@ def _suppress_z_drift_if_top_view(e): sc.sticky[_REGEN_BUSY] = True try: doc.Objects.Replace(new_obj.Id, corrected) - print("[ELEMENTE] Top-View Z-Guard: Δz={:.4f} → 0 fuer {}".format( + print("[ELEMENTS] Top-View Z-Guard: Δz={:.4f} → 0 fuer {}".format( dz, new_obj.Attributes.GetUserString(_KEY_ID) or "?")) finally: sc.sticky[_REGEN_BUSY] = _was except Exception as ex: - print("[ELEMENTE] _suppress_z_drift_if_top_view:", ex) + print("[ELEMENTS] _suppress_z_drift_if_top_view:", ex) def _on_object_replaced(sender, e): @@ -15857,7 +15857,7 @@ def _on_object_replaced_body(sender, e): try: _suppress_z_drift_if_top_view(e) except Exception as ex: - print("[ELEMENTE] z-guard:", ex) + print("[ELEMENTS] z-guard:", ex) try: new_obj = e.NewRhinoObject if new_obj and not _read_meta(new_obj): @@ -15931,7 +15931,7 @@ def _on_object_replaced_body(sender, e): elif meta.get("type") == "oeffnung_point": _apply_oeffnung_constraint(e.NewRhinoObject, meta, e.OldRhinoObject) except Exception as ex: - print("[ELEMENTE] grip constraint:", ex) + print("[ELEMENTS] grip constraint:", ex) finally: sc.sticky[_REGEN_BUSY] = _was_busy @@ -15965,7 +15965,7 @@ def _on_object_replaced_body(sender, e): try: _migrate_openings_to_new_axis(meta["id"], old_geom, new_geom) except Exception as ex: - print("[ELEMENTE] migrate openings:", ex) + print("[ELEMENTS] migrate openings:", ex) # Wand-Verbindungen: alle ABHAENGIGEN Waende mit re-regenerieren. try: doc2 = Rhino.RhinoDoc.ActiveDoc @@ -15976,10 +15976,10 @@ def _on_object_replaced_body(sender, e): for wid in deps: _queue_regen(wid) except Exception as ex: - print("[ELEMENTE] dep regen:", ex) + print("[ELEMENTS] dep regen:", ex) _queue_regen(meta["id"]) except Exception as ex: - print("[ELEMENTE] on_object_replaced:", ex) + print("[ELEMENTS] on_object_replaced:", ex) def _migrate_openings_to_new_axis(wall_id, old_geom, new_geom, old_positions=None): @@ -16109,7 +16109,7 @@ def _migrate_openings_to_new_axis(wall_id, old_geom, new_geom, old_positions=Non new_pos = rg.Point3d(new_pos.X, new_pos.Y, wall_uk + bruest_z) doc.Objects.Replace(op_obj.Id, rg.Point(new_pos)) except Exception as ex: - print("[ELEMENTE] migrate one opening:", ex) + print("[ELEMENTS] migrate one opening:", ex) finally: sc.sticky[_REGEN_BUSY] = _was_busy @@ -16199,7 +16199,7 @@ def _on_object_added(sender, e): for _old_grp in (attrs.GetGroupList() or []): attrs.RemoveFromGroup(int(_old_grp)) except Exception as _ex: - print("[ELEMENTE] dup group-clear:", _ex) + print("[ELEMENTS] dup group-clear:", _ex) _attach_meta(attrs, new_id, meta["type"], meta["geschoss"], meta["dicke"], meta["uk_override"], meta["ok_override"], meta.get("referenz", "mid"), @@ -16229,7 +16229,7 @@ def _on_object_added(sender, e): raum_txt_h=meta.get("raum_txt_h")) new_obj.Attributes = attrs new_obj.CommitChanges() - print("[ELEMENTE] Source-Duplikat erkannt — neue ID {}".format(new_id)) + print("[ELEMENTS] Source-Duplikat erkannt — neue ID {}".format(new_id)) _queue_regen(new_id) elif meta["type"] in VOLUME_TYPES: # Volume-Duplikat: das mit-kopierte Volumen ist verwaist, @@ -16237,9 +16237,9 @@ def _on_object_added(sender, e): # die Regen-Pipeline erstellt das richtige Volumen am # korrekten Ort fuer die neue ID. try: doc.Objects.Delete(new_obj.Id, True) - except Exception as ex: print("[ELEMENTE] dup-volume delete:", ex) + except Exception as ex: print("[ELEMENTS] dup-volume delete:", ex) except Exception as ex: - print("[ELEMENTE] on_object_added:", ex) + print("[ELEMENTS] on_object_added:", ex) def _on_object_deleted(sender, e): @@ -16310,7 +16310,7 @@ def _on_object_deleted(sender, e): "type": meta["type"], "parent": parent_id, } except Exception as ex: - print("[ELEMENTE] queue source cascade:", ex) + print("[ELEMENTS] queue source cascade:", ex) if meta["type"] == "oeffnung_point": parent_id = meta.get("oeff_parent") if parent_id: @@ -16341,7 +16341,7 @@ def _on_object_deleted(sender, e): pending[meta["id"]] = {"ts": time.time(), "openings": op_ids} except Exception as ex: - print("[ELEMENTE] queue cascade:", ex) + print("[ELEMENTS] queue cascade:", ex) try: geom = obj.Geometry if obj is not None else None if isinstance(geom, rg.Curve): @@ -16350,7 +16350,7 @@ def _on_object_deleted(sender, e): for wid in deps: _queue_regen(wid) except Exception as ex: - print("[ELEMENTE] del dep regen:", ex) + print("[ELEMENTS] del dep regen:", ex) # Chain-Volume-Cleanup: wenn diese Wand in einem alten Chain- # Volume war (chain_members enthaelt sie), volume loeschen + # die anderen ehemaligen Chain-Members fuer Solo-Regen queuen. @@ -16369,14 +16369,14 @@ def _on_object_deleted(sender, e): if _wid != meta["id"]: _queue_regen(_wid) except Exception as ex: - print("[ELEMENTE] chain-cleanup:", ex) + print("[ELEMENTS] chain-cleanup:", ex) # Panel-Sync: bei Bulk-Op nur einmal am CommandEnd, sonst # sofort. Sonst pusht ein Delete von 50 Waenden 50× state. if not sc.sticky.get(_BULK_ACTIVE_KEY): b = sc.sticky.get("elemente_bridge") if b is not None: b._send_state() except Exception as ex: - print("[ELEMENTE] on_object_deleted:", ex) + print("[ELEMENTS] on_object_deleted:", ex) _SELECT_BUSY = "_elemente_select_busy" @@ -16518,7 +16518,7 @@ def _on_select_objects(sender, e): if p.IsSelected(False) == 0: doc.Objects.Select(p.Id, True) except Exception as ex: - print("[ELEMENTE] select partner:", ex) + print("[ELEMENTS] select partner:", ex) for s in sources: try: if not _is_obj_visible(doc, s): continue @@ -16526,11 +16526,11 @@ def _on_select_objects(sender, e): s.GripsOn = True s.CommitChanges() except Exception as ex: - print("[ELEMENTE] grips on:", ex) + print("[ELEMENTS] grips on:", ex) finally: sc.sticky[_SELECT_BUSY] = False except Exception as ex: - print("[ELEMENTE] on_select:", ex) + print("[ELEMENTS] on_select:", ex) def _is_obj_visible(doc, obj): @@ -16564,7 +16564,7 @@ def _on_deselect_objects(sender, e): if p.IsSelected(False) > 0: doc.Objects.Select(p.Id, False) except Exception as ex: - print("[ELEMENTE] deselect partner:", ex) + print("[ELEMENTS] deselect partner:", ex) for s in sources: try: if not _is_obj_visible(doc, s): continue @@ -16572,11 +16572,11 @@ def _on_deselect_objects(sender, e): s.GripsOn = False s.CommitChanges() except Exception as ex: - print("[ELEMENTE] grips off:", ex) + print("[ELEMENTS] grips off:", ex) finally: sc.sticky[_SELECT_BUSY] = False except Exception as ex: - print("[ELEMENTE] on_deselect:", ex) + print("[ELEMENTS] on_deselect:", ex) def _sync_orphan_grips(doc): @@ -16624,7 +16624,7 @@ def _migrate_plangrafik_60_to_80_once(doc): for e in ebenen: if not isinstance(e, dict): continue if e.get("code") == "60" and (e.get("name") or "").lower() == "plangrafik": - print("[ELEMENTE] Migration: Plangrafik von Code 60 → 80") + print("[ELEMENTS] Migration: Plangrafik von Code 60 → 80") e["code"] = "80" changed = True break @@ -16644,7 +16644,7 @@ def _migrate_plangrafik_60_to_80_once(doc): "color": color, "lw": lw, "visible": True, "locked": False, }) - print("[ELEMENTE] Migration: Ebene '{}_{}' hinzugefuegt".format( + print("[ELEMENTS] Migration: Ebene '{}_{}' hinzugefuegt".format( code, name)) changed = True if not changed: return @@ -16653,7 +16653,7 @@ def _migrate_plangrafik_60_to_80_once(doc): doc.Strings.SetString("dossier_ebenen", json.dumps(ebenen, ensure_ascii=False)) except Exception as ex: - print("[ELEMENTE] Plangrafik-Migration save:", ex) + print("[ELEMENTS] Plangrafik-Migration save:", ex) return # Rhino-Layer umbenennen: ::60_Plangrafik → 80_Plangrafik n_renamed = 0 @@ -16666,9 +16666,9 @@ def _migrate_plangrafik_60_to_80_once(doc): n_renamed += 1 except Exception: pass except Exception as ex: - print("[ELEMENTE] Plangrafik-Migration rename:", ex) + print("[ELEMENTS] Plangrafik-Migration rename:", ex) if n_renamed > 0: - print("[ELEMENTE] {} Rhino-Layer 60_Plangrafik → 80_Plangrafik umbenannt".format( + print("[ELEMENTS] {} Rhino-Layer 60_Plangrafik → 80_Plangrafik umbenannt".format( n_renamed)) # build_layers + broadcast damit Ebenen-Manager UI nachzieht try: @@ -16677,7 +16677,7 @@ def _migrate_plangrafik_60_to_80_once(doc): zlist = json.loads(z_raw) if z_raw else [] if zlist: _lb.build_layers(doc, zlist, ebenen) except Exception as ex: - print("[ELEMENTE] build_layers nach Plangrafik-Migration:", ex) + print("[ELEMENTS] build_layers nach Plangrafik-Migration:", ex) try: import layers_panel as _rp _rp._broadcast_state(doc) @@ -16703,9 +16703,9 @@ def _migrate_strip_wand_outlines_once(doc): n += 1 except Exception: pass except Exception as ex: - print("[ELEMENTE] strip wand-lines migration:", ex) + print("[ELEMENTS] strip wand-lines migration:", ex) if n > 0: - print("[ELEMENTE] Strip-Wand-Lines Migration: {} entfernt".format(n)) + print("[ELEMENTS] Strip-Wand-Lines Migration: {} entfernt".format(n)) def _migrate_strip_wall_auto_groups_once(doc): @@ -16729,9 +16729,9 @@ def _migrate_strip_wall_auto_groups_once(doc): _strip_wall_auto_group(doc, wid) n += 1 except Exception as ex: - print("[ELEMENTE] strip-wall-groups migration:", ex) + print("[ELEMENTS] strip-wall-groups migration:", ex) if n > 0: - print("[ELEMENTE] Strip-Wall-Auto-Groups Migration: {} Wand-Achsen " + print("[ELEMENTS] Strip-Wall-Auto-Groups Migration: {} Wand-Achsen " "geprueft".format(n)) @@ -16759,7 +16759,7 @@ def _migrate_layer_caps_once(doc): old = e.get("name") or "" if old in renames: new = renames[old] - print("[ELEMENTE] CAPS migration: '{}' → '{}'".format(old, new)) + print("[ELEMENTS] CAPS migration: '{}' → '{}'".format(old, new)) legacy.append((e.get("code") or "", old, new)) e["name"] = new if not legacy: return @@ -16767,7 +16767,7 @@ def _migrate_layer_caps_once(doc): doc.Strings.SetString("dossier_ebenen", json.dumps(ebenen, ensure_ascii=False)) except Exception as ex: - print("[ELEMENTE] CAPS-Migration save:", ex); return + print("[ELEMENTS] CAPS-Migration save:", ex); return rename_map = {"{}_{}".format(c, o): "{}_{}".format(c, n) for c, o, n in legacy} n_renamed = 0 try: @@ -16779,15 +16779,15 @@ def _migrate_layer_caps_once(doc): n_renamed += 1 except Exception: pass except Exception as ex: - print("[ELEMENTE] CAPS-Migration rename:", ex) - print("[ELEMENTE] CAPS migration: {} Rhino layers renamed".format(n_renamed)) + print("[ELEMENTS] CAPS-Migration rename:", ex) + print("[ELEMENTS] CAPS migration: {} Rhino layers renamed".format(n_renamed)) try: import layer_builder as _lb z_raw = doc.Strings.GetValue("dossier_zeichnungsebenen") zlist = json.loads(z_raw) if z_raw else [] if zlist: _lb.build_layers(doc, zlist, ebenen) except Exception as ex: - print("[ELEMENTE] build_layers nach CAPS migration:", ex) + print("[ELEMENTS] build_layers nach CAPS migration:", ex) try: import layers_panel as _rp _rp._broadcast_state(doc) @@ -16839,7 +16839,7 @@ def _migrate_referenz_layer_once(doc): by_geschoss[g_name] = ref_idx n_geschosse += 1 except Exception as ex: - print("[ELEMENTE] referenz-ebene fuer {}: {}".format(g_name, ex)) + print("[ELEMENTS] referenz-ebene fuer {}: {}".format(g_name, ex)) for obj in list(doc.Objects): try: meta = _read_meta(obj) @@ -16867,7 +16867,7 @@ def _migrate_referenz_layer_once(doc): if doc.Objects.ModifyAttributes(obj, a, True): n_moved += 1 except Exception: pass - print("[ELEMENTE] Reference migration (v3): {} floor(s) registered, " + print("[ELEMENTS] Reference migration (v3): {} floor(s) registered, " "{} objects moved, {} shown".format( n_geschosse, n_moved, n_shown)) # Finaler Broadcast — falls _find_ebene_sublayer_name den Eintrag @@ -16878,7 +16878,7 @@ def _migrate_referenz_layer_once(doc): rhinopanel._broadcast_state(doc) except Exception: pass except Exception as ex: - print("[ELEMENTE] _migrate_referenz_layer_once:", ex) + print("[ELEMENTS] _migrate_referenz_layer_once:", ex) def _ensure_oeff_ebenen_once(doc): @@ -16928,9 +16928,9 @@ def _ensure_oeff_ebenen_once(doc): n_moved += 1 except Exception: pass if n_moved: - print("[ELEMENTE] Oeffnungen-Subtree-Migration: {} Objekte auf neue Sublayer".format(n_moved)) + print("[ELEMENTS] Oeffnungen-Subtree-Migration: {} Objekte auf neue Sublayer".format(n_moved)) except Exception as ex: - print("[ELEMENTE] _ensure_oeff_ebenen_once:", ex) + print("[ELEMENTS] _ensure_oeff_ebenen_once:", ex) def _on_idle_selection(sender, e): @@ -17009,7 +17009,7 @@ def _on_idle_selection(sender, e): for wid in ids: try: _regenerate_volume(doc, wid) except Exception as ex: - print("[ELEMENTE] regen", wid, ex) + print("[ELEMENTS] regen", wid, ex) finally: doc.Views.RedrawEnabled = prev_redraw try: doc.EndUndoRecord(undo_serial) @@ -17067,7 +17067,7 @@ def _on_idle_selection(sender, e): try: b._send_state() except Exception: pass except Exception as ex: - print("[ELEMENTE] pending cascade:", ex) + print("[ELEMENTS] pending cascade:", ex) # 1a2) Pending Source-Cascade verarbeiten (Tueren/Fenster/Aussparungen). # Analog Wand-Cascade: Source-Delete koennte Transform sein (Move/Rotate), @@ -17108,7 +17108,7 @@ def _on_idle_selection(sender, e): try: b._send_state() except Exception: pass except Exception as ex: - print("[ELEMENTE] pending source cascade:", ex) + print("[ELEMENTS] pending source cascade:", ex) # 1b) SIA-State-Change-Detection — wenn der User den Override-Modus # ausserhalb meines SIA-Buttons aendert (z.B. via Overrides-Panel- @@ -17276,7 +17276,7 @@ def _suppress_redraw_until_cmd_end(): doc.Views.RedrawEnabled = False sc.sticky["_dossier_cmd_redraw_suppressed"] = True except Exception as ex: - print("[ELEMENTE] suppress redraw:", ex) + print("[ELEMENTS] suppress redraw:", ex) def _flush_pending_cascades_sync(doc): @@ -17360,7 +17360,7 @@ def _on_command_begin(sender, e): # Listener bail-out — am Ende einmal redrawn. if name in _USER_BULK_CMDS: sc.sticky[_BULK_ACTIVE_KEY] = name - print("[ELEMENTE] Bulk-op start: '{}' — Listener bail active".format(name)) + print("[ELEMENTS] Bulk-op start: '{}' — Listener bail active".format(name)) try: sc.sticky["_dossier_bulk_redraw_prev"] = bool(doc.Views.RedrawEnabled) doc.Views.RedrawEnabled = False @@ -17373,14 +17373,14 @@ def _on_command_begin(sender, e): serial = doc.BeginUndoRecord("Element-Loeschen") sc.sticky["_dossier_bulk_undo_serial"] = serial except Exception as ex: - print("[ELEMENTE] bulk undo record begin:", ex) + print("[ELEMENTS] bulk undo record begin:", ex) sc.sticky["_dossier_bulk_undo_serial"] = None return # Diagnose: andere Commands sehen wir hier vorbeiziehen — wenn _Delete # einen anderen Namen hat als 'Delete', sehen wir's und koennen den # frozenset anpassen. if name and "delete" in name.lower(): - print("[ELEMENTE] CmdBegin '{}' (nicht im Bulk-Set — anpassen?)".format(name)) + print("[ELEMENTS] CmdBegin '{}' (nicht im Bulk-Set — anpassen?)".format(name)) if name not in _USER_TRANSFORM_CMDS: return sc.sticky[_UT_SNAPSHOT_KEY] = _snapshot_source_positions(doc) sc.sticky[_UT_ACTIVE_KEY] = name @@ -17395,7 +17395,7 @@ def _on_command_begin(sender, e): serial = doc.BeginUndoRecord("Element-Transform") sc.sticky["_dossier_undo_serial"] = serial except Exception as ex: - print("[ELEMENTE] cmd-begin undo record:", ex) + print("[ELEMENTS] cmd-begin undo record:", ex) sc.sticky["_dossier_undo_serial"] = None @@ -17422,7 +17422,7 @@ def regen_masstab_raeume(doc=None): for rid in ids: try: _regenerate_element(doc, rid) except Exception as ex: - print("[ELEMENTE] regen_masstab_raeume", rid, ":", ex) + print("[ELEMENTS] regen_masstab_raeume", rid, ":", ex) finally: sc.sticky[_REGEN_BUSY] = _was_busy try: doc.Views.Redraw() @@ -17467,7 +17467,7 @@ def _sync_stempel_to_source(doc): attrs.SetUserString(_KEY_STEMPEL_ITAL, "1" if new_ital else "0") doc.Objects.ModifyAttributes(obj.Id, attrs, True) except Exception as ex: - print("[ELEMENTE] sync stempel:", ex) + print("[ELEMENTS] sync stempel:", ex) def _sync_raum_stamps_to_source(doc): @@ -17591,9 +17591,9 @@ def _sync_raum_stamps_to_source(doc): "1" if new_ital else "0") doc.Objects.ModifyAttributes(src_obj.Id, attrs, True) except Exception as ex: - print("[ELEMENTE] sync stamp", eid, ":", ex) + print("[ELEMENTS] sync stamp", eid, ":", ex) except Exception as ex: - print("[ELEMENTE] _sync_raum_stamps_to_source:", ex) + print("[ELEMENTS] _sync_raum_stamps_to_source:", ex) def _on_command_end(sender, e): @@ -17610,7 +17610,7 @@ def _on_command_end(sender, e): if doc is not None: _flush_pending_cascades_sync(doc) except Exception as ex: - print("[ELEMENTE] bulk cascade flush:", ex) + print("[ELEMENTS] bulk cascade flush:", ex) # Undo-Record schliessen — alles seit BeginUndoRecord (User-Delete + # Cascade) wird als EIN Cmd+Z behandelt. try: @@ -17618,7 +17618,7 @@ def _on_command_end(sender, e): if serial is not None and doc is not None: doc.EndUndoRecord(serial) except Exception as ex: - print("[ELEMENTE] bulk undo record end:", ex) + print("[ELEMENTS] bulk undo record end:", ex) try: prev = sc.sticky.pop("_dossier_bulk_redraw_prev", True) if doc is not None: @@ -17674,7 +17674,7 @@ def _on_command_end(sender, e): try: _sync_stempel_to_source(doc) finally: sc.sticky[_REGEN_BUSY] = _was_sync except Exception as ex: - print("[ELEMENTE] stamp-sync:", ex) + print("[ELEMENTS] stamp-sync:", ex) # RedrawEnabled wurde idR schon beim ersten Object-Event nach dem # User-Klick auf False set (`_suppress_redraw_until_cmd_end`). Den @@ -17730,7 +17730,7 @@ def _on_command_end(sender, e): new_id = prefix + uuid.uuid4().hex[:10] dup_source_renames.append((obj, old_id, new_id, t)) except Exception as ex: - print("[ELEMENTE] dup detection:", ex) + print("[ELEMENTS] dup detection:", ex) # Pass B: neue Volumes mit dup-IDs identifizieren (alte UserString-id ist # eine umbenannte Source). Mapping alte_id → neue_id zum Lookup. @@ -17751,7 +17751,7 @@ def _on_command_end(sender, e): new_parent = elem_id_map.get(old_parent, old_parent) dup_volume_renames.append((obj, new_vol_id, old_parent, new_parent)) except Exception as ex: - print("[ELEMENTE] dup volume detection:", ex) + print("[ELEMENTS] dup volume detection:", ex) # Pass C: oeffnung_point's oeff_parent rewire (nicht-Volume, also Sources) # Wenn eine Wand umbenannt wurde, alle (umbenannten) Oeffnungen die zu ihr @@ -17786,7 +17786,7 @@ def _on_command_end(sender, e): doc.Objects.ModifyAttributes(obj.Id, attrs, True) n_renamed += 1 except Exception as ex: - print("[ELEMENTE] apply source rename:", ex) + print("[ELEMENTS] apply source rename:", ex) for obj, new_vol_id, old_parent, new_parent in dup_volume_renames: try: attrs = obj.Attributes.Duplicate() @@ -17796,9 +17796,9 @@ def _on_command_end(sender, e): doc.Objects.ModifyAttributes(obj.Id, attrs, True) n_renamed += 1 except Exception as ex: - print("[ELEMENTE] apply volume rename:", ex) + print("[ELEMENTS] apply volume rename:", ex) if n_renamed > 0: - print("[ELEMENTE] mirror/copy-Duplikate: {} Objs neu-ID'd".format(n_renamed)) + print("[ELEMENTS] mirror/copy-Duplikate: {} Objs neu-ID'd".format(n_renamed)) # Wenn ALLE bewegten Sources sich mit dem gleichen Rigid-2D-Transform # abbilden lassen (Translation und/oder Rotation um Z-Achse, KEIN Scale, # KEIN Z-Drag, KEIN End-Grip-Drag, KEIN Mirror), reicht eine Transform- @@ -17993,7 +17993,7 @@ def _on_command_end(sender, e): # Falls KEIN Source bewegt — canonical aus synthetischem Volume-Move if canonical is None and synthetic_canonicals: canonical = synthetic_canonicals[0][1] - print("[ELEMENTE] pure-transform: canonical aus Volume-only-Move " + print("[ELEMENTS] pure-transform: canonical aus Volume-only-Move " "(Source war wohl auf hidden Layer)") # Phase 3: alle bewegten Sources MUESSEN canonical erfuellen @@ -18050,11 +18050,11 @@ def _on_command_end(sender, e): pure_transform = None if abort_pure: - print("[ELEMENTE] no pure-transform: z-drag/scale/end-grip detected") + print("[ELEMENTS] no pure-transform: z-drag/scale/end-grip detected") elif orphan_opening: - print("[ELEMENTE] no pure-transform: opening moved without parent wall (cutout muss regen)") + print("[ELEMENTS] no pure-transform: opening moved without parent wall (cutout muss regen)") elif not all_consistent: - print("[ELEMENTE] no pure-transform: sources moved with different transforms") + print("[ELEMENTS] no pure-transform: sources moved with different transforms") elif canonical is not None: pure_transform = canonical @@ -18083,7 +18083,7 @@ def _on_command_end(sender, e): if not any(wid in moved_axis_ids for wid in members): continue if not all(wid in moved_axis_ids for wid in members): - print("[ELEMENTE] chain partial-move → abort pure-transform") + print("[ELEMENTS] chain partial-move → abort pure-transform") affected_chain_members.update(members) pure_transform = None else: @@ -18098,7 +18098,7 @@ def _on_command_end(sender, e): tz = pure_transform[2, 3] # Rotations-Anteil aus m00/m01 (Z-Rotation der 2x2 oberen Submatrix) rot_deg = _math.degrees(_math.atan2(pure_transform[1, 0], pure_transform[0, 0])) - print("[ELEMENTE] pure-transform: tx={:.3f} ty={:.3f} tz={:.3f} rot={:.1f}°".format( + print("[ELEMENTS] pure-transform: tx={:.3f} ty={:.3f} tz={:.3f} rot={:.1f}°".format( tx, ty, tz, rot_deg)) # Eltern→Kind-Cascade: nur bewegte Sources + deren Children folgen. @@ -18169,7 +18169,7 @@ def _on_command_end(sender, e): doc.Objects.Replace(obj.Id, new_geom) except Exception: pass except Exception as ex: - print("[ELEMENTE] pure-transform:", ex) + print("[ELEMENTS] pure-transform:", ex) finally: sc.sticky[_REGEN_BUSY] = _was_busy doc.Views.RedrawEnabled = prev_redraw_enabled @@ -18259,7 +18259,7 @@ def _on_command_end(sender, e): _migrate_openings_to_new_axis( m["id"], old_line, geom, old_op_positions) except Exception as ex: - print("[ELEMENTE] post-cmd migrate:", ex) + print("[ELEMENTS] post-cmd migrate:", ex) # Z-Drag detect + Brüstungs-Mitnahme. Constraint setzt # sticky-delta wenn Z geaendert; wir consumen es direkt. _apply_wand_z_drag_constraint(obj, m) @@ -18294,7 +18294,7 @@ def _on_command_end(sender, e): doc.Objects.Replace(op_obj.Id, rg.Point(rg.Point3d(pt.X, pt.Y, target_z))) except Exception as ex: - print("[ELEMENTE] post-cmd brueest pt-shift:", ex) + print("[ELEMENTS] post-cmd brueest pt-shift:", ex) affected_walls.add(m["id"]) elif t == "oeffnung_point": op_pos = old.get("pos") @@ -18319,7 +18319,7 @@ def _on_command_end(sender, e): if abs(new_len - old_len) > 1e-6: affected_walls.add(m["id"]) except Exception as ex: - print("[ELEMENTE] post-cmd source:", ex) + print("[ELEMENTS] post-cmd source:", ex) finally: sc.sticky[_REGEN_BUSY] = _was_busy sc.sticky["_dossier_skip_sync_regen"] = None @@ -18342,7 +18342,7 @@ def _on_command_end(sender, e): for wid in affected_walls: try: _regenerate_element(doc, wid) except Exception as ex: - print("[ELEMENTE] post-cmd regen:", ex) + print("[ELEMENTS] post-cmd regen:", ex) finally: sc.sticky["_dossier_regen_batch_active"] = False doc.Views.RedrawEnabled = prev_redraw_enabled @@ -18434,7 +18434,7 @@ def _install_listeners(bridge): "cmd_begin": _on_command_begin, "cmd_end": _on_command_end, } - print("[ELEMENTE] Listener active (Replace + Add + Delete + Select + Idle + Cmd)") + print("[ELEMENTS] Listener active (Replace + Add + Delete + Select + Idle + Cmd)") # Schnitt-Doppelklick-Handler global registrieren — idempotent via # sticky-Flag im schnitte-Modul, mehrfache Aufrufe bei Re-Loads # raeumen den alten Handler vorher weg. @@ -18442,7 +18442,7 @@ def _install_listeners(bridge): import schnitte schnitte.install_double_click_handler() except Exception as ex: - print("[ELEMENTE] schnitt dblclick install:", ex) + print("[ELEMENTS] schnitt dblclick install:", ex) # Wand-Endpoint-Grip-Overlay (Display-Conduit + Mouse-Handler) — # dicke klickbare Marker an den Achs-Endpunkten, auch wenn die # Referenzlinien-Layer ausgeblendet ist. @@ -18450,13 +18450,13 @@ def _install_listeners(bridge): import wand_grips wand_grips.install_handlers() except Exception as ex: - print("[ELEMENTE] wand_grips install:", ex) + print("[ELEMENTS] wand_grips install:", ex) # Treppen-Endpoint-Marker (visuell only — Drag laeuft via Partnership) try: import treppe_grips treppe_grips.install_handlers() except Exception as ex: - print("[ELEMENTE] treppe_grips install:", ex) + print("[ELEMENTS] treppe_grips install:", ex) # Schnittsymbol-Endpoint-Grips — analoges Overlay an den P1/P2 der # Schnittlinie. Ziehen updated linePts + regeneriert das Symbol + # re-aktiviert den Schnitt wenn aktiv. @@ -18464,27 +18464,27 @@ def _install_listeners(bridge): import schnitt_grips schnitt_grips.install_handlers() except Exception as ex: - print("[ELEMENTE] schnitt_grips install:", ex) + print("[ELEMENTS] schnitt_grips install:", ex) # Cluster-Volume Selection-Swap: Klick auf gemerged Wand-Brep selektiert # die naechste Cluster-Member-Achse (UX fuer Multi-Wand-Cluster). try: install_cluster_select_handler() except Exception as ex: - print("[ELEMENTE] cluster-select install:", ex) + print("[ELEMENTS] cluster-select install:", ex) # Generic Vertex-Dots fuer Curves (Polylinen, Rectangles etc) — # display-only, hilft beim visuellen Finden von Grip-Positionen. try: import curve_vertex_dots curve_vertex_dots.install_curve_vertex_dots() except Exception as ex: - print("[ELEMENTE] curve_vertex_dots install:", ex) + print("[ELEMENTS] curve_vertex_dots install:", ex) # Pre-Warm: native OpenNURBS-Libraries beim Plugin-Start laden um den # First-Call-Lag zu vermeiden (User-Meldung: beim ersten Wand-Verbinden # haengt das UI kurz, danach nicht mehr → native code wird lazy-loaded). try: _prewarm_native_libs() except Exception as ex: - print("[ELEMENTE] prewarm native:", ex) + print("[ELEMENTS] prewarm native:", ex) def _bridge_factory(): diff --git a/rhino/toolbar.py b/rhino/toolbar.py index 678ed2c..c5826d6 100644 --- a/rhino/toolbar.py +++ b/rhino/toolbar.py @@ -881,7 +881,7 @@ def _apply_window_layout_impl(name): [(c, m) for c, m, _ in api_candidates]) else: print("[TOOLBAR] No Rhino.UI API candidates (Mac Rhino " - "exposed das nicht statisch). Falling back to scripted commands.") + "does not expose this statically). 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 # zu mix von String/Tuple gefuehrt — hier sauber als Liste of Tuples.