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 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")
+32 -2
View File
@@ -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