From 4ee973c32db1ab2de3374fa44e9507c75a35d431 Mon Sep 17 00:00:00 2001 From: mistangl Date: Sat, 17 May 2025 08:45:43 +0200 Subject: [PATCH] mappings wird auch als Ergebnis exportiert --- lib/getpositions.py | 41 +++++++++++++++++++++++++++++++++++++---- lib/requirements.txt | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/lib/getpositions.py b/lib/getpositions.py index e0f48bd..b58af3a 100644 --- a/lib/getpositions.py +++ b/lib/getpositions.py @@ -1,7 +1,7 @@ import argparse import configparser import ezdxf.document -from ezdxf.math import Matrix44 +from ezdxf import readfile import os import sys import math @@ -82,6 +82,26 @@ def get_input_positions(msp: ezdxf.document.Drawing.modelspace): allIds[id] = ld return allIds +def create_mappings(positions:dict, distributors:dict) -> dict: + unterverteiler_pfad = "" + dnamen = dict() + # sammle die Sensoren mit ihren zugehörigen Unterverteilern + sensor2unterverteiler = dict() + for sensorname,v in positions.items(): + unterverteiler_pfad = v["KENNZEICHNUNG"] + [anlage, verteiler_karte] = unterverteiler_pfad.split('+') + [verteiler, karte] = verteiler_karte.split('-') + if not verteiler in dnamen: + dnamen[verteiler] = True + sensor2unterverteiler[sensorname] = verteiler + + # jetzt zu jedem Unterverteiler die zugehörigen Sensoren merken + uv2sensor = dict() + for sensorname,verteiler in sensor2unterverteiler.items(): + if verteiler not in uv2sensor: + uv2sensor[verteiler] = list() + uv2sensor[verteiler].append(sensorname) + return uv2sensor def get_subdistributor_positions(msp): """hole alle Positionen der Unterverteiler !!UV-Positionen bereits "Mitte-Mitte"!! @@ -153,7 +173,9 @@ def get_dxf_file(filepath): """hole das dxf file """ try: + print("reading file ..", end='') doc = ezdxf.readfile(filepath) + print("done") except IOError: print(f"Not a DXF file or a generic I/O error.") sys.exit(1) @@ -171,6 +193,7 @@ if __name__ == '__main__': 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') + args = parser.parse_args() out_dir = os.environ.get('PROJECT_DATA') @@ -178,13 +201,20 @@ if __name__ == '__main__': config_dir = os.environ.get("PROJECT_CFG") filename = args.filename - dxf_path = os.path.join(work_dir, filename) + if not os.path.exists(filename): + dxf_path = os.path.join(work_dir, filename) + if not os.path.exists(dxf_path): + print(f'no such file {dxf_path}') + raise FileExistsError + else: + dxf_path = filename doc = get_dxf_file(dxf_path) # type: ignore msp = doc.modelspace() res_pos = dict() res_dist = dict() res_rac = dict() + res_mappings = dict() if args.sensors or args.dists or args.rack: config = configparser.ConfigParser(allow_no_value=True) @@ -201,13 +231,16 @@ if __name__ == '__main__': output_results['distributors'] = res_dist if args.console: print(to_json(res_dist)) - write_results(to_json(res_dist), work_dir, "subdistributors.json") + if args.dists and args.sensors: + res_mappings = create_mappings(res_pos, res_dist) + output_results['mappings'] = res_mappings + if args.console: + print(to_json(res_mappings)) if args.rack: res_rac = get_rack_positions(msp) output_results['racks'] = res_rac if args.console: print(to_json(res_rac)) - write_results(to_json(res_rac), work_dir, "racks.json") if args.write: basename = os.path.splitext(args.filename)[0] write_results(to_json(output_results), work_dir, basename+"_positions.json") diff --git a/lib/requirements.txt b/lib/requirements.txt index 09641ab..a0c89b3 100644 --- a/lib/requirements.txt +++ b/lib/requirements.txt @@ -1,4 +1,34 @@ -matplotlib=3.10.0 -networkx==3.4.2 +build==1.2.2.post1 +click==8.1.8 +colorama==0.4.6 +contourpy==1.3.1 +cycler==0.12.1 dacite==1.9.2 +dataclasses==0.6 +et-xmlfile==1.1.0 ezdxf==1.4.1 +fonttools==4.57.0 +kiwisolver==1.4.8 +matplotlib==3.10.0 +networkx==3.4.2 +numpy==1.26.1 +openpyxl==3.1.2 +packaging==24.2 +pandas==2.1.1 +pillow==11.1.0 +pip-tools==7.4.1 +PyMuPDF==1.25.5 +pyparsing==3.2.3 +pyproject_hooks==1.2.0 +PySide6==6.9.0 +PySide6_Addons==6.9.0 +PySide6_Essentials==6.9.0 +python-dateutil==2.8.2 +pytz==2023.3.post1 +setuptools==80.0.0 +shapely==2.1.0 +shiboken6==6.9.0 +six==1.16.0 +typing_extensions==4.13.1 +tzdata==2023.3 +wheel==0.45.1