mappings wird auch als Ergebnis exportiert

This commit is contained in:
2025-05-17 08:45:43 +02:00
parent b4149870f6
commit 4ee973c32d
2 changed files with 69 additions and 6 deletions
+37 -4
View File
@@ -1,7 +1,7 @@
import argparse import argparse
import configparser import configparser
import ezdxf.document import ezdxf.document
from ezdxf.math import Matrix44 from ezdxf import readfile
import os import os
import sys import sys
import math import math
@@ -82,6 +82,26 @@ def get_input_positions(msp: ezdxf.document.Drawing.modelspace):
allIds[id] = ld allIds[id] = ld
return allIds 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): def get_subdistributor_positions(msp):
"""hole alle Positionen der Unterverteiler !!UV-Positionen bereits "Mitte-Mitte"!! """hole alle Positionen der Unterverteiler !!UV-Positionen bereits "Mitte-Mitte"!!
@@ -153,7 +173,9 @@ def get_dxf_file(filepath):
"""hole das dxf file """hole das dxf file
""" """
try: try:
print("reading file ..", end='')
doc = ezdxf.readfile(filepath) doc = ezdxf.readfile(filepath)
print("done")
except IOError: except IOError:
print(f"Not a DXF file or a generic I/O error.") print(f"Not a DXF file or a generic I/O error.")
sys.exit(1) 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('-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') parser.add_argument('-c', '--console', action='store_true', help='print results to output')
args = parser.parse_args() args = parser.parse_args()
out_dir = os.environ.get('PROJECT_DATA') out_dir = os.environ.get('PROJECT_DATA')
@@ -178,13 +201,20 @@ if __name__ == '__main__':
config_dir = os.environ.get("PROJECT_CFG") config_dir = os.environ.get("PROJECT_CFG")
filename = args.filename 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 doc = get_dxf_file(dxf_path) # type: ignore
msp = doc.modelspace() msp = doc.modelspace()
res_pos = dict() res_pos = dict()
res_dist = dict() res_dist = dict()
res_rac = dict() res_rac = dict()
res_mappings = dict()
if args.sensors or args.dists or args.rack: if args.sensors or args.dists or args.rack:
config = configparser.ConfigParser(allow_no_value=True) config = configparser.ConfigParser(allow_no_value=True)
@@ -201,13 +231,16 @@ if __name__ == '__main__':
output_results['distributors'] = res_dist output_results['distributors'] = res_dist
if args.console: if args.console:
print(to_json(res_dist)) 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: if args.rack:
res_rac = get_rack_positions(msp) res_rac = get_rack_positions(msp)
output_results['racks'] = res_rac output_results['racks'] = res_rac
if args.console: if args.console:
print(to_json(res_rac)) print(to_json(res_rac))
write_results(to_json(res_rac), work_dir, "racks.json")
if args.write: if args.write:
basename = os.path.splitext(args.filename)[0] basename = os.path.splitext(args.filename)[0]
write_results(to_json(output_results), work_dir, basename+"_positions.json") write_results(to_json(output_results), work_dir, basename+"_positions.json")
+32 -2
View File
@@ -1,4 +1,34 @@
matplotlib=3.10.0 build==1.2.2.post1
networkx==3.4.2 click==8.1.8
colorama==0.4.6
contourpy==1.3.1
cycler==0.12.1
dacite==1.9.2 dacite==1.9.2
dataclasses==0.6
et-xmlfile==1.1.0
ezdxf==1.4.1 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