From eb175ea7681f7244652309311b3f6a3c00a52d32 Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 20 May 2025 10:42:18 +0200 Subject: [PATCH] =?UTF-8?q?Regul=C3=A4rer=20Ausdruck=20zum=20Zerlegen=20de?= =?UTF-8?q?s=20Pfades=20zum=20Unterverteiler=20im=20Sensor.=20Pr=C3=BCfung?= =?UTF-8?q?=20des=20Pfades=20zur=20Eingabedatei=20in=20eigene=20Funktion.?= =?UTF-8?q?=20Config=20f=C3=BCr=20Kabelpritschen=20wird=20ausgelesen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cfg/allgemein.cfg | 4 +++ lib/getpositions.py | 63 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 53 insertions(+), 14 deletions(-) create mode 100644 cfg/allgemein.cfg diff --git a/cfg/allgemein.cfg b/cfg/allgemein.cfg new file mode 100644 index 0000000..fa7dff1 --- /dev/null +++ b/cfg/allgemein.cfg @@ -0,0 +1,4 @@ +[Eingänge] +0-0_ILS_EINGANG + + diff --git a/lib/getpositions.py b/lib/getpositions.py index af97b7a..24a6a32 100644 --- a/lib/getpositions.py +++ b/lib/getpositions.py @@ -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))