Alle Programme so weit angepasst, dass Programmkette läuft.
This commit is contained in:
+29
-17
@@ -6,7 +6,7 @@ from collections import defaultdict
|
||||
import bisect
|
||||
import networkx as nx
|
||||
import matplotlib.pyplot as plt
|
||||
from itertools import pairwise, combinations
|
||||
from itertools import pairwise, combinations, permutations
|
||||
import re
|
||||
|
||||
class PointSorter:
|
||||
@@ -108,10 +108,9 @@ class NodeIDs():
|
||||
def show(self):
|
||||
return self._id2cord
|
||||
class RackIDs():
|
||||
def __init__(self, racks=dict(), tol_snap = 1):
|
||||
def __init__(self, tol_snap = 200):
|
||||
self._point2rack = dict()
|
||||
self._rack2begend = dict()
|
||||
self.add_racks(racks)
|
||||
# Toleranzen zur Rack anbindung aneinander (Rack Snap)
|
||||
self._tol_snap = tol_snap
|
||||
|
||||
@@ -192,15 +191,21 @@ class RackIDs():
|
||||
self.add_point_to_rack(inter, rnames[l1])
|
||||
self.add_point_to_rack(inter, rnames[l2])
|
||||
|
||||
for (l1, l2) in combinations(allracks,2):
|
||||
for (l1, l2) in permutations(allracks,2):
|
||||
first = Point(l2.coords[0])
|
||||
last = Point(l2.coords[1])
|
||||
if l1.distance(first) <= self._tol_snap:
|
||||
snap_point = l1.interpolate(l1.project(first))
|
||||
self.add_point_to_rack(snap_point, rnames[l1])
|
||||
# Füge zusätzliches Rack als Verbindung zwischen Endpunkt und snap_point ein
|
||||
connrackname = f"c-{rnames[l2]}"
|
||||
self.add_rack(first, snap_point, connrackname)
|
||||
if l1.distance(last) <= self._tol_snap:
|
||||
snap_point = l1.interpolate(l1.project(last))
|
||||
self.add_point_to_rack(snap_point, rnames[l1])
|
||||
# Füge zusätzliches Rack als Verbindung zwischen Endpunkt und snap_point ein
|
||||
connrackname = f"c-{rnames[l2]}"
|
||||
self.add_rack(last, snap_point, connrackname)
|
||||
|
||||
def rack_is_horizontal(self, name):
|
||||
[pa, pe] = self._rack2begend[name]
|
||||
@@ -260,9 +265,9 @@ class Anlage():
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, tol_snap=200, snap_step=10, tol_connect=2, tol_connect_step=0.5):
|
||||
def __init__(self, tol_snap=200, snap_step=10, tol_connect=1000, tol_connect_step=50):
|
||||
# Container für alle Racks
|
||||
self._racks = RackIDs()
|
||||
self._racks = RackIDs(tol_snap=tol_snap)
|
||||
# zuordnung zwischen KnotenID und Punkt
|
||||
self._nodeids = NodeIDs()
|
||||
# Container für alle Sensoren
|
||||
@@ -282,7 +287,6 @@ class Anlage():
|
||||
# Infos zum zeichnen des Graphen
|
||||
self._node_positions = dict()
|
||||
|
||||
|
||||
def set_racks(self, racks:dict[str, list[Point]]):
|
||||
r"""
|
||||
Fügt racks aus eingelsener Datei zu Anlage hinzu.
|
||||
@@ -348,7 +352,7 @@ class Anlage():
|
||||
def connect_sensors_to_racks(self):
|
||||
for sname, pos in self._sensors.items():
|
||||
rack_borders = self._racks.get_racks_borders()
|
||||
onpoint, rack_name = self.find_nearest_rack_from_point(2, 0.5, pos, rack_borders)
|
||||
onpoint, rack_name = self.find_nearest_rack_from_point(self._tol_connect, self._connect_step, pos, rack_borders)
|
||||
self._sensor_onpoints[sname] = (onpoint, rack_name)
|
||||
self.add_point_to_rack(onpoint, rack_name)
|
||||
# Füge "virtuelle Racks" von Sensor zu Aufpunkt von Sensor auf Rack hinzu.
|
||||
@@ -576,12 +580,17 @@ class Anlage():
|
||||
|
||||
def create_cable_paths(self, G):
|
||||
pfade = dict()
|
||||
pfade["kabel"] = list()
|
||||
for sname, dname in self._sensor2dist.items():
|
||||
pfad_nodes, pfad_length = self.create_cable_path(G, sname, dname)
|
||||
pfad_coords = self._nodeids.get_points(pfad_nodes)
|
||||
pfade[f"{dname}-{sname}"] = {"path_nodes": pfad_nodes,
|
||||
"path_coords": pfad_coords,
|
||||
"path_length": pfad_length}
|
||||
tuplecoords = [(p.x, p.y) for p in pfad_coords]
|
||||
ld = dict()
|
||||
ld['id'] = f"{dname}-{sname}"
|
||||
ld["coords"]= [{"x":round(p.x,1), "y":round(p.y,1)} for p in pfad_coords]
|
||||
ld["length"]= round(pfad_length,1)
|
||||
ld["nodes"]=pfad_nodes
|
||||
pfade["kabel"].append(ld)
|
||||
|
||||
return pfade
|
||||
|
||||
@@ -645,16 +654,17 @@ class TestLinesweep(unittest.TestCase):
|
||||
racks_data = {
|
||||
'Rack_1': [Point(0, 0), Point(0, 10)],
|
||||
'Rack_2': [Point(1, 5), Point(5, 5)],
|
||||
'Rack_3': [Point(1.5, 7.5), Point(5,7.5)]
|
||||
'Rack_3': [Point(1.5, 7.5), Point(5, 7.5)]
|
||||
}
|
||||
|
||||
# Initialisiere Racks
|
||||
rack = RackIDs()
|
||||
rack = RackIDs(tol_snap=1)
|
||||
# Füge Racks aus gegebenen Daten hinzu und teile Rack_1 bestehend aus 3 Punkten in 2 Racks auf
|
||||
rack.add_racks(racks_data)
|
||||
# Verknüpfe Racks mit echten Schnittpunkten und füge Schnittpunkte (exakt & beinahe) zu jeweiligem Rack hinzu
|
||||
rack.join_racks()
|
||||
|
||||
#Rack 2 wird verlängert auf SP mit Rack 1. Rack 3 ausserhalb der Toleranz
|
||||
self.assertEqual(rack.get_points_from_rack("Rack_1"), [Point(0, 0), Point(0, 5), Point (0, 10)])
|
||||
|
||||
|
||||
@@ -666,7 +676,8 @@ class TestLinesweep(unittest.TestCase):
|
||||
'Rack_2-1': [Point(0, 10), Point(5, 10)]}
|
||||
|
||||
|
||||
point2rack = RackIDs(res_rack_seg)
|
||||
point2rack = RackIDs()
|
||||
point2rack.add_racks(res_rack_seg)
|
||||
|
||||
self.assertEqual(point2rack.get_racks_from_point(Point(1, 0)), ["Rack_1-0", "Rack_2-0"])
|
||||
self.assertEqual(point2rack.get_racks_from_point(Point(5, 6)), ["Rack_1-0"])
|
||||
@@ -681,7 +692,8 @@ class TestLinesweep(unittest.TestCase):
|
||||
'Rack_2-1': [Point(0, 10), Point(5, 10)]}
|
||||
|
||||
|
||||
point2rack = RackIDs(res_rack_seg)
|
||||
point2rack = RackIDs()
|
||||
point2rack.add_racks(res_rack_seg)
|
||||
point2rack.add_point_to_rack(Point(1,4), "Rack_2-0")
|
||||
|
||||
self.assertEqual(point2rack.get_points_from_rack("Rack_2-0"), [Point(1, 0), Point(1,4), Point(1, 8)])
|
||||
@@ -757,7 +769,7 @@ class TestLinesweep(unittest.TestCase):
|
||||
|
||||
rack_segs = {'Rack_1': [Point(0, 0), Point(0, 10)],
|
||||
'Rack_2': [Point(10, -2), Point(10, 5)],
|
||||
'Rack_2': [Point(0, 3), Point(10, 3)]}
|
||||
'Rack_3': [Point(0, 3), Point(10, 3)]}
|
||||
|
||||
sensors = {'Sens_1': Point(1, 1),
|
||||
'Sens_2': Point(2, 4),
|
||||
@@ -770,7 +782,7 @@ class TestLinesweep(unittest.TestCase):
|
||||
'Dist_2': ['Sens_3']}
|
||||
|
||||
# Erstelle Anlage
|
||||
an = Anlage()
|
||||
an = Anlage(tol_snap=1)
|
||||
# Füge racks aus Daten hinzu
|
||||
an.set_racks(rack_segs)
|
||||
# Verbinde Racks miteinander (ggf. verlängere ungenaue Racks)
|
||||
|
||||
Reference in New Issue
Block a user