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")