Compare commits
2 Commits
affc98d907
...
7c2e171f7d
| Author | SHA1 | Date | |
|---|---|---|---|
| 7c2e171f7d | |||
| 8389164e5d |
+19
-3
@@ -2,7 +2,7 @@ import argparse
|
|||||||
import ezdxf
|
import ezdxf
|
||||||
import json
|
import json
|
||||||
import os.path
|
import os.path
|
||||||
from dataclasses import dataclass, asdict, fields
|
from dataclasses import dataclass, asdict, field
|
||||||
from dacite import from_dict
|
from dacite import from_dict
|
||||||
from typing import List, Dict
|
from typing import List, Dict
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -52,6 +52,7 @@ class Polylines:
|
|||||||
errors_dists_not_in_layout: List[str]
|
errors_dists_not_in_layout: List[str]
|
||||||
errors_sensors_not_in_layout: List[str]
|
errors_sensors_not_in_layout: List[str]
|
||||||
errors_missing_attributes: Dict[str, str]
|
errors_missing_attributes: Dict[str, str]
|
||||||
|
rack_lengths: Dict[str, float] = field(default_factory = dict)
|
||||||
|
|
||||||
|
|
||||||
def add_polyline(msp, points:Polyline, dxf_attribs):
|
def add_polyline(msp, points:Polyline, dxf_attribs):
|
||||||
@@ -283,7 +284,7 @@ def mark_missings(all_artnrs):
|
|||||||
|
|
||||||
def write_excel_from_json(plines: Polylines, sens2cable: dict, outpath: str, with_bom=True):
|
def write_excel_from_json(plines: Polylines, sens2cable: dict, outpath: str, with_bom=True):
|
||||||
"""
|
"""
|
||||||
Orchestriert die Erstellung der Excel-Reports (Kabelübersicht und Stückliste).
|
Steuert die Erstellung der Excel-Reports (Kabelübersicht und Stückliste).
|
||||||
"""
|
"""
|
||||||
# 1. Daten aggregieren und für die Reports vorbereiten
|
# 1. Daten aggregieren und für die Reports vorbereiten
|
||||||
processed_data = _process_cable_data(plines, sens2cable)
|
processed_data = _process_cable_data(plines, sens2cable)
|
||||||
@@ -293,8 +294,9 @@ def write_excel_from_json(plines: Polylines, sens2cable: dict, outpath: str, wit
|
|||||||
|
|
||||||
_create_cable_list_sheet(wb_main.active, plines, sens2cable, bezeichner_cfg)
|
_create_cable_list_sheet(wb_main.active, plines, sens2cable, bezeichner_cfg)
|
||||||
_create_cable_summary_sheet(wb_main.create_sheet(), processed_data)
|
_create_cable_summary_sheet(wb_main.create_sheet(), processed_data)
|
||||||
|
_create_rack_lengths_sheet(wb_main.create_sheet(), plines)
|
||||||
_create_error_sheets(wb_main, plines)
|
_create_error_sheets(wb_main, plines)
|
||||||
|
|
||||||
wb_main.save(outpath)
|
wb_main.save(outpath)
|
||||||
print("Cable-Summary exported to Excel file")
|
print("Cable-Summary exported to Excel file")
|
||||||
|
|
||||||
@@ -402,6 +404,20 @@ def _create_cable_summary_sheet(ws, processed_data):
|
|||||||
length_summary.get(artnr, "")
|
length_summary.get(artnr, "")
|
||||||
])
|
])
|
||||||
|
|
||||||
|
def _create_rack_lengths_sheet(ws, plines):
|
||||||
|
"""Erstellt das Arbeitsblatt 'Rack-Lengths'."""
|
||||||
|
ws.title = "Rack-Lengths"
|
||||||
|
ws.append(["Rack-ID", "Length (m)"])
|
||||||
|
ws.column_dimensions['A'].width = 18
|
||||||
|
ws.column_dimensions['B'].width = 15
|
||||||
|
|
||||||
|
for rackname, length in plines.rack_lengths.items():
|
||||||
|
classifier = rackname[0]
|
||||||
|
if classifier in ("t", "v", "c", "d"):
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
ws.append([rackname, length])
|
||||||
|
|
||||||
def _create_error_sheets(wb, plines):
|
def _create_error_sheets(wb, plines):
|
||||||
"""Erstellt die Arbeitsblätter für alle aufgetretenen Fehler."""
|
"""Erstellt die Arbeitsblätter für alle aufgetretenen Fehler."""
|
||||||
# Sheet: ERR-Equipment-Connection
|
# Sheet: ERR-Equipment-Connection
|
||||||
|
|||||||
+15
-3
@@ -284,6 +284,7 @@ class Anlage():
|
|||||||
def __init__(self, tol_snap=200.0, tol_connect=5000.0):
|
def __init__(self, tol_snap=200.0, tol_connect=5000.0):
|
||||||
# Container für alle Racks
|
# Container für alle Racks
|
||||||
self._racks = RackIDs(tol_snap=tol_snap)
|
self._racks = RackIDs(tol_snap=tol_snap)
|
||||||
|
self._rack_lengths = defaultdict(float)
|
||||||
# zuordnung zwischen KnotenID und Punkt
|
# zuordnung zwischen KnotenID und Punkt
|
||||||
self._nodeids = NodeIDs()
|
self._nodeids = NodeIDs()
|
||||||
# Container für alle Sensoren
|
# Container für alle Sensoren
|
||||||
@@ -465,6 +466,9 @@ class Anlage():
|
|||||||
def join_racks(self):
|
def join_racks(self):
|
||||||
self._racks.join_racks_str()
|
self._racks.join_racks_str()
|
||||||
|
|
||||||
|
def get_rack_lengths(self) -> dict[str, float]:
|
||||||
|
return self._rack_lengths
|
||||||
|
|
||||||
def find_nearest_rack_from_point_STR_bbox(self, max_dist, pt:Point) -> tuple[Point, str]:
|
def find_nearest_rack_from_point_STR_bbox(self, max_dist, pt:Point) -> tuple[Point, str]:
|
||||||
if self._racks._rack_tree is None:
|
if self._racks._rack_tree is None:
|
||||||
self._racks._build_rack_strtree()
|
self._racks._build_rack_strtree()
|
||||||
@@ -562,7 +566,6 @@ class Anlage():
|
|||||||
dz = 0.0
|
dz = 0.0
|
||||||
|
|
||||||
weight = math.sqrt(dx**2 + dy**2 + dz**2)
|
weight = math.sqrt(dx**2 + dy**2 + dz**2)
|
||||||
#weight=start.distance(end)
|
|
||||||
|
|
||||||
if re.match("v-.*", rname):
|
if re.match("v-.*", rname):
|
||||||
color = "red"
|
color = "red"
|
||||||
@@ -578,6 +581,9 @@ class Anlage():
|
|||||||
color = "black"
|
color = "black"
|
||||||
|
|
||||||
G.add_edge(nid_start, nid_end, color=color, weight=weight)
|
G.add_edge(nid_start, nid_end, color=color, weight=weight)
|
||||||
|
|
||||||
|
self._rack_lengths[rname] += round(weight/1000, 1)
|
||||||
|
|
||||||
return self._node_positions
|
return self._node_positions
|
||||||
|
|
||||||
def map_distributor_to_sensors(self, dname:str, snamen:list[str]):
|
def map_distributor_to_sensors(self, dname:str, snamen:list[str]):
|
||||||
@@ -606,7 +612,7 @@ class Anlage():
|
|||||||
def create_cable_paths(self, G) -> dict:
|
def create_cable_paths(self, G) -> dict:
|
||||||
pfade = dict()
|
pfade = dict()
|
||||||
pfade["kabel"] = list()
|
pfade["kabel"] = list()
|
||||||
pfade["errors_routing"] = dict()
|
|
||||||
routing_errors = dict() # Fehler Liste für fehlgeschlagene Kabelverbindungen
|
routing_errors = dict() # Fehler Liste für fehlgeschlagene Kabelverbindungen
|
||||||
for sname, dname in self._sensor2dist.items():
|
for sname, dname in self._sensor2dist.items():
|
||||||
try:
|
try:
|
||||||
@@ -634,10 +640,16 @@ class Anlage():
|
|||||||
|
|
||||||
pfade["kabel"].append(ld)
|
pfade["kabel"].append(ld)
|
||||||
|
|
||||||
|
pfade["rack_lengths"] = {
|
||||||
|
rname: round(length, 1)
|
||||||
|
for rname, length in self._rack_lengths.items()
|
||||||
|
}
|
||||||
|
|
||||||
|
pfade["errors_routing"] = dict()
|
||||||
lOfDistErrors = list() # sammeln wo keine Verbindung zwischen Dist und Senor möglich war
|
lOfDistErrors = list() # sammeln wo keine Verbindung zwischen Dist und Senor möglich war
|
||||||
for dname,lofSensornamen in routing_errors.items():
|
for dname,lofSensornamen in routing_errors.items():
|
||||||
lOfDistErrors.append({"unterverteiler":dname, "sensoren":lofSensornamen})
|
lOfDistErrors.append({"unterverteiler":dname, "sensoren":lofSensornamen})
|
||||||
|
|
||||||
pfade["errors_routing"] = lOfDistErrors
|
pfade["errors_routing"] = lOfDistErrors
|
||||||
|
|
||||||
return pfade
|
return pfade
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,6 @@ def write_results(jsnResults, outdir, filename):
|
|||||||
def to_json(d, pretty: bool = True) -> str:
|
def to_json(d, pretty: bool = True) -> str:
|
||||||
return json.dumps(d, indent=2 if pretty else None, ensure_ascii=False, default=str) #ensure_ascii false für darstellung von "ue"
|
return json.dumps(d, indent=2 if pretty else None, ensure_ascii=False, default=str) #ensure_ascii false für darstellung von "ue"
|
||||||
|
|
||||||
|
|
||||||
def create_plant(racks:dict, sensors:dict, distributors:dict, mapping:dict, tunnels: dict, tunlength:dict ) -> dict:
|
def create_plant(racks:dict, sensors:dict, distributors:dict, mapping:dict, tunnels: dict, tunlength:dict ) -> dict:
|
||||||
|
|
||||||
# racks = {'Rack_1-0': [Point(0, 0), Point(0, 10)],
|
# racks = {'Rack_1-0': [Point(0, 0), Point(0, 10)],
|
||||||
@@ -90,6 +89,7 @@ def create_plant(racks:dict, sensors:dict, distributors:dict, mapping:dict, tunn
|
|||||||
|
|
||||||
# Ermittle kürzeste Wege von Unterverteilern zu zugehörigen Sensoren
|
# Ermittle kürzeste Wege von Unterverteilern zu zugehörigen Sensoren
|
||||||
paths = an.create_cable_paths(G)
|
paths = an.create_cable_paths(G)
|
||||||
|
|
||||||
if args.graph:
|
if args.graph:
|
||||||
print("Displaying Graph in seperate window. To continue please close that window.")
|
print("Displaying Graph in seperate window. To continue please close that window.")
|
||||||
draw_graph(G,an)
|
draw_graph(G,an)
|
||||||
|
|||||||
Reference in New Issue
Block a user