From 74ce7675698097f81a4b398f69903c791c46a1a7 Mon Sep 17 00:00:00 2001 From: mistangl Date: Mon, 19 May 2025 21:52:23 +0200 Subject: [PATCH] =?UTF-8?q?Layer=20f=C3=BCr=20Sensoren=20etc.=20werden=20a?= =?UTF-8?q?us=20Config=20gelesen.=20Sensoren=20und=20Verteiler=20werden=20?= =?UTF-8?q?auf=20einen=20Rutsch=20bestimmt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 8 +++---- cfg/getpositions.cfg | 20 +++++++++++++++++- lib/getpositions.py | 50 +++++++++++++++++++++++++++----------------- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c47d675..22cb63b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -33,7 +33,6 @@ "--filename", "HundM.dxf", "--sensors", - "--dists", "--rack", "--console", "--write" @@ -49,7 +48,6 @@ "--filename", "easy.dxf", "--sensors", - "--dists", "--rack", "--console", "--write" @@ -64,9 +62,9 @@ "args": [ "--filename", "easy.dxf", - "-r", - "-c", - "-w" + "--rack", + "--console", + "--write" ] }, { diff --git a/cfg/getpositions.cfg b/cfg/getpositions.cfg index b9e4820..a30c406 100644 --- a/cfg/getpositions.cfg +++ b/cfg/getpositions.cfg @@ -5,10 +5,28 @@ AUSGANG MOTOR -[Pritsche] +# Layernamen, auf denen Pritschen liegen +[Layer_Pritschen] PRITSCHE_100-60-SCHRAFF PRITSCHE_200-60 +0-0_ILS_PRITSCHE_200--60_storage\ Level\ 1 +0-0_ILS_PRITSCHE_200--60_storage\ Level\ 2 +0-0_ILS_PRITSCHE_200--60_Workstation +0-0_ILS_Pritsche_200-60_AMR +0-0_ILS_PRITSCHE_200-60_Highway +0-0_ILS_Pritsche_200-60_Inbound +0-0_Omniflo_Pritsche_200-60_Workstation-Outbound +[Layer_Busverteiler] +Busverteiler-Kennzeichnung +#0-0_ILS_Bereich-Busverteiler +0-0_ILS_Busverteiler-Kennzeichnung +0-0_ILS_UNTERVERTEILER +0-0_Omniflo_UNTERVERTEILER +UNTERVERTEILER + + +# Maße des zur genauen Bestimmung der Mitte [Unterverteiler] Breite = 320 Hoehe = 350 diff --git a/lib/getpositions.py b/lib/getpositions.py index 1c5c50d..af97b7a 100644 --- a/lib/getpositions.py +++ b/lib/getpositions.py @@ -4,10 +4,10 @@ import ezdxf.document from ezdxf import readfile import os import sys -import math import json import re from shapely import Point +from itertools import combinations """ @@ -82,7 +82,7 @@ def get_input_positions(msp: ezdxf.document.Drawing.modelspace): allIds[id] = ld return allIds -def create_mappings(positions:dict, distributors:dict) -> dict: +def create_mappings(positions:dict) -> dict: unterverteiler_pfad = "" dnamen = dict() # sammle die Sensoren mit ihren zugehörigen Unterverteilern @@ -103,7 +103,7 @@ def create_mappings(positions:dict, distributors:dict) -> dict: uv2sensor[verteiler].append(sensorname) return uv2sensor -def get_subdistributor_positions(msp): +def get_subdistributor_positions(msp, dist2sensors): """hole alle Positionen der Unterverteiler !!UV-Positionen bereits "Mitte-Mitte"!! """ # # Über alle Texte laufen @@ -122,12 +122,21 @@ def get_subdistributor_positions(msp): ret = dict() # Alle Texte auf Layer "xy" - for text in msp.query('MTEXT[layer=="Busverteiler-Kennzeichnung"]'): - print(f"Text auf Layer 'Busverteiler-Kennzeichnung': {text.dxf.text}") - match = re.search(r"=A\d\++\w+-\w\+", text.dxf.text) - if match: - nameUC = match.group(0) - ret[nameUC] = (round(text.dxf.insert[0],1), round(text.dxf.insert[1],1)) #nur x und y Koordinate in Json schreiben + all_distributors = dist2sensors.keys() + all_layers = config.items('Layer_Busverteiler') + for (layer,v) in all_layers: + for distname in all_distributors: + selectstr = f'MTEXT[layer=="{layer}"]' + for text in msp.query(selectstr): + print(f"Text auf Layer 'Busverteiler-Kennzeichnung': {text.dxf.text}") + match = re.search("-"+distname, text.dxf.text) + if match: + ret[distname] = (round(text.dxf.insert[0],1), round(text.dxf.insert[1],1)) #nur x und y Koordinate in Json schreiben + # for mtext in msp.query("MTEXT"): + # print(f"Inhalt: {mtext.text}") + # print(f"Layer: {mtext.dxf.layer}") + # print(f"Einfügepunkt: {mtext.dxf.insert}") + # print("---") return ret @@ -150,6 +159,8 @@ def get_rack_positions(msp): ret = dict() 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}" @@ -187,8 +198,7 @@ def get_dxf_file(filepath): 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') - parser.add_argument('-s', '--sensors', action='store_true', help='fetch all position of sensors, motors, actors') - parser.add_argument('-d', '--dists', action='store_true', help='fetch all positions of all subdistributors') + parser.add_argument('-s', '--sensors', action='store_true', help='fetch all position of sensors, motors, actors and subdistributors') parser.add_argument('-r', '--rack', action='store_true', help='fetch all positions of all cable racks') parser.add_argument('-w', '--write', action='store_true', help='write results into a json file') parser.add_argument('-c', '--console', action='store_true', help='print results to output') @@ -220,7 +230,9 @@ if __name__ == '__main__': res_mappings = dict() if args.sensors or args.dists or args.rack: - config = configparser.ConfigParser(allow_no_value=True) + config = configparser.ConfigParser(allow_no_value=True, delimiters=("=")) + config.optionxform = lambda option: option # preserve case for letters + config.read(os.path.join(config_dir, "getpositions.cfg")) output_results = dict() @@ -229,16 +241,16 @@ if __name__ == '__main__': output_results['sensors'] = res_pos if args.console: print(to_json(res_pos)) - if args.dists: - res_dist = get_subdistributor_positions(msp) - output_results['distributors'] = res_dist - if args.console: - print(to_json(res_dist)) - if args.dists and args.sensors: - res_mappings = create_mappings(res_pos, res_dist) + + res_mappings = create_mappings(res_pos) output_results['mappings'] = res_mappings if args.console: print(to_json(res_mappings)) + + res_dist = get_subdistributor_positions(msp, res_mappings) + output_results['distributors'] = res_dist + if args.console: + print(to_json(res_dist)) if args.rack: res_rac = get_rack_positions(msp) output_results['racks'] = res_rac