Symbol eines Tunnels wird ausgelesen. Länge muss im Symbol angegeben sein
This commit is contained in:
+94
-1
@@ -65,6 +65,21 @@ def matches_cabinet_pattern(name: str) -> [bool, str]:
|
|||||||
return (False, "")
|
return (False, "")
|
||||||
|
|
||||||
|
|
||||||
|
def matches_tunnel_pattern(name: str) -> bool:
|
||||||
|
"""Check if the given name matches any Tunnel-Pattern from BMK.cfg"""
|
||||||
|
if not config_BMK.has_section("Tunnel-Pattern"):
|
||||||
|
return False
|
||||||
|
|
||||||
|
patterns = [pattern for pattern, _ in config_BMK.items("Tunnel-Pattern")]
|
||||||
|
|
||||||
|
for pattern in patterns:
|
||||||
|
m = re.search(pattern, name)
|
||||||
|
if m:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def get_attributes_of_insert(d_insert: dict, d_pos: dict) -> tuple[dict, str, str]:
|
def get_attributes_of_insert(d_insert: dict, d_pos: dict) -> tuple[dict, str, str]:
|
||||||
"""
|
"""
|
||||||
Diese Funktion schaut nach den aktuell definierten Attributen in den Blöcken
|
Diese Funktion schaut nach den aktuell definierten Attributen in den Blöcken
|
||||||
@@ -116,7 +131,7 @@ def get_attributes_of_insert(d_insert: dict, d_pos: dict) -> tuple[dict, str, st
|
|||||||
else:
|
else:
|
||||||
ld["pos"] = (pos[0], pos[1])
|
ld["pos"] = (pos[0], pos[1])
|
||||||
|
|
||||||
# die neueren Bläcke heissen nicht IO, sondern haben einen Namen
|
# die neueren Blöcke heissen nicht IO, sondern haben einen Namen
|
||||||
if "NAME" in d_insert:
|
if "NAME" in d_insert:
|
||||||
typ = get_type_of_name_cfg(d_insert["NAME"])
|
typ = get_type_of_name_cfg(d_insert["NAME"])
|
||||||
id_ = d_insert["NAME"]
|
id_ = d_insert["NAME"]
|
||||||
@@ -451,6 +466,38 @@ def get_subdistributor_position_of_symbol(d_insert: dict, d_pos: dict) -> tuple[
|
|||||||
return ld, id_
|
return ld, id_
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
|
|
||||||
|
def get_tunnel_position_of_symbol(d_insert: dict, d_pos: dict) -> tuple[dict, str]:
|
||||||
|
"""
|
||||||
|
Diese Funktion schaut nach den aktuell definierten Attributen in allen Tunnel Blöcken
|
||||||
|
Tunnel haben einen Namen der den Tunnel-Mustern aus BMK.cfg entspricht
|
||||||
|
|
||||||
|
"""
|
||||||
|
id_ = ""
|
||||||
|
ld = d_insert
|
||||||
|
|
||||||
|
# Tunnel haben einen Namen
|
||||||
|
if "NAME" in d_insert:
|
||||||
|
id_ = d_insert["NAME"]
|
||||||
|
pos = d_pos["NAME"]
|
||||||
|
ld["pos"] = (pos[0], pos[1])
|
||||||
|
|
||||||
|
# Länge des Tunnels aus dem LAENGE Attribut extrahieren
|
||||||
|
if "LAENGE" in d_insert:
|
||||||
|
ld["laenge"] = d_insert["LAENGE"]
|
||||||
|
|
||||||
|
if "REALE_POSITION" in d_insert and d_insert["REALE_POSITION"] == 'x':
|
||||||
|
pos = d_pos["REALE_POSITION"]
|
||||||
|
|
||||||
|
# Hoehe und Breite von "x" addieren, um Mittelpunkt zu finden
|
||||||
|
breite_marker = config.getfloat("GetPos-Geom-Sensor", "Breite")
|
||||||
|
hoehe_marker = config.getfloat("GetPos-Geom-Sensor", "Hoehe")
|
||||||
|
midx = pos[0] + breite_marker * 0.5
|
||||||
|
midy = pos[1] + hoehe_marker * 0.5
|
||||||
|
ld["pos"] = (round(midx, 1), round(midy, 1))
|
||||||
|
return ld, id_
|
||||||
|
return None, None
|
||||||
|
|
||||||
def get_subdistributor_positions_from_symbols(all_inserts:list, all_positions:list, dist2sensors: dict) -> dict:
|
def get_subdistributor_positions_from_symbols(all_inserts:list, all_positions:list, dist2sensors: dict) -> dict:
|
||||||
"""Ermittelt Unterverteiler-Positionen aus allen Symbolen
|
"""Ermittelt Unterverteiler-Positionen aus allen Symbolen
|
||||||
"""
|
"""
|
||||||
@@ -472,6 +519,48 @@ def get_subdistributor_positions_from_symbols(all_inserts:list, all_positions:li
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def get_tunnel_positions_from_symbols(all_inserts: list, all_positions: list) -> dict:
|
||||||
|
"""Ermittelt Tunnel-Positionen aus allen Symbolen
|
||||||
|
|
||||||
|
Args:
|
||||||
|
all_inserts: Liste von Dictionaries mit Attribut-Tags und deren Textwerten
|
||||||
|
all_positions: Liste von Dictionaries mit Attribut-Tags und deren (x, y, z)-Positionen
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dictionary mit Tunnelnamen als Keys und Listen von Positionen als Values
|
||||||
|
Format: {'Tunnel1': [(x1, y1), (x2, y2)], ..., 'length': {'Tunnel1': 'laenge_wert', ...}}
|
||||||
|
"""
|
||||||
|
ret = {}
|
||||||
|
tunnel_length = {}
|
||||||
|
|
||||||
|
for insert, pos in zip(all_inserts, all_positions):
|
||||||
|
if "NAME" not in insert: # Tunnel haben immer einen eindeutigen Namen
|
||||||
|
continue
|
||||||
|
|
||||||
|
ld, id_ = get_tunnel_position_of_symbol(insert, pos)
|
||||||
|
if not ld or not id_:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Check if id_ matches Tunnel-Pattern from BMK.cfg
|
||||||
|
if not matches_tunnel_pattern(id_):
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Sammle alle Positionen für den gleichen Tunnelnamen
|
||||||
|
if id_ not in ret:
|
||||||
|
ret[id_] = []
|
||||||
|
ret[id_].append(ld["pos"])
|
||||||
|
|
||||||
|
# Sammle Längeninformation falls vorhanden
|
||||||
|
if "laenge" in ld:
|
||||||
|
tunnel_length[id_] = ld["laenge"]
|
||||||
|
|
||||||
|
# Füge Längeninformation hinzu, falls welche gefunden wurde
|
||||||
|
if len(tunnel_length) > 0:
|
||||||
|
ret['length'] = tunnel_length
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def get_subdistributor_positions_from_entities(entities, dist2sensors: dict) -> dict:
|
def get_subdistributor_positions_from_entities(entities, dist2sensors: dict) -> dict:
|
||||||
"""Ermittelt Unterverteiler-Positionen aus einer beliebigen Entity-Iterable.
|
"""Ermittelt Unterverteiler-Positionen aus einer beliebigen Entity-Iterable.
|
||||||
|
|
||||||
@@ -830,7 +919,11 @@ if __name__ == '__main__':
|
|||||||
t_entities = iterdxf.modelspace(dxf_path)
|
t_entities = iterdxf.modelspace(dxf_path)
|
||||||
else:
|
else:
|
||||||
t_entities = msp.query('MTEXT')
|
t_entities = msp.query('MTEXT')
|
||||||
|
# die Infos aus den Texten (alter Stil)
|
||||||
res_tunnel = get_tunnel_positions_from_entities(t_entities)
|
res_tunnel = get_tunnel_positions_from_entities(t_entities)
|
||||||
|
# die Infos aus den Blöcken (neuer Stil)
|
||||||
|
symbol_tunnels = get_tunnel_positions_from_symbols(all_inserts, all_positions)
|
||||||
|
res_tunnel = merge_two_dicts(res_tunnel, symbol_tunnels)
|
||||||
output_results['tunnels'] = res_tunnel
|
output_results['tunnels'] = res_tunnel
|
||||||
if args.console:
|
if args.console:
|
||||||
print(to_json(res_tunnel))
|
print(to_json(res_tunnel))
|
||||||
|
|||||||
Reference in New Issue
Block a user