SCL-Geruest: Stationen (SYSn) als Materialeingang; kurze TRO-Verbindungen nicht mehr verwerfen
scl_skeleton.py brach mit KeyError ab, sobald der TRO-Fluss Stationen (SYSn) enthielt. Stationen bekommen jetzt keine REGION/Instanz, der von einer Station gespeiste TRO ist der Anfang der Reihenfolge, in den Staubereich-Kommentaren sind sie als Station markiert. tro_annotate.py liess Verbindungen unter 2,2 Markergroessen still weg (HundM05 TRO03->TRO04, 500 mm) - sie fehlten dann in tro_extract.py und in der SCL. Kurze Verbindungen werden jetzt Mitte-zu-Mitte gezeichnet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7b98c8b8d4
commit
e2f1a558a2
+14
-4
@@ -680,23 +680,33 @@ def draw_connections(
|
||||
x1, y1 = placed[src]
|
||||
x2, y2 = placed[dst]
|
||||
length = math.dist((x1, y1), (x2, y2))
|
||||
if length <= 2 * marker * 1.1:
|
||||
if length < 1e-6:
|
||||
continue
|
||||
ux, uy = (x2 - x1) / length, (y2 - y1) / length
|
||||
# An beiden Enden um den Marker kuerzen, damit der Pfeil ihn nicht
|
||||
# deckt; das Stationsende ist nur eine Beschriftung, dort weniger.
|
||||
kurz_a = marker * (0.3 if src in stationen else 1.1)
|
||||
kurz_b = marker * (0.3 if dst in stationen else 1.1)
|
||||
# Zu kurz fuer einen gekuerzten Pfeil (Marker liegen dicht beieinander,
|
||||
# z.B. HundM05 TRO03->TRO04 mit 500 mm): NICHT weglassen - sonst fehlt
|
||||
# die Verbindung in tro_extract.py und damit in der SCL. Stattdessen
|
||||
# Mitte-zu-Mitte ohne Kuerzung zeichnen.
|
||||
kurz = length <= kurz_a + kurz_b + head
|
||||
if kurz:
|
||||
kurz_a = kurz_b = 0.0
|
||||
sx, sy = x1 + ux * kurz_a, y1 + uy * kurz_a
|
||||
ex, ey = x2 - ux * kurz_b, y2 - uy * kurz_b
|
||||
shaft = msp.add_lwpolyline([(sx, sy), (ex, ey)],
|
||||
dxfattribs={"layer": layer})
|
||||
tag(shaft, f"{src}->{dst}")
|
||||
# Pfeilspitze als gefuellte Flaeche
|
||||
bx, by = ex - ux * head, ey - uy * head
|
||||
# Pfeilspitze als gefuellte Flaeche (bei kurzer Verbindung in der Mitte,
|
||||
# damit sie nicht im Zielmarker verschwindet)
|
||||
hx, hy = ((x1 + x2) / 2 + ux * head / 2, (y1 + y2) / 2 + uy * head / 2) \
|
||||
if kurz else (ex, ey)
|
||||
bx, by = hx - ux * head, hy - uy * head
|
||||
px, py = -uy * head * 0.38, ux * head * 0.38
|
||||
point = msp.add_solid(
|
||||
[(ex, ey), (bx + px, by + py), (bx - px, by - py)],
|
||||
[(hx, hy), (bx + px, by + py), (bx - px, by - py)],
|
||||
dxfattribs={"layer": layer},
|
||||
)
|
||||
tag(point, f"{src}->{dst}")
|
||||
|
||||
Reference in New Issue
Block a user