diff --git a/lib/linesweep_circle.py b/lib/linesweep_circle.py index efdd40d..09bd138 100644 --- a/lib/linesweep_circle.py +++ b/lib/linesweep_circle.py @@ -36,6 +36,7 @@ for rack_id, idx, line in rack_segments: # === 3. Verbindungen suchen === verbindungen = [] +endpoint_pinned = [] # === A: Echte Schnittpunkte zwischen Linien finden === ''' Alle Segmente mit allen überprüfen, um echte SP zu finden''' @@ -49,7 +50,7 @@ for i, (rack_id1, idx1, line1) in enumerate(rack_segments): inter = line1.intersection(line2) if inter.geom_type == "Point": print(f"✅ Exakter Schnittpunkt {inter} zwischen {rack_id1}_{idx1} und {rack_id2}_{idx2}") - verbindungen.append((rack_id1, rack_id2, inter)) + verbindungen.append((rack_id1, idx1, rack_id2, idx2, inter)) # === B: Näherungsweise Verbindung durch Toleranz-Kreise === @@ -78,10 +79,36 @@ for rack_id, idx, line in rack_segments: else: nearest = nearest_points(pt, contact)[1] print(f" 🟡 Kreisberührung bei {nearest} mit {rack_id}_{idx}") - verbindungen.append((rack_id, other_rack_id, nearest)) + verbindungen.append((rack_id, idx, other_rack_id, other_idx, nearest)) + + # Füge verschobenen Endpunkt zu Liste hinzu. [Punkt gehört zu Rack_Nr, alter Punkt, neuer Punkt, gepinnt an Target_Rack] + endpoint_pinned.append((other_rack_id, other_idx, pt, nearest, rack_id)) + break radius += tol_step +# === Endpunkte aktualisieren === +# Dict erstellen, dass mit dem Key "Rack_id - index" dahinter die Koordinaten von Anfang und Endpunkt speichert +d_racks_segments = dict() + +for rack_id, idx, linestring in rack_segments: + key = f"{rack_id}-{idx}" + d_racks_segments[key] = [Point(linestring.coords[0]), Point(linestring.coords[1])] #Alle Racks in ihrer eingelesenen Form zum Dict hinzufügen + +for rack_id, idx, old_pt, new_pt, taget_rack in endpoint_pinned: #Durch verschobene Endpunkte laufen... + key = f"{rack_id}-{idx}" + coords = d_racks_segments.get(key) + + if coords: #...und bei Übereinstimmung von Start oder Endkoordinate die ursprüngliche (eingelesene) mit der gepinnten überschreiben + # Vergleich mit Startpunkt + if Point(coords[0]).equals(old_pt): + coords[0] = Point(new_pt.x, new_pt.y) #.x bzw .y übergibt x bzw y Koordinate von Objekt POINT + # Vergleich mit Endpunkt + elif Point(coords[1]).equals(old_pt): + coords[1] = Point(new_pt.x, new_pt.y) + + d_racks_segments[key] = coords # aktualisieren + # === Ausgabe-Verbindungen === print("\n=== Gefundene Verbindungen ===") for v in verbindungen: