From 17ff7a8017253188179b335850896a0fec5621a4 Mon Sep 17 00:00:00 2001 From: karim Date: Sun, 31 May 2026 12:29:54 +0200 Subject: [PATCH] T-Junction-Toleranz auf 1cm gelockert + dJoin-Safety: keine _Join auf Achsen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit T-Junction-Detection (_detect_t_junction): pos_tol von 1mm auf 1cm erhoeht. User-Feedback: bei manuellem Snap kann's leicht ein paar mm danebengehen, 1mm war zu eng. 1cm ist immer noch tight genug fuer Architektur-Workflow. smart_join (dJoin): Safety-Check vor _Join-Fallback. Wenn IRGENDEINE wand_axis in der Selection ist (auch zusaetzlich zu anderen Curves), wird NICHT auf Standard-_Join gefallen — sonst kleistert _Join mehrere Wand- Achsen zu einer Polyline zusammen, der Listener detektiert das als "Source-Duplikat" und vergibt neue Wall-IDs → alle Meta-Verknuepfungen brechen. Stattdessen: Print-Meldung dass T-Join/L-Join nicht gegriffen hat. User muss GENAU 2 Waende selektieren die verbunden werden sollen. --- rhino/aliases/cmd/smart_join.py | 13 +++++++++++++ rhino/elemente.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/rhino/aliases/cmd/smart_join.py b/rhino/aliases/cmd/smart_join.py index 8bbcb33..67c9ff1 100644 --- a/rhino/aliases/cmd/smart_join.py +++ b/rhino/aliases/cmd/smart_join.py @@ -258,6 +258,19 @@ def _run(): except Exception as ex: print("[SMART-JOIN] L-Join error:", ex) + # Safety: wenn Wand-Achsen selektiert sind, NIE auf Standard-_Join fallen + # — 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" + for obj in sel) + if has_wand_axis: + print("[SMART-JOIN] Wand-Achsen selektiert: T-Join/L-Join hat nicht " + "gegriffen (zu viele Selektionen oder zu weit weg). Bitte " + "GENAU 2 Waende selektieren die sich verbinden sollen, dann " + "erneut Cmd+J.") + return + # Curves nach Closed/Open trennen closed_objs = [] has_non_closed = False diff --git a/rhino/elemente.py b/rhino/elemente.py index 0338344..542a33d 100644 --- a/rhino/elemente.py +++ b/rhino/elemente.py @@ -2180,7 +2180,7 @@ def _miter_dir(out_a, out_b): def _detect_t_junction(doc, geschoss_id, wall_id, endpoint, - pos_tol=0.001, end_tol=0.05, exclude_ids=None): + pos_tol=0.010, end_tol=0.05, exclude_ids=None): """Sucht ob `endpoint` auf der INNEREN Achse einer anderen Wand liegt (T-Stoss). Endpunkte der anderen Wand (Eckverbindung) werden bewusst ausgeschlossen — die werden bereits durch die Corner-Logik abgedeckt.