T-Join Tolerance auf 1m gelockert + Selection-Hint

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.
This commit is contained in:
2026-05-31 13:42:20 +02:00
parent c81d2c0c43
commit e50134ce32
+13 -1
View File
@@ -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