diff --git a/rhino/aliases/cmd/smart_join.py b/rhino/aliases/cmd/smart_join.py index 67c9ff1..0c7aac3 100644 --- a/rhino/aliases/cmd/smart_join.py +++ b/rhino/aliases/cmd/smart_join.py @@ -94,11 +94,11 @@ def _walls_and_curves_from_sel(doc, sel): # Pre-Index wand_axis by wall_id fuer schnelles Lookup axis_by_id = {} for o in doc.Objects: - if o.Attributes.GetUserString("dossier_type") == "wand_axis": + if o.Attributes.GetUserString("dossier_element_type") == "wand_axis": wid = o.Attributes.GetUserString("dossier_element_id") or "" if wid: axis_by_id[wid] = o for obj in sel: - t = obj.Attributes.GetUserString("dossier_type") or "" + t = obj.Attributes.GetUserString("dossier_element_type") or "" wid = obj.Attributes.GetUserString("dossier_element_id") or "" if t == "wand_axis" and wid and wid not in seen_walls: axes.append(obj); seen_walls.add(wid) @@ -243,11 +243,30 @@ def _run(): # L-Join: beide Endpunkte werden zum Schnittpunkt der verlaengerten Linien # gezogen. T zuerst probieren (= spezifischer), dann L als Fallback. if len(sel) >= 2: + # Diagnostic: was sieht smart_join in der Selection? + axes_dbg, generic_dbg = _walls_and_curves_from_sel(doc, sel) + type_counts = {} + for o in sel: + try: + t = o.Attributes.GetUserString("dossier_element_type") or "" + wid_raw = o.Attributes.GetUserString("dossier_element_id") or "" + geom_kind = type(o.Geometry).__name__ + key = "{}|{}|wid={}".format(t, geom_kind, + "yes" if wid_raw else "no") + type_counts[key] = type_counts.get(key, 0) + 1 + except Exception: pass + print("[SMART-JOIN] sel-detect: {} Wand-Achsen, {} generische Curves " + "(sel total: {})".format(len(axes_dbg), len(generic_dbg), len(sel))) + for k, n in type_counts.items(): + print("[SMART-JOIN] {} × {}".format(n, k)) try: if _t_join_attempt(doc, sel): doc.Views.Redraw() print("[SMART-JOIN] T-Join: Endpunkt auf Achse gesnappt") return + else: + print("[SMART-JOIN] T-Join: kein passender Kandidat (zu weit " + "weg oder am Endpunkt → L-Join Territory)") except Exception as ex: print("[SMART-JOIN] T-Join error:", ex) try: @@ -255,6 +274,9 @@ def _run(): doc.Views.Redraw() print("[SMART-JOIN] L-Join: 2 Curves zu L verbunden") return + else: + print("[SMART-JOIN] L-Join: konnte nicht ausfuehren (parallel, " + "schon verbunden, oder Geometrie ungueltig)") except Exception as ex: print("[SMART-JOIN] L-Join error:", ex) @@ -262,7 +284,7 @@ def _run(): # — das wuerde mehrere Achsen zu einer Curve zusammenkleben und die Wand- # Verknuepfung zerstoeren (Source-Duplikat-Listener kapert die alte ID). has_wand_axis = any( - obj.Attributes.GetUserString("dossier_type") == "wand_axis" + obj.Attributes.GetUserString("dossier_element_type") == "wand_axis" for obj in sel) if has_wand_axis: print("[SMART-JOIN] Wand-Achsen selektiert: T-Join/L-Join hat nicht "