From 7979ad683d71fd85be534b66890d01427c9eca01 Mon Sep 17 00:00:00 2001 From: Paul Wolok Date: Tue, 25 Nov 2025 08:55:18 +0100 Subject: [PATCH] =?UTF-8?q?Vorbereitung=20von=20omniflofoerder=20und=20aus?= =?UTF-8?q?kommentieren=20des=20F=C3=B6rderer=20kurve=20bis=20die=20Bl?= =?UTF-8?q?=C3=B6cke=20vorhanden=20sind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cfg/shapes.cfg | 3 ++- lib/plant2dxf.py | 68 +++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/cfg/shapes.cfg b/cfg/shapes.cfg index 02e747f..aaf8ac2 100644 --- a/cfg/shapes.cfg +++ b/cfg/shapes.cfg @@ -51,4 +51,5 @@ bogen_3_ab = Vario_Bogen_ab_3° [Omniflo] OFgeradesivas = 821106002 -Tefgeradesivas = 1 \ No newline at end of file +Tefgeradesivas = 1 +OFfoerderer = 2 \ No newline at end of file diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py index adcd55e..be4b1e8 100644 --- a/lib/plant2dxf.py +++ b/lib/plant2dxf.py @@ -1292,8 +1292,17 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) def handle_ils_2_0_kurve_angetrieben(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein): - import_block("AN8",lib_doc,doc) - msp.add_blockref("AN8",(x,y)) + # kurvenrichtung = merkmale.get("Kurvenrichtung") + # kurvenwinkel = float(merkmale.get("Kurvenwinkel")) + # h0 = float(merkmale.get("Höhe Anfang")) + # h1 = float(merkmale.get("Höhe Ende")) + # h_zwischen = (h0 +h1)/2 + # rotation = float(merkmale.get("Drehung")) + # blockname = (f"Kurve{h1}") + # import_block(blockname,lib_doc,doc) + # msp.add_blockref,(x,y,h_zwischen)) + test = 2 + def handle_ils_2_0_kurve(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein): import_block("AN8",lib_doc,doc) msp.add_blockref("AN8",(x,y)) @@ -1311,6 +1320,8 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, # Prüfen, ob es sich um eine Gerade handelt omnisivas = config.get("Omniflo","OFgeradesivas") tefsivas = config.get("Omniflo","Tefgeradesivas") + foerderer = config.get("Omniflo","OFfoerderer") + if merkmale.get("SivasNummer") == omnisivas or merkmale.get("SivasNummer") == tefsivas: try: laenge = float(merkmale.get("Länge in Meter", "0").replace(",", ".")) * 1000 # Meter → mm @@ -1342,6 +1353,33 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, if verbose: print(f"[INFO] Omniflo Gerade → {teileid} Linie von ({start[0]:.1f}, {start[1]:.1f}) nach ({ende[0]:.1f}, {ende[1]:.1f})") return + + if merkmale.get("SivasNummer") == foerderer: + import_block("bogen1",lib_doc,doc) + import_block("bogen2",lib_doc,doc) + rotation = float(merkmale.get("Drehung")) + laenge = float(merkmale.get("laenge in meter")) * 1000 + h0 = float(merkmale.get("Höhe unten")) + h1 = float(merkmale.get("Höhe oben")) + h_zwischen = (h0 + h1)/2 + blockname = (f"OF_Förderer_{laenge}_{h_zwischen}") + winkel_rad = math.radians(rotation) + halbe_laenge = laenge / 2 + # Man muss bei sin -1 machen wegen des links koordinaten system + dx = halbe_laenge * math.sin(rotation * -1) + dy = halbe_laenge * math.cos(rotation) + start = (x + dx, y + dy, float(merkmale.get("Höhe oben")) ) + ende = (x - dx, y - dy, float(merkmale.get("Höhe unten"))) + if blockname not in doc.blocks: + block = doc.blocks.new(blockname, base_point=(0,0,0)) + block.add_blockref("bogen1",start) + block.add_blockref("bogen2",ende) + line = Line.new(dxfattribs={"start": start,"end":ende}) + copy = line.copy() + copy.translate(-x,-y,-h_zwischen) + block.add_entity(copy) + msp.add_blockref(blockname,(x,y,h_zwischen),dxfattribs={"rotation": rotation}) + return # Sonst wie gehabt: Block mit SivasNummer if not lib_doc: print("[WARN] lib_doc nicht verfügbar, Block wird nicht eingefügt.") @@ -3449,6 +3487,8 @@ def get_rotations_of_strecken(csv_path:Path) -> dict: return strecken_nachbarn + + # --------------------------------------------------------- Hauptfunktion def main(csv_path: Path, lib_path: Path, cfg_path: Path, allgemein_cfg_path: Path, output_path: Path, output_path_jason: Path, verbose=False, logger=None ): @@ -3555,6 +3595,15 @@ def main(csv_path: Path, lib_path: Path, cfg_path: Path, allgemein_cfg_path: Pat else: print(msg) continue + # if "Motor" not in doc.layers: + # doc.layers.add(name="Motor", color=2) + # for insert in msp.query("INSERT"): + # change_layer(doc, insert) + + + for insert in msp.query("INSERT"): + basepoint = insert.dxf.insert + # data = [] # for e in msp.query("INSERT"): @@ -3602,6 +3651,13 @@ def main(csv_path: Path, lib_path: Path, cfg_path: Path, allgemein_cfg_path: Pat else: print(f"[DONE] DXF gespeichert unter: {output_path}") +# def change_layer(doc, insert): +# src = doc.blocks[insert.dxf.name] +# for e in src: +# e.dxf.layer = "Motor" +# if e.dxftype() == "INSERT": +# change_layer(doc,e) + def check_dxflibrary_path(lib_path, verbose, logger): lib_doc = None if lib_path.exists(): @@ -3633,10 +3689,8 @@ if __name__ == "__main__": parser.add_argument("-o", "--output", help="Ziel-DXF (Standard: PROJECT_WORK/anlage.dxf)", metavar="anlage.dxf") parser.add_argument("-v", "--verbose", action="store_true", help="mehr Ausgaben anzeigen") - args = parser.parse_args() - - + # Verzeichnisse aus Umgebungs­variablen log_dir = check_environment_var("PROJECT_LOG") data_dir = check_environment_var("PROJECT_DATA") @@ -3658,4 +3712,6 @@ if __name__ == "__main__": output_path = Path(args.output) if args.output else (work_dir / f"{csv_path.stem}.dxf") output_path_jason = Path(args.output) if args.output else (work_dir / f"{csv_path.stem}.jason") main(csv_path, default_lib_path, cfg_path,allgemein_cfg_path, output_path,output_path_jason, verbose=args.verbose, logger=logger) - logger.info("=== plant2dxf Verarbeitung abgeschlossen ===") \ No newline at end of file + logger.info("=== plant2dxf Verarbeitung abgeschlossen ===") + +