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:
@@ -142,7 +142,9 @@ def _t_join_attempt(doc, sel):
|
|||||||
if not (isinstance(c1, rg.Curve) and isinstance(c2, rg.Curve)):
|
if not (isinstance(c1, rg.Curve) and isinstance(c2, rg.Curve)):
|
||||||
return False
|
return False
|
||||||
if c1.IsClosed or c2.IsClosed: 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
|
end_tol = 0.05 # 5cm: wenn closest-point nahe Endpunkt → eigentlich L
|
||||||
candidates = []
|
candidates = []
|
||||||
debug_rows = []
|
debug_rows = []
|
||||||
@@ -250,6 +252,16 @@ def _run():
|
|||||||
sel = list(doc.Objects.GetSelectedObjects(False, False))
|
sel = list(doc.Objects.GetSelectedObjects(False, False))
|
||||||
if not sel:
|
if not sel:
|
||||||
Rhino.RhinoApp.RunScript("_Join", False); return
|
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.
|
# T-Join: Endpunkt der einen Curve trifft mitten auf die andere → snap.
|
||||||
# L-Join: beide Endpunkte werden zum Schnittpunkt der verlaengerten Linien
|
# L-Join: beide Endpunkte werden zum Schnittpunkt der verlaengerten Linien
|
||||||
|
|||||||
Reference in New Issue
Block a user