From e50134ce3217cdf1e5563ec239721e2b404fb798 Mon Sep 17 00:00:00 2001 From: karim Date: Sun, 31 May 2026 13:42:20 +0200 Subject: [PATCH] T-Join Tolerance auf 1m gelockert + Selection-Hint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-Test: Bei T-Konfig waren Wand-Achsen 55cm auseinander (vermutlich auf Outline statt Axis gesnappt). Mit 20cm tol fiel T-Join durch → L-Join machte Tangent-Schnittpunkt (= L-Form falsch fuer T-Intent). Fix: T-Join Snap-Radius von 20cm auf 1m. Generous genug fuer typische Drift-Faelle (Outline-Snap statt Axis-Snap, ungefaehre Platzierung etc.), aber tight genug damit absichtliche Lücken (>1m) nicht versehentlich zugesnapped werden. Plus: Hint wenn < 2 Wand-Achsen selektiert → User weiss explizit dass GENAU 2 Wand selektiert sein muss. --- rhino/aliases/cmd/smart_join.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/rhino/aliases/cmd/smart_join.py b/rhino/aliases/cmd/smart_join.py index 1bcb3b7..d1b8ed0 100644 --- a/rhino/aliases/cmd/smart_join.py +++ b/rhino/aliases/cmd/smart_join.py @@ -142,7 +142,9 @@ def _t_join_attempt(doc, sel): if not (isinstance(c1, rg.Curve) and isinstance(c2, rg.Curve)): return False if c1.IsClosed or c2.IsClosed: return False - tol_snap = 0.20 # 20 cm Snap-Radius fuer T-Verbindung + tol_snap = 1.00 # 1 m Snap-Radius fuer T-Verbindung — generous damit + # auch grosse Drift (z.B. wenn User auf Outline statt + # Axis gesnappt hat = 30cm Wand-dicke) gefangen wird end_tol = 0.05 # 5cm: wenn closest-point nahe Endpunkt → eigentlich L candidates = [] debug_rows = [] @@ -250,6 +252,16 @@ def _run(): sel = list(doc.Objects.GetSelectedObjects(False, False)) if not sel: Rhino.RhinoApp.RunScript("_Join", False); return + # Hint wenn zu wenig Wand-Objekte selektiert + n_wand_axes = sum(1 for o in sel + if (o.Attributes.GetUserString("dossier_element_type") + or "") == "wand_axis") + if n_wand_axes < 2 and any( + (o.Attributes.GetUserString("dossier_element_type") or "") + .startswith("wand_") for o in sel): + print("[SMART-JOIN] nur {} Wand-Achse(n) selektiert — fuer T/L-Join " + "GENAU 2 Waende selektieren (Click Wand + Shift+Click 2. Wand)." + .format(n_wand_axes)) # T-Join: Endpunkt der einen Curve trifft mitten auf die andere → snap. # L-Join: beide Endpunkte werden zum Schnittpunkt der verlaengerten Linien