Regulärer Ausdruck zum Zerlegen des Pfades zum Unterverteiler im Sensor. Prüfung des Pfades zur Eingabedatei in eigene Funktion. Config für Kabelpritschen wird ausgelesen

This commit is contained in:
2025-05-20 10:42:18 +02:00
parent 04598f30f1
commit eb175ea768
2 changed files with 53 additions and 14 deletions
+4
View File
@@ -0,0 +1,4 @@
[Eingänge]
0-0_ILS_EINGANG
+49 -14
View File
@@ -56,7 +56,10 @@ def get_input_positions(msp: ezdxf.document.Drawing.modelspace):
ld[attrib.dxf.tag] = attrib.dxf.text
if attrib.dxf.tag == "IO":
id = attrib.dxf.text
# print(f"-- coord io {id}--: {attrib.dxf.insert}") # position des Blocks
print(f"-- coord io {id}--: {attrib.dxf.insert}") # position des Blocks
pos = attrib.dxf.insert #Position aufzeichnen und bei Bedarf später mit REAL_POS überschreiben
ld["pos"] = (round(pos.x, 1), round(pos.y, 1))
if attrib.dxf.tag == "B":
for spec in SpecialKeys:
if spec in attrib.dxf.text:
@@ -87,10 +90,27 @@ def create_mappings(positions:dict) -> dict:
dnamen = dict()
# sammle die Sensoren mit ihren zugehörigen Unterverteilern
sensor2unterverteiler = dict()
warnings = list()
for sensorname,v in positions.items():
unterverteiler_pfad = v["KENNZEICHNUNG"]
[anlage, verteiler_karte] = unterverteiler_pfad.split('+')
[verteiler, karte] = verteiler_karte.split('-')
print(unterverteiler_pfad)
# PFad zur Karte splitten. Dieser hat z.B. den Inhalt "=AH01+UH02-KF1FDI7"
pattern = r"^=([A-Z]+\d+)([+\-])([A-Z]+\d+)([+\-])([A-Z0-9]+)$"
match = re.match(pattern, unterverteiler_pfad)
if match:
anlage = match.group(1)
verteiler = match.group(3)
karte = match.group(5)
# match.group(1) # AH01
# match.group(2) # +
# match.group(3) # UH02
# match.group(4) # -
# match.group(5) # KF1FDI7
else:
warnings.append(unterverteiler_pfad)
continue
if not verteiler in dnamen:
dnamen[verteiler] = True
sensor2unterverteiler[sensorname] = verteiler
@@ -101,7 +121,7 @@ def create_mappings(positions:dict) -> dict:
if verteiler not in uv2sensor:
uv2sensor[verteiler] = list()
uv2sensor[verteiler].append(sensorname)
return uv2sensor
return (uv2sensor, warnings)
def get_subdistributor_positions(msp, dist2sensors):
"""hole alle Positionen der Unterverteiler !!UV-Positionen bereits "Mitte-Mitte"!!
@@ -160,15 +180,16 @@ def get_rack_positions(msp):
rack_counter = 1 #Zaehler für Rack Nummerierung
all_layers = list(config.items('Layer_Pritschen'))
for e in msp.query('LWPOLYLINE[layer=="PRITSCHE_200-60"]'):
#print_polyline(e)
rack_key = f"Rack_{rack_counter}"
ret[rack_key] = list()
for x, y, start_width, end_width, bulge in e.get_points(): # Gibt Tuple (x, y, start_width, end_width, bulge)
p = [round(x,1), round(y,1)]
ret[rack_key].append(p)
rack_counter +=1
for (layer,v) in all_layers:
selectstr = f'LWPOLYLINEMTEXT[layer=="{layer}"]'
for e in msp.query(selectstr):
#print_polyline(e)
rack_key = f"Rack_{rack_counter}"
ret[rack_key] = list()
for x, y, start_width, end_width, bulge in e.get_points(): # Gibt Tuple (x, y, start_width, end_width, bulge)
p = [round(x,1), round(y,1)]
ret[rack_key].append(p)
rack_counter +=1
# iterate over all entities in modelspace
# for e in msp:
# if e.dxftype() == "LINE":
@@ -195,6 +216,16 @@ def get_dxf_file(filepath):
sys.exit(2)
return doc
def check_file_in_work(work_dir, filename):
fexists = True
if not os.path.exists(filename):
mypath = os.path.join(work_dir, filename)
if not os.path.exists(mypath):
fexists = False
else:
mypath = filename
return (mypath, fexists)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='fetches the x/y positions from a dxf file', prog='getpositions')
parser.add_argument('-f', '--filename', action='store', required=True, default="ST_6300_Steuerungstestlayout1_neueBloecke.dwg", help='which file should be fetched', metavar='myfile.dwg')
@@ -221,6 +252,10 @@ if __name__ == '__main__':
if not os.path.exists(dxf_path):
print(f'no such file {dxf_path}')
raise FileExistsError
dxf_file = args.dxf
(dxf_path, dexists) = check_file_in_work(work_dir, dxf_file)
doc = get_dxf_file(dxf_path) # type: ignore
msp = doc.modelspace()
@@ -242,7 +277,7 @@ if __name__ == '__main__':
if args.console:
print(to_json(res_pos))
res_mappings = create_mappings(res_pos)
(res_mappings, warnings) = create_mappings(res_pos)
output_results['mappings'] = res_mappings
if args.console:
print(to_json(res_mappings))