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:
2025-06-04 08:54:18 +02:00
parent 86d209b428
commit 4b1002ff7e
3 changed files with 70 additions and 15 deletions
+56 -10
View File
@@ -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__':