Grundlagen für enumerate.bat geschaffen
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
import argparse
|
||||
import configparser
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import ezdxf
|
||||
from ezdxf.addons import iterdxf
|
||||
from shapely.geometry import Point
|
||||
from ezdxf.lldxf.const import DXFStructureError
|
||||
|
||||
from error_collector import ErrorCollector, write_json_file
|
||||
|
||||
|
||||
"""
|
||||
Dieses Programm liest eine dxf Datei und holt sich vom Layer RENAME die Angaben
|
||||
für die Bereiche in der Anlage, welche Motoren, Sensoren und Aktoren welchem
|
||||
Unterverteiler zugeordnet werden müssen. (Attribut KENNZEICHNUNG)
|
||||
Alle Symbol Templates werden entsprechend der Richtungsangaben in DIRECTION nummeriert
|
||||
DIRECTION kann TOP_BOTTOM, BOTTOM_TOP, LEFT_RIGHT oder RIGHT_LEFT sein
|
||||
|
||||
Ein Renamer Symbol enthält z.B. die folgenden Angaben:
|
||||
für POT-RA, POT-MA und POT-UC:
|
||||
|
||||
NAME1=POT-RA@@
|
||||
NAME2=POT-MA@@
|
||||
NAME3=POT-UC@@
|
||||
KENNZEICHNUNG=A01+UC…
|
||||
LAYER_NAME1=ILS_POT-RA
|
||||
LAYER_NAME2=ILS_POT-MA
|
||||
LAYER_NAME3=ILS_POT-UC
|
||||
DIRECTION = LEFT_RIGHT
|
||||
|
||||
für BG, MB:
|
||||
|
||||
NAME1=BG-1@@@
|
||||
NAME2=MB-1@@@
|
||||
NAME3=
|
||||
KENNZEICHNUNG=
|
||||
LAYER_NAME1=ILS_Eingang
|
||||
LAYER_NAME2=ILS_Ausgang
|
||||
LAYER_NAME3=
|
||||
DIRECTION = LEFT_RIGHT
|
||||
|
||||
oder nur zur Nummerierung der MA Symbole
|
||||
NAME=MA-1@@
|
||||
KENNZEICHNUNG=A01+UH00
|
||||
LAYER_NAME=ILS_MOTOR
|
||||
DIRECTION = TOP_BOTTOM/LEFT_RIGHT
|
||||
|
||||
Diese Symbole auf dem RENAMER Layer sind immer in einem Block mit einer Polylinie oder einen REchteck.
|
||||
Alle Sensoren, Motoren, Aktoren etc. innerhalb der zugehörigen Polylinie nehmen an der Nummerierung teil, falls diese das @ Zeichen enthalten, also noch ein Template sind.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def check_file_in_work(work_dir: Path, filename: Path) -> tuple[Path, bool]:
|
||||
fexists = True
|
||||
if not filename.exists():
|
||||
mypath = work_dir.joinpath(filename)
|
||||
ex = mypath.exists()
|
||||
if not mypath.exists():
|
||||
fexists = False
|
||||
else:
|
||||
mypath = filename
|
||||
return mypath, fexists
|
||||
|
||||
def check_environment_var(env_str: str) -> Path:
|
||||
out_path = os.environ.get(env_str)
|
||||
if out_path:
|
||||
return Path(out_path)
|
||||
else:
|
||||
print(f"Umgebungsvariable {env_str} ist nicht gesetzt oder leer.")
|
||||
exit()
|
||||
|
||||
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.dxf')
|
||||
parser.add_argument('-w', '--write', action='store', help='write results into a json file')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
out_dir = check_environment_var('PROJECT_DATA')
|
||||
work_dir = check_environment_var('PROJECT_WORK')
|
||||
config_dir = check_environment_var("PROJECT_CFG")
|
||||
|
||||
filename = Path(args.filename)
|
||||
if not filename.suffix == ".dxf":
|
||||
print("only available for .dxf files")
|
||||
exit()
|
||||
|
||||
(dxf_path, dexists) = check_file_in_work(work_dir, filename)
|
||||
if dexists == False:
|
||||
print("no such file ")
|
||||
parser.print_help()
|
||||
exit()
|
||||
|
||||
if dxf_is_binary(dxf_path): # Wenn dxf eine binary ist, dann komplett parsen und modelspace anlegen
|
||||
print("Given .dxf-file is binary dxf. Proceeding to read file. Watch RAM-usage.")
|
||||
doc = get_dxf_file(dxf_path)
|
||||
msp = doc.modelspace()
|
||||
use_iter = False
|
||||
else:
|
||||
print("Given .dxf-file is ASCII-dxf. Proceeding to use iterative functions. Process may take longer.")
|
||||
use_iter = True
|
||||
|
||||
|
||||
else:
|
||||
parser.print_help()
|
||||
Reference in New Issue
Block a user