ANpassung der Ausgabe todraw.json, sodass Fehler in Excel -Ausgabe besser ausgegeben werden können. 2 neue Worksheets in Excel Ausgabe angefügt(Auflistung von Fehlgeschlagener Anbindung + Auflistung von Routingfelern mit Grund
This commit is contained in:
+56
-10
@@ -29,12 +29,24 @@ class Polyline:
|
||||
def to_tuple(self):
|
||||
ret = list()
|
||||
for p in self.coords:
|
||||
ret.append( (p.x,p.y) )
|
||||
ret.append( (p.x, p.y) )
|
||||
return ret
|
||||
|
||||
|
||||
@dataclass
|
||||
class Error_Connection:
|
||||
name: str
|
||||
coords: Point
|
||||
|
||||
@dataclass
|
||||
class Error_Routing:
|
||||
unterverteiler: str
|
||||
sensoren: List[str]
|
||||
@dataclass
|
||||
class Polylines:
|
||||
kabel: List[Polyline]
|
||||
errors_routing: List[Error_Routing]
|
||||
errors_sensors: List[Error_Connection]
|
||||
errors_dists: List[Error_Connection]
|
||||
|
||||
|
||||
def add_polyline(msp, points:Polyline, dxf_attribs):
|
||||
@@ -73,9 +85,10 @@ def copy_layers_into_new(originaldxf, outpath, plines):
|
||||
|
||||
quelle = ezdxf.readfile(originaldxf)
|
||||
ziel = ezdxf.new('R2018', setup=True)
|
||||
|
||||
|
||||
create_cables(plines, ziel)
|
||||
copy_layers_into_dxf_by_filter(quelle, ziel)
|
||||
create_cables(plines, quelle)
|
||||
|
||||
|
||||
ziel.saveas(out_path)
|
||||
print("done")
|
||||
@@ -134,7 +147,40 @@ def write_excel_from_json(plines:Polylines, outpath:str):
|
||||
|
||||
for rlength in sorted(length_summary):
|
||||
ws2.append([int(rlength), length_summary[rlength]])
|
||||
|
||||
# Worksheet 3 - Nicht an Racks gekoppeltes Equipment
|
||||
ws3 = wb.create_sheet("Equipment nicht angebunden")
|
||||
ws3.append(["Typ", "Name", "x", "y"])
|
||||
for error in plines.errors_sensors:
|
||||
ws3.append(["Sensor / Aktor", error.name, error.coords.x, error.coords.y])
|
||||
|
||||
for error in plines.errors_dists:
|
||||
ws3.append(["Unterverteiler", error.name, error.coords.x, error.coords.y])
|
||||
|
||||
# Worksheet 4 - Fehlgeschlagenes Routing
|
||||
ws4 = wb.create_sheet("Routingfehler")
|
||||
ws4.append(["Unterverteiler", "Sensor- / Aktorname", "Grund"])
|
||||
|
||||
nicht_angebunden = set(e.name for e in plines.errors_sensors + plines.errors_dists)
|
||||
|
||||
for routing_error in plines.errors_routing:
|
||||
uv = routing_error.unterverteiler
|
||||
uv_nicht_angebunden = uv in nicht_angebunden
|
||||
for sensor in routing_error.sensoren:
|
||||
sensor_nicht_angebunden = sensor in nicht_angebunden
|
||||
|
||||
if sensor_nicht_angebunden and uv_nicht_angebunden:
|
||||
grund = "Sensor und Unterverteiler nicht angebunden"
|
||||
elif sensor_nicht_angebunden:
|
||||
grund = "Sensor / Aktor nicht angebunden"
|
||||
elif uv_nicht_angebunden:
|
||||
grund = "Unterverteiler nicht angebunden"
|
||||
else:
|
||||
grund = "Fehlgeschlagenes Routing trotz Anbindung"
|
||||
|
||||
ws4.append([uv, sensor, grund])
|
||||
|
||||
|
||||
wb.save(outpath)
|
||||
|
||||
|
||||
@@ -291,8 +337,8 @@ def copy_layers_into_dxf_by_filter(dxf_source: ezdxf.document.Drawing, dxf_targe
|
||||
for ins in msp_source.query("INSERT"):
|
||||
new_ins = ins.copy()
|
||||
msp_target.add_entity(new_ins)
|
||||
|
||||
'''
|
||||
|
||||
|
||||
# 4. Filter-Layernamen bestimmen
|
||||
for layername in layernames:
|
||||
@@ -313,13 +359,13 @@ def copy_layers_into_dxf_by_filter(dxf_source: ezdxf.document.Drawing, dxf_targe
|
||||
for entity in entities:
|
||||
msp_target.add_entity(entity.copy())
|
||||
|
||||
texts_source = collect_text_entities(msp_source)
|
||||
texts_target = collect_text_entities(msp_target)
|
||||
# texts_source = collect_text_entities(msp_source)
|
||||
# texts_target = collect_text_entities(msp_target)
|
||||
|
||||
compare_texts(texts_source, texts_target)
|
||||
# compare_texts(texts_source, texts_target)
|
||||
|
||||
used_block_names = set(insert.dxf.name for insert in dxf_source.modelspace().query("INSERT"))
|
||||
compare_blocks(dxf_source, dxf_target, used_block_names)
|
||||
# used_block_names = set(insert.dxf.name for insert in dxf_source.modelspace().query("INSERT"))
|
||||
# compare_blocks(dxf_source, dxf_target, used_block_names)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
+13
-4
@@ -483,13 +483,13 @@ class Anlage():
|
||||
Eingabe: Dict des Equipments ({'Name': Point}), Dict der Aufpunkte von Sensoren o. Dists (zu Beginn leer)
|
||||
Rückgabe: Liste der nicht mit Racks verbundenen Geräte (z.B. Entfernung zu groß)
|
||||
'''
|
||||
errors = []
|
||||
errors = list()
|
||||
for name, pos in equipment.items():
|
||||
try:
|
||||
onpoint, rackname = self.find_nearest_rack_from_point_STR_bbox(self._tol_connect, pos)
|
||||
onpoints[name] = (onpoint, rackname)
|
||||
except LookupError:
|
||||
errors.append((name, (pos.x, pos.y))) # Name des fehlgeschlagenenen und Position als Koodinaten zurückgeben
|
||||
errors.append({"name": name, "coords": {"x":pos.x, "y":pos.y}}) # Name des fehlgeschlagenenen und Position als Koodinaten zurückgeben
|
||||
continue
|
||||
self.add_point_to_rack(onpoint, rackname)
|
||||
|
||||
@@ -586,12 +586,15 @@ class Anlage():
|
||||
def create_cable_paths(self, G) -> dict:
|
||||
pfade = dict()
|
||||
pfade["kabel"] = list()
|
||||
pfade["errors_routing"] = list() # Fehler Liste für fehlgeschlagene Kabelverbindungen
|
||||
pfade["errors_routing"] = dict()
|
||||
routing_errors = dict() # Fehler Liste für fehlgeschlagene Kabelverbindungen
|
||||
for sname, dname in self._sensor2dist.items():
|
||||
try:
|
||||
pfad_nodes, pfad_length = self.create_cable_path(G, sname, dname)
|
||||
except:
|
||||
pfade["errors_routing"].append((sname, dname))
|
||||
if dname not in routing_errors:
|
||||
routing_errors[dname] = list()
|
||||
routing_errors[dname].append(sname)
|
||||
continue
|
||||
pfad_coords = self._nodeids.get_points(pfad_nodes)
|
||||
|
||||
@@ -609,6 +612,12 @@ class Anlage():
|
||||
|
||||
pfade["kabel"].append(ld)
|
||||
|
||||
|
||||
lOfDistErrors = list() # sammeln wo keine Verbindung zwischen Dist und Senor möglich war
|
||||
for dname,lofSensornamen in routing_errors.items():
|
||||
lOfDistErrors.append({"unterverteiler":dname, "sensoren":lofSensornamen})
|
||||
pfade["errors_routing"] = lOfDistErrors
|
||||
|
||||
return pfade
|
||||
|
||||
def show_node_ids(self):
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ def create_plant(racks:dict, sensors:dict, distributors:dict, mapping:dict, tunn
|
||||
paths['errors_sensors'] = errors_sensors # Sensoren die nicht zu Racks verbunden werden konnten
|
||||
paths['errors_dists'] = errors_dists # Distributoren, die nicht zu Racks verbunden werden konnten
|
||||
paths['errors_tunnels'] = errors_tunnels # Tunnel, die nicht zu Racks verbunden werden konnten
|
||||
# paths['errors_routing'] # Knoten des Graphen, die nicht verbunden werden konnten (Ausgabe wird in create_vable_paths() erstellt)
|
||||
# paths['errors_routing'] # Knoten des Graphen, die nicht verbunden werden konnten (Ausgabe wird in create_cable_paths() erstellt)
|
||||
|
||||
return paths
|
||||
|
||||
|
||||
Reference in New Issue
Block a user