From 193b0dea04e35bffb24b8502b4578c9489c5bdf0 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Wed, 22 Jul 2026 12:49:25 +0200 Subject: [PATCH] CSV-Export: Bounding-Box (Position/Boundingbox) und Planquadrat-Spalte ergaenzt Nur EXPORTCSV betroffen, EXPORTSIVAS bleibt unveraendert: - Position/Boundingbox: Bounding-Box je Block per vla-getboundingbox (Lisp/export.lsp, csv:get-bbox), Mittelpunkt und Ausdehnung x/y/z. - Planquadrat: aus x/y-Koordinate berechnet nach cfg/export.cfg [Planquadrate] (Schrittweite, numerisch/alphabetisch je Achse, alphabetische Zaehlung mit Excel-Spalten-Umlauf Z->AA), siehe lib/export_planquadrat.py. Co-Authored-By: Claude Sonnet 5 --- Lisp/export.lsp | 81 ++++++- cfg/export.cfg | 30 +++ lib/export_csv.py | 72 +++++- lib/export_planquadrat.py | 71 ++++++ tests/reference/omniflo_export_reference.csv | 218 +++++++++---------- tests/test_foerderer.py | 18 +- tests/test_omniflo.py | 4 +- 7 files changed, 367 insertions(+), 127 deletions(-) create mode 100644 lib/export_planquadrat.py diff --git a/Lisp/export.lsp b/Lisp/export.lsp index 109e6f5..a129c52 100644 --- a/Lisp/export.lsp +++ b/Lisp/export.lsp @@ -11,6 +11,7 @@ ;; Datei-/Skriptnamen sind fest im Code hinterlegt (*export-filenames*). ;; ============================================================ +(vl-load-com) ;; --- Export-Konfiguration aus cfg/export.cfg laden --- ;; Nutzt den zentralen INI-Parser aus ssg_core.lsp (ssg-load-ini / ssg-ini-get / @@ -78,6 +79,47 @@ ) +;; --- Safearray/Variant-Rueckgabe von vla-getboundingbox in Liste wandeln --- +;; BricsCAD liefert ein Safearray, AutoCAD ein Variant mit Safearray. +(defun csv:pt->list (v) + (cond + ((= (type v) 'variant) (vlax-safearray->list (vlax-variant-value v))) + ((= (type v) 'safearray) (vlax-safearray->list v)) + ((listp v) v) + (t nil) + ) +) + +;; --- Bounding-Box (WCS, achsparallel) eines INSERT-Blocks ermitteln --- +;; Erzwingt vorher ein vla-update (Regen), da vla-getboundingbox sonst auf +;; nicht-regenerierten oder auf eingefrorenen Layern liegenden Bloecken scheitert. +;; Rueckgabe: Liste (cx cy cz dx dy dz) -- Mittelpunkt + Ausdehnung, oder nil bei Fehler. +(defun csv:get-bbox (ename / obj res minpt maxpt) + (setq obj (vlax-ename->vla-object ename)) + (vl-catch-all-apply 'vla-update (list obj)) + (setq res + (vl-catch-all-apply + '(lambda ( / ll ur) + (vla-getboundingbox obj 'll 'ur) + (list (csv:pt->list ll) (csv:pt->list ur))))) + (if (vl-catch-all-error-p res) + nil + (progn + (setq minpt (car res)) + (setq maxpt (cadr res)) + (list + (/ (+ (car minpt) (car maxpt)) 2.0) + (/ (+ (cadr minpt) (cadr maxpt)) 2.0) + (/ (+ (caddr minpt) (caddr maxpt)) 2.0) + (- (car maxpt) (car minpt)) + (- (cadr maxpt) (cadr minpt)) + (- (caddr maxpt) (caddr minpt)) + ) + ) + ) +) + + ;; --- Attribute eines INSERT-Blocks als JSON-Objekt lesen --- ;; ename = Entity-Name des INSERT ;; Rueckgabe: String wie {"TAG1":"Wert1","TAG2":"Wert2"} @@ -111,7 +153,9 @@ ;; --- Einen INSERT-Block als JSON-Objekt schreiben --- -(defun csv:block-to-json (ename / ed blk-name layer pt rotation handle attribs) +;; include-bbox = T -> zusaetzlich Bounding-Box (Mitte + Ausdehnung) ermitteln +;; und als "bbox"-Objekt anhaengen (nur fuer EXPORTCSV, nicht fuer EXPORTSIVAS). +(defun csv:block-to-json (ename include-bbox / ed blk-name layer pt rotation handle attribs bbox bbox-json) (setq ed (entget ename)) (setq blk-name (cdr (assoc 2 ed))) (setq layer (cdr (assoc 8 ed))) @@ -120,6 +164,26 @@ (setq handle (cdr (assoc 5 ed))) (if (null rotation) (setq rotation 0.0)) (setq attribs (csv:read-attribs ename)) + (setq bbox-json "") + (if include-bbox + (progn + (setq bbox (csv:get-bbox ename)) + (if bbox + (setq bbox-json + (strcat + ",\"bbox\":{" + "\"cx\":" (rtos (nth 0 bbox) 2 4) + ",\"cy\":" (rtos (nth 1 bbox) 2 4) + ",\"cz\":" (rtos (nth 2 bbox) 2 4) + ",\"dx\":" (rtos (nth 3 bbox) 2 4) + ",\"dy\":" (rtos (nth 4 bbox) 2 4) + ",\"dz\":" (rtos (nth 5 bbox) 2 4) + "}" + ) + ) + ) + ) + ) (strcat " {\"block_name\":\"" (csv:json-escape blk-name) "\"" ",\"layer\":\"" (csv:json-escape layer) "\"" @@ -129,6 +193,7 @@ ",\"z\":" (rtos (if (caddr pt) (caddr pt) 0.0) 2 4) ",\"rotation\":" (rtos (* (/ rotation pi) 180.0) 2 4) ",\"attribs\":" attribs + bbox-json "}" ) ) @@ -203,7 +268,9 @@ ;; label = Anzeigename (z.B. "EXPORTCSV") ;; py-name = Python-Skript-Name (z.B. "export_csv.py") ;; csv-name = Ergebnis-CSV-Name (z.B. "export.csv") -(defun csv:run-export (label py-name csv-name / ss i ename fh out-pfad +;; include-bbox = T -> Bounding-Box je Block ermitteln und mit exportieren +;; (siehe csv:block-to-json); fuer EXPORTSIVAS nil. +(defun csv:run-export (label py-name csv-name include-bbox / ss i ename fh out-pfad py-skript ergebnis-pfad cmd first-block count out-dir) ;; Vor dem Export: IDs aller Bloecke sicherstellen und Duplikate korrigieren (princ (ssg-textf "exp-check-ids" (list label))) @@ -254,7 +321,7 @@ (if (not first-block) (write-line "," fh) ) - (write-line (csv:block-to-json ename) fh) + (write-line (csv:block-to-json ename include-bbox) fh) (setq first-block nil) (setq i (1+ i)) ) @@ -289,14 +356,18 @@ (defun c:EXPORTSIVAS () (csv:run-export "EXPORTSIVAS" (export:filename "sivas_script") - (export:filename "sivas_csv")) + (export:filename "sivas_csv") + nil) ) ;; --- EXPORTCSV: Einfache Item-Liste aller Bloecke (ohne Summierung) --- +;; Ermittelt zusaetzlich je Block eine Bounding-Box (siehe csv:get-bbox), +;; die im Python-Skript als Position/Boundingbox-Spalten ausgegeben wird. (defun c:EXPORTCSV () (csv:run-export "EXPORTCSV" (export:filename "csv_script") - (export:filename "csv_csv")) + (export:filename "csv_csv") + T) ) diff --git a/cfg/export.cfg b/cfg/export.cfg index c36b582..56ec74e 100644 --- a/cfg/export.cfg +++ b/cfg/export.cfg @@ -27,3 +27,33 @@ pattern_variofoerderer= VF_* pattern_gefaellestrecke= GF_* pattern_strecke_module= Vario*, Staustrecke*, AUS_Element*, EIN_Element* pattern_ks_subblocks= KS_EIN, KS_AUS, K1, K2, K3, K4 + +[Planquadrate] +section=Planquadrate_AN + +# hier kann man im csv Export aus den Koordinaten der Bauteile die Planquadrate berechnen lassen, in denen sie liegen +# Zählung ist numerisch oder Alphabetisch möglich, Schrittweite in m (z.B. 2m pro Spalte, 4m pro Zeile) +# liegt man im ersten Quadrat, ist diese A/1, oder 1/1 oder 1/A, je nach Formatierung. Die Zählung beginnt immer bei 1 +[Planquadrate_NA] +# z.B. 1/A +x_step=2 +x_description=numerisch # zahlen, von links nach rechts, 2m pro Spalte +y_step=4 +y_description=alphabetisch # Buchstaben von unten nach oben, 4m pro Zeile +format= {x}/{y} # Formatierung der Planquadrate, {y} und {x} werden durch die berechneten gerundeten Werte der Objektkoordinaten ersetzt + +[Planquadrate_AN] +# z.B. A/1 +x_step=2 +x_description=alphabetisch # Buchstaben, von links nach rechts, 2m pro Spalte +y_step=2 +y_description=alphabetisch # Zahlen von unten nach oben, 2m pro Zeile +format= {x}/{y} + +[Planquadrate_NN] +# z.B. 2/5 +x_step=2 +x_description=numerisch # Zahlen, von links nach rechts, 2m pro Spalte +y_step=4 +y_description=numerisch # Zahlen von unten nach oben, 4m pro Zeile +format= {x}/{y} \ No newline at end of file diff --git a/lib/export_csv.py b/lib/export_csv.py index de39fe3..aac7040 100644 --- a/lib/export_csv.py +++ b/lib/export_csv.py @@ -11,7 +11,16 @@ Aufruf: python export_csv.py CSV-Format: - Elementnummer;TeileArt;TeileId;NachbarIds;Bezeichnung;Planquadrat;rotation;Merkmale + Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale + +Position und Boundingbox stammen aus der von export.lsp (csv:get-bbox, per +vla-getboundingbox) ermittelten Bounding-Box je Block: + Position = Mittenkoordinate x, y, z + Boundingbox = Ausdehnung (Laenge, Breite, Hoehe) in x, y, z +Planquadrat wird aus der x/y-Koordinate des Blocks berechnet, siehe +export_planquadrat.py ([Planquadrate] in cfg/export.cfg). +Position, Boundingbox und Planquadrat sind nur fuer EXPORTCSV vorhanden +(nicht EXPORTSIVAS) - siehe csv:run-export. """ import json @@ -19,8 +28,10 @@ import sys import os from export_blockpatterns import load_patterns, matches_any +from export_planquadrat import load_planquadrat_config, compute_planquadrat BLOCKPATTERNS = load_patterns() +PLANQUADRAT_CFG = load_planquadrat_config() # --------------------------------------------------------------------------- @@ -219,6 +230,41 @@ def build_kreisel_merkmale(block): } +# --------------------------------------------------------------------------- +# Bounding-Box-Spalten (Position/Boundingbox) +# --------------------------------------------------------------------------- + +def bbox_columns(block): + """Liest die von export.lsp (csv:get-bbox) ermittelte Bounding-Box. + + Rueckgabe: dict mit "position" (Mittenkoordinate x,y,z) und "boundingbox" + (Ausdehnung x,y,z) als Strings, oder leere Strings falls kein bbox-Feld + vorhanden ist (z.B. EXPORTSIVAS oder die synthetische Omniflo-Sum-Zeile). + """ + bbox = block.get("bbox") + if not bbox: + return {"position": "", "boundingbox": ""} + return { + "position": f'{bbox.get("cx", 0):.2f}, {bbox.get("cy", 0):.2f}, {bbox.get("cz", 0):.2f}', + "boundingbox": f'{bbox.get("dx", 0):.2f}, {bbox.get("dy", 0):.2f}, {bbox.get("dz", 0):.2f}', + } + + +def planquadrat_column(block): + """Berechnet das Planquadrat aus x/y des Blocks (siehe export_planquadrat.py). + + Leerer String, wenn keine Planquadrat-Konfiguration geladen werden konnte + (fehlende/unvollstaendige [Planquadrate]-Sektion in cfg/export.cfg). + """ + if PLANQUADRAT_CFG is None: + return "" + x = block.get("x") + y = block.get("y") + if x is None or y is None: + return "" + return compute_planquadrat(float(x), float(y), PLANQUADRAT_CFG) + + # --------------------------------------------------------------------------- # Bekannte Blocknamen # --------------------------------------------------------------------------- @@ -268,7 +314,9 @@ def process_blocks(blocks, lookup): "teileart": "Omniflo Kurve", "teileid": shape_id, "bezeichnung": f"OFBogen :{bogen_count}", + "planquadrat": planquadrat_column(block), "merkmale": build_bogen_merkmale(block, eintrag), + **bbox_columns(block), }) elif typ == "weiche": @@ -279,7 +327,9 @@ def process_blocks(blocks, lookup): "teileart": "Omniflo Weiche", "teileid": shape_id, "bezeichnung": f"OFWeiche :{weiche_count[wt]}", + "planquadrat": planquadrat_column(block), "merkmale": build_weiche_merkmale(block, eintrag), + **bbox_columns(block), }) subtyp = weichensubtyp(block, eintrag) if subtyp == "weichenkoerper": @@ -304,7 +354,9 @@ def process_blocks(blocks, lookup): "teileart": "Omniflo Gerade", "teileid": block.get("attribs", {}).get("ID", "0000"), "bezeichnung": f"OFGerade :{gerade_count}", + "planquadrat": planquadrat_column(block), "merkmale": build_gerade_merkmale(block), + **bbox_columns(block), }) len_ap110_mm += get_laenge_mm(block) continue @@ -318,7 +370,9 @@ def process_blocks(blocks, lookup): "teileart": "ILS 2.0 Strecke", "teileid": block.get("attribs", {}).get("ID", "0000"), "bezeichnung": f"VarioFoerderer :{vf_count}", + "planquadrat": planquadrat_column(block), "merkmale": build_variofoerderer_merkmale(block), + **bbox_columns(block), }) continue @@ -331,7 +385,9 @@ def process_blocks(blocks, lookup): "teileart": "ILS 2.0 Gefaellestrecke", "teileid": block.get("attribs", {}).get("ID", "0000"), "bezeichnung": f"Gefaellestrecke :{gf_count}", + "planquadrat": planquadrat_column(block), "merkmale": build_variofoerderer_merkmale(block), + **bbox_columns(block), }) continue @@ -345,7 +401,9 @@ def process_blocks(blocks, lookup): "teileart": "ILS 2.0 Eckrad", "teileid": block.get("attribs", {}).get("ID", "0000"), "bezeichnung": f"Eckrad :{eckrad_count}", + "planquadrat": planquadrat_column(block), "merkmale": build_kreisel_merkmale(block), + **bbox_columns(block), }) continue @@ -358,7 +416,9 @@ def process_blocks(blocks, lookup): "teileart": "ILS 2.0 Kreisel", "teileid": block.get("attribs", {}).get("ID", "0000"), "bezeichnung": f"Kreisel :{kreisel_count}", + "planquadrat": planquadrat_column(block), "merkmale": build_kreisel_merkmale(block), + **bbox_columns(block), }) continue @@ -371,7 +431,9 @@ def process_blocks(blocks, lookup): "teileart": "ILS 2.0 Strecke - Modul", "teileid": block.get("attribs", {}).get("ID", "0000"), "bezeichnung": f"Streckenmodul :{strecke_modul_count}", + "planquadrat": planquadrat_column(block), "merkmale": {"Blockname": bname}, + **bbox_columns(block), }) continue @@ -382,9 +444,12 @@ def process_blocks(blocks, lookup): "teileart": "Omniflo Sum", "teileid": "autogenerated_of_json", "bezeichnung": "Omniflo sum", + "planquadrat": "", "merkmale": build_omni_sum_merkmale( bogen_count, cnt_wk, cnt_einzel, cnt_delta, cnt_doppel, cnt_stern, len_ap110_mm, len_ap60_mm), + "position": "", + "boundingbox": "", }) return items @@ -401,7 +466,10 @@ def format_csv_line(item): f';"{item["teileart"]}"' f';"{item["teileid"]}"' f';"{item["bezeichnung"]}"' + f';"{item["planquadrat"]}"' f';1' + f';"{item["position"]}"' + f';"{item["boundingbox"]}"' f';{merkmale_json}' ) @@ -433,7 +501,7 @@ def main(): items = process_blocks(blocks, lookup) - header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Anzahl;Merkmale" + header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale" with open(output_csv, "w", encoding="utf-8") as f: f.write(header + "\n") for item in items: diff --git a/lib/export_planquadrat.py b/lib/export_planquadrat.py new file mode 100644 index 0000000..ccf3040 --- /dev/null +++ b/lib/export_planquadrat.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +export_planquadrat.py - Berechnet das Planquadrat eines Blocks aus x/y-Koordinate. + +Liest die aktive Planquadrat-Konfiguration aus cfg/export.cfg +([Planquadrate] -> section=, z.B. Planquadrate_AN) und +rundet die x/y-Koordinate eines Blocks (mm, wie im Roh-JSON von export.lsp) +je Achse auf die konfigurierte Schrittweite (in Metern) herunter. + +Nur von export_csv.py genutzt (EXPORTCSV), nicht von export_sivas.py. +""" + +import configparser + +from export_blockpatterns import cfg_path_from_env + + +def load_planquadrat_config(cfg_path=None): + """Liest die aktive Planquadrat-Konfiguration aus export.cfg. + + Rueckgabe: dict mit x_step_mm, x_alpha, y_step_mm, y_alpha, format, + oder None, wenn [Planquadrate] bzw. die referenzierte Sub-Sektion fehlt. + """ + if cfg_path is None: + cfg_path = cfg_path_from_env() + # inline_comment_prefixes noetig, da export.cfg Werte wie + # "numerisch # zahlen, von links nach rechts, 2m pro Spalte" nutzt. + parser = configparser.ConfigParser(inline_comment_prefixes=("#",)) + parser.read(cfg_path, encoding="utf-8") + + if not parser.has_section("Planquadrate"): + return None + section_name = parser.get("Planquadrate", "section", fallback=None) + if not section_name or not parser.has_section(section_name): + return None + + sec = parser[section_name] + return { + "x_step_mm": float(sec.get("x_step", "1")) * 1000.0, + "x_alpha": sec.get("x_description", "numerisch").strip().lower().startswith("alpha"), + "y_step_mm": float(sec.get("y_step", "1")) * 1000.0, + "y_alpha": sec.get("y_description", "numerisch").strip().lower().startswith("alpha"), + "format": sec.get("format", "{x}/{y}").strip(), + } + + +def _index_to_alpha(n): + """Wandelt einen 1-basierten Index in eine Buchstaben-Bezeichnung um. + + 1=A, 26=Z, 27=AA, 28=AB, ... (wie Excel-Spaltennamen). + """ + result = "" + while n > 0: + n, remainder = divmod(n - 1, 26) + result = chr(65 + remainder) + result + return result + + +def _index_for(coord_mm, step_mm): + """1-basierter Planquadrat-Index einer Koordinate fuer eine Schrittweite.""" + return int(coord_mm // step_mm) + 1 + + +def compute_planquadrat(x_mm, y_mm, cfg): + """Berechnet die Planquadrat-Bezeichnung fuer eine x/y-Koordinate (mm).""" + x_idx = _index_for(x_mm, cfg["x_step_mm"]) + y_idx = _index_for(y_mm, cfg["y_step_mm"]) + x_label = _index_to_alpha(x_idx) if cfg["x_alpha"] else str(x_idx) + y_label = _index_to_alpha(y_idx) if cfg["y_alpha"] else str(y_idx) + return cfg["format"].format(x=x_label, y=y_label) diff --git a/tests/reference/omniflo_export_reference.csv b/tests/reference/omniflo_export_reference.csv index f2da339..14c7f54 100644 --- a/tests/reference/omniflo_export_reference.csv +++ b/tests/reference/omniflo_export_reference.csv @@ -1,109 +1,109 @@ -Elementnummer;TeileArt;TeileId;Bezeichnung;Anzahl;Merkmale -1;"Omniflo Kurve";"0000";"OFBogen :1";1;{"Kurvenwinkel": 22.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104025"} -2;"Omniflo Kurve";"0000";"OFBogen :2";1;{"Kurvenwinkel": 22.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104025+0_B10090"} -3;"Omniflo Kurve";"0000";"OFBogen :3";1;{"Kurvenwinkel": 22.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104025+0_B10091"} -4;"Omniflo Kurve";"0000";"OFBogen :4";1;{"Kurvenwinkel": 45.0, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104021"} -5;"Omniflo Kurve";"0000";"OFBogen :5";1;{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104026"} -6;"Omniflo Kurve";"0000";"OFBogen :6";1;{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104026+0_B10071"} -7;"Omniflo Kurve";"0000";"OFBogen :7";1;{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104037"} -8;"Omniflo Kurve";"0000";"OFBogen :8";1;{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104029"} -9;"Omniflo Kurve";"0000";"OFBogen :9";1;{"Kurvenwinkel": 45.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104031"} -10;"Omniflo Kurve";"0000";"OFBogen :10";1;{"Kurvenwinkel": 45.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104031+0_B10060"} -11;"Omniflo Kurve";"0000";"OFBogen :11";1;{"Kurvenwinkel": 45.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104031+0_B10070"} -12;"Omniflo Kurve";"0000";"OFBogen :12";1;{"Kurvenwinkel": 67.5, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104024"} -13;"Omniflo Kurve";"0000";"OFBogen :13";1;{"Kurvenwinkel": 67.5, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104024+0_B10081"} -14;"Omniflo Kurve";"0000";"OFBogen :14";1;{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104027"} -15;"Omniflo Kurve";"0000";"OFBogen :15";1;{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104027+0_B10080"} -16;"Omniflo Kurve";"0000";"OFBogen :16";1;{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104028"} -17;"Omniflo Kurve";"0000";"OFBogen :17";1;{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104065"} -18;"Omniflo Kurve";"0000";"OFBogen :18";1;{"Kurvenwinkel": 90.0, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104022"} -19;"Omniflo Kurve";"0000";"OFBogen :19";1;{"Kurvenwinkel": 90.0, "Radius": 500.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104030"} -20;"Omniflo Kurve";"0000";"OFBogen :20";1;{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104033"} -21;"Omniflo Kurve";"0000";"OFBogen :21";1;{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104033+0_B10040"} -22;"Omniflo Kurve";"0000";"OFBogen :22";1;{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104033+0_B10050"} -23;"Omniflo Kurve";"0000";"OFBogen :23";1;{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104035"} -24;"Omniflo Kurve";"0000";"OFBogen :24";1;{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104041"} -25;"Omniflo Kurve";"0000";"OFBogen :25";1;{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104034"} -26;"Omniflo Kurve";"0000";"OFBogen :26";1;{"Kurvenwinkel": 90.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104066"} -27;"Omniflo Kurve";"0000";"OFBogen :27";1;{"Kurvenwinkel": 180.0, "Radius": 650.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104043"} -28;"Omniflo Weiche";"0000";"OFWeiche :1";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342011"} -29;"Omniflo Weiche";"0000";"OFWeiche :2";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342001"} -30;"Omniflo Weiche";"0000";"OFWeiche :3";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342012"} -31;"Omniflo Weiche";"0000";"OFWeiche :4";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342002"} -32;"Omniflo Weiche";"0000";"OFWeiche :1";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342100"} -33;"Omniflo Weiche";"0000";"OFWeiche :2";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342101"} -34;"Omniflo Weiche";"0000";"OFWeiche :1";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342200"} -35;"Omniflo Weiche";"0000";"OFWeiche :2";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342201"} -36;"Omniflo Weiche";"0000";"OFWeiche :5";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372001"} -37;"Omniflo Weiche";"0000";"OFWeiche :6";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372002"} -38;"Omniflo Weiche";"0000";"OFWeiche :7";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372002+0_BG090090"} -39;"Omniflo Weiche";"0000";"OFWeiche :8";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372004"} -40;"Omniflo Weiche";"0000";"OFWeiche :9";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372005"} -41;"Omniflo Weiche";"0000";"OFWeiche :10";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372005+0_BG090090"} -42;"Omniflo Weiche";"0000";"OFWeiche :11";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372007"} -43;"Omniflo Weiche";"0000";"OFWeiche :12";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372008"} -44;"Omniflo Weiche";"0000";"OFWeiche :13";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372008+0_BG190090"} -45;"Omniflo Weiche";"0000";"OFWeiche :14";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372010"} -46;"Omniflo Weiche";"0000";"OFWeiche :15";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372011"} -47;"Omniflo Weiche";"0000";"OFWeiche :16";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372011+0_BG190090"} -48;"Omniflo Weiche";"0000";"OFWeiche :17";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372021"} -49;"Omniflo Weiche";"0000";"OFWeiche :18";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372022"} -50;"Omniflo Weiche";"0000";"OFWeiche :19";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372024"} -51;"Omniflo Weiche";"0000";"OFWeiche :20";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372025"} -52;"Omniflo Weiche";"0000";"OFWeiche :21";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372027"} -53;"Omniflo Weiche";"0000";"OFWeiche :22";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372028"} -54;"Omniflo Weiche";"0000";"OFWeiche :23";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372028+0_BG080090"} -55;"Omniflo Weiche";"0000";"OFWeiche :24";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372030"} -56;"Omniflo Weiche";"0000";"OFWeiche :25";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372031"} -57;"Omniflo Weiche";"0000";"OFWeiche :26";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372031+0_BG080090"} -58;"Omniflo Weiche";"0000";"OFWeiche :27";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372047"} -59;"Omniflo Weiche";"0000";"OFWeiche :28";1;{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372048"} -60;"Omniflo Weiche";"0000";"OFWeiche :29";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372050"} -61;"Omniflo Weiche";"0000";"OFWeiche :30";1;{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372051"} -62;"Omniflo Weiche";"0000";"OFWeiche :3";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372100"} -63;"Omniflo Weiche";"0000";"OFWeiche :4";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372101"} -64;"Omniflo Weiche";"0000";"OFWeiche :5";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372101"} -65;"Omniflo Weiche";"0000";"OFWeiche :6";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372101+0_BG090090"} -66;"Omniflo Weiche";"0000";"OFWeiche :7";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372101+0_BG090090"} -67;"Omniflo Weiche";"0000";"OFWeiche :8";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372103"} -68;"Omniflo Weiche";"0000";"OFWeiche :9";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372104"} -69;"Omniflo Weiche";"0000";"OFWeiche :10";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372104"} -70;"Omniflo Weiche";"0000";"OFWeiche :11";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372104+0_BG190090"} -71;"Omniflo Weiche";"0000";"OFWeiche :12";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372104+0_BG190090"} -72;"Omniflo Weiche";"0000";"OFWeiche :13";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372106"} -73;"Omniflo Weiche";"0000";"OFWeiche :14";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372107"} -74;"Omniflo Weiche";"0000";"OFWeiche :15";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372109"} -75;"Omniflo Weiche";"0000";"OFWeiche :16";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372110"} -76;"Omniflo Weiche";"0000";"OFWeiche :17";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372110"} -77;"Omniflo Weiche";"0000";"OFWeiche :18";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372110+0_BG080090"} -78;"Omniflo Weiche";"0000";"OFWeiche :19";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372110+0_BG080090"} -79;"Omniflo Weiche";"0000";"OFWeiche :20";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372115"} -80;"Omniflo Weiche";"0000";"OFWeiche :21";1;{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372116"} -81;"Omniflo Weiche";"0000";"OFWeiche :3";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372200"} -82;"Omniflo Weiche";"0000";"OFWeiche :4";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372201"} -83;"Omniflo Weiche";"0000";"OFWeiche :5";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372201"} -84;"Omniflo Weiche";"0000";"OFWeiche :6";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372201+0_BG090090"} -85;"Omniflo Weiche";"0000";"OFWeiche :7";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372201+0_BG090090"} -86;"Omniflo Weiche";"0000";"OFWeiche :8";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372203"} -87;"Omniflo Weiche";"0000";"OFWeiche :9";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372204"} -88;"Omniflo Weiche";"0000";"OFWeiche :10";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372204"} -89;"Omniflo Weiche";"0000";"OFWeiche :11";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372204+0_BG190090"} -90;"Omniflo Weiche";"0000";"OFWeiche :12";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372204+0_BG190090"} -91;"Omniflo Weiche";"0000";"OFWeiche :13";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372206"} -92;"Omniflo Weiche";"0000";"OFWeiche :14";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372207"} -93;"Omniflo Weiche";"0000";"OFWeiche :15";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372209"} -94;"Omniflo Weiche";"0000";"OFWeiche :16";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372210"} -95;"Omniflo Weiche";"0000";"OFWeiche :17";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372210"} -96;"Omniflo Weiche";"0000";"OFWeiche :18";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372210+0_BG080090"} -97;"Omniflo Weiche";"0000";"OFWeiche :19";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372210+0_BG080090"} -98;"Omniflo Weiche";"0000";"OFWeiche :20";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372215"} -99;"Omniflo Weiche";"0000";"OFWeiche :21";1;{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372216"} -100;"Omniflo Weiche";"0000";"OFWeiche :1";1;{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372400"} -101;"Omniflo Weiche";"0000";"OFWeiche :2";1;{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372403"} -102;"Omniflo Weiche";"0000";"OFWeiche :3";1;{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372404"} -103;"Omniflo Weiche";"0000";"OFWeiche :4";1;{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG071090+834372404+0_BG071090"} -104;"Omniflo Weiche";"0000";"OFWeiche :5";1;{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG071090+834372404"} -105;"Omniflo Weiche";"0000";"OFWeiche :6";1;{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372404+0_BG071090"} -106;"Omniflo Weiche";"0000";"OFWeiche :1";1;{"Weichentyp": "Deltaweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372401"} -107;"Omniflo Weiche";"0000";"OFWeiche :1";1;{"Weichentyp": "Sternweiche", "Richtung": "3", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372420"} -108;"Omniflo Sum";"autogenerated_of_json";"Omniflo sum";1;{"Anzahl Bögen": 27, "Anzahl Weichengrundkörper": 0, "Anzahl Einwegweichen": 30, "Anzahl Deltaweichen": 7, "Anzahl Doppelweichen und Dreiwegeweichen": 42, "Anzahl Sternweichen": 1, "Gesamtlänge AP110": 0.0, "Gesamtlänge AP60": 0.0} +Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale +1;"Omniflo Kurve";"0000";"OFBogen :1";"A/A";1;"";"";{"Kurvenwinkel": 22.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104025"} +2;"Omniflo Kurve";"0000";"OFBogen :2";"A/A";1;"";"";{"Kurvenwinkel": 22.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104025+0_B10090"} +3;"Omniflo Kurve";"0000";"OFBogen :3";"A/A";1;"";"";{"Kurvenwinkel": 22.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104025+0_B10091"} +4;"Omniflo Kurve";"0000";"OFBogen :4";"A/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104021"} +5;"Omniflo Kurve";"0000";"OFBogen :5";"A/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104026"} +6;"Omniflo Kurve";"0000";"OFBogen :6";"A/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104026+0_B10071"} +7;"Omniflo Kurve";"0000";"OFBogen :7";"A/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104037"} +8;"Omniflo Kurve";"0000";"OFBogen :8";"A/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104029"} +9;"Omniflo Kurve";"0000";"OFBogen :9";"A/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104031"} +10;"Omniflo Kurve";"0000";"OFBogen :10";"A/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104031+0_B10060"} +11;"Omniflo Kurve";"0000";"OFBogen :11";"B/A";1;"";"";{"Kurvenwinkel": 45.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104031+0_B10070"} +12;"Omniflo Kurve";"0000";"OFBogen :12";"B/A";1;"";"";{"Kurvenwinkel": 67.5, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104024"} +13;"Omniflo Kurve";"0000";"OFBogen :13";"B/A";1;"";"";{"Kurvenwinkel": 67.5, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104024+0_B10081"} +14;"Omniflo Kurve";"0000";"OFBogen :14";"B/A";1;"";"";{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104027"} +15;"Omniflo Kurve";"0000";"OFBogen :15";"B/A";1;"";"";{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104027+0_B10080"} +16;"Omniflo Kurve";"0000";"OFBogen :16";"B/A";1;"";"";{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104028"} +17;"Omniflo Kurve";"0000";"OFBogen :17";"B/A";1;"";"";{"Kurvenwinkel": 67.5, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104065"} +18;"Omniflo Kurve";"0000";"OFBogen :18";"B/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 400.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104022"} +19;"Omniflo Kurve";"0000";"OFBogen :19";"B/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 500.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104030"} +20;"Omniflo Kurve";"0000";"OFBogen :20";"B/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104033"} +21;"Omniflo Kurve";"0000";"OFBogen :21";"C/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104033+0_B10040"} +22;"Omniflo Kurve";"0000";"OFBogen :22";"C/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104033+0_B10050"} +23;"Omniflo Kurve";"0000";"OFBogen :23";"C/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104035"} +24;"Omniflo Kurve";"0000";"OFBogen :24";"C/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104041"} +25;"Omniflo Kurve";"0000";"OFBogen :25";"C/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 630.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104034"} +26;"Omniflo Kurve";"0000";"OFBogen :26";"C/A";1;"";"";{"Kurvenwinkel": 90.0, "Radius": 550.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104066"} +27;"Omniflo Kurve";"0000";"OFBogen :27";"C/A";1;"";"";{"Kurvenwinkel": 180.0, "Radius": 650.0, "Höhe": "2000", "Drehung": 0.0, "SivasNummer": "821104043"} +28;"Omniflo Weiche";"0000";"OFWeiche :1";"C/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342011"} +29;"Omniflo Weiche";"0000";"OFWeiche :2";"C/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342001"} +30;"Omniflo Weiche";"0000";"OFWeiche :3";"C/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342012"} +31;"Omniflo Weiche";"0000";"OFWeiche :4";"D/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342002"} +32;"Omniflo Weiche";"0000";"OFWeiche :1";"D/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342100"} +33;"Omniflo Weiche";"0000";"OFWeiche :2";"D/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342101"} +34;"Omniflo Weiche";"0000";"OFWeiche :1";"D/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342200"} +35;"Omniflo Weiche";"0000";"OFWeiche :2";"D/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 22.5, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834342201"} +36;"Omniflo Weiche";"0000";"OFWeiche :5";"D/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372001"} +37;"Omniflo Weiche";"0000";"OFWeiche :6";"D/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372002"} +38;"Omniflo Weiche";"0000";"OFWeiche :7";"D/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372002+0_BG090090"} +39;"Omniflo Weiche";"0000";"OFWeiche :8";"D/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372004"} +40;"Omniflo Weiche";"0000";"OFWeiche :9";"D/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372005"} +41;"Omniflo Weiche";"0000";"OFWeiche :10";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372005+0_BG090090"} +42;"Omniflo Weiche";"0000";"OFWeiche :11";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372007"} +43;"Omniflo Weiche";"0000";"OFWeiche :12";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372008"} +44;"Omniflo Weiche";"0000";"OFWeiche :13";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372008+0_BG190090"} +45;"Omniflo Weiche";"0000";"OFWeiche :14";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372010"} +46;"Omniflo Weiche";"0000";"OFWeiche :15";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372011"} +47;"Omniflo Weiche";"0000";"OFWeiche :16";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372011+0_BG190090"} +48;"Omniflo Weiche";"0000";"OFWeiche :17";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372021"} +49;"Omniflo Weiche";"0000";"OFWeiche :18";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372022"} +50;"Omniflo Weiche";"0000";"OFWeiche :19";"E/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372024"} +51;"Omniflo Weiche";"0000";"OFWeiche :20";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372025"} +52;"Omniflo Weiche";"0000";"OFWeiche :21";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372027"} +53;"Omniflo Weiche";"0000";"OFWeiche :22";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372028"} +54;"Omniflo Weiche";"0000";"OFWeiche :23";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372028+0_BG080090"} +55;"Omniflo Weiche";"0000";"OFWeiche :24";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372030"} +56;"Omniflo Weiche";"0000";"OFWeiche :25";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372031"} +57;"Omniflo Weiche";"0000";"OFWeiche :26";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372031+0_BG080090"} +58;"Omniflo Weiche";"0000";"OFWeiche :27";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372047"} +59;"Omniflo Weiche";"0000";"OFWeiche :28";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "1", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372048"} +60;"Omniflo Weiche";"0000";"OFWeiche :29";"F/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372050"} +61;"Omniflo Weiche";"0000";"OFWeiche :30";"G/A";1;"";"";{"Weichentyp": "Einzelweiche", "Richtung": "2", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372051"} +62;"Omniflo Weiche";"0000";"OFWeiche :3";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372100"} +63;"Omniflo Weiche";"0000";"OFWeiche :4";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372101"} +64;"Omniflo Weiche";"0000";"OFWeiche :5";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372101"} +65;"Omniflo Weiche";"0000";"OFWeiche :6";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372101+0_BG090090"} +66;"Omniflo Weiche";"0000";"OFWeiche :7";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372101+0_BG090090"} +67;"Omniflo Weiche";"0000";"OFWeiche :8";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372103"} +68;"Omniflo Weiche";"0000";"OFWeiche :9";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372104"} +69;"Omniflo Weiche";"0000";"OFWeiche :10";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372104"} +70;"Omniflo Weiche";"0000";"OFWeiche :11";"G/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372104+0_BG190090"} +71;"Omniflo Weiche";"0000";"OFWeiche :12";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372104+0_BG190090"} +72;"Omniflo Weiche";"0000";"OFWeiche :13";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372106"} +73;"Omniflo Weiche";"0000";"OFWeiche :14";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372107"} +74;"Omniflo Weiche";"0000";"OFWeiche :15";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372109"} +75;"Omniflo Weiche";"0000";"OFWeiche :16";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372110"} +76;"Omniflo Weiche";"0000";"OFWeiche :17";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372110"} +77;"Omniflo Weiche";"0000";"OFWeiche :18";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372110+0_BG080090"} +78;"Omniflo Weiche";"0000";"OFWeiche :19";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372110+0_BG080090"} +79;"Omniflo Weiche";"0000";"OFWeiche :20";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372115"} +80;"Omniflo Weiche";"0000";"OFWeiche :21";"H/A";1;"";"";{"Weichentyp": "Doppelweiche", "Richtung": "3", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372116"} +81;"Omniflo Weiche";"0000";"OFWeiche :3";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372200"} +82;"Omniflo Weiche";"0000";"OFWeiche :4";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372201"} +83;"Omniflo Weiche";"0000";"OFWeiche :5";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372201"} +84;"Omniflo Weiche";"0000";"OFWeiche :6";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372201+0_BG090090"} +85;"Omniflo Weiche";"0000";"OFWeiche :7";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG090090+834372201+0_BG090090"} +86;"Omniflo Weiche";"0000";"OFWeiche :8";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372203"} +87;"Omniflo Weiche";"0000";"OFWeiche :9";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372204"} +88;"Omniflo Weiche";"0000";"OFWeiche :10";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372204"} +89;"Omniflo Weiche";"0000";"OFWeiche :11";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372204+0_BG190090"} +90;"Omniflo Weiche";"0000";"OFWeiche :12";"I/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 45.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG190090+834372204+0_BG190090"} +91;"Omniflo Weiche";"0000";"OFWeiche :13";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372206"} +92;"Omniflo Weiche";"0000";"OFWeiche :14";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372207"} +93;"Omniflo Weiche";"0000";"OFWeiche :15";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372209"} +94;"Omniflo Weiche";"0000";"OFWeiche :16";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372210"} +95;"Omniflo Weiche";"0000";"OFWeiche :17";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372210"} +96;"Omniflo Weiche";"0000";"OFWeiche :18";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372210+0_BG080090"} +97;"Omniflo Weiche";"0000";"OFWeiche :19";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG080090+834372210+0_BG080090"} +98;"Omniflo Weiche";"0000";"OFWeiche :20";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372215"} +99;"Omniflo Weiche";"0000";"OFWeiche :21";"J/A";1;"";"";{"Weichentyp": "Dreiwegeweiche", "Richtung": "7", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372216"} +100;"Omniflo Weiche";"0000";"OFWeiche :1";"J/A";1;"";"";{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372400"} +101;"Omniflo Weiche";"0000";"OFWeiche :2";"K/A";1;"";"";{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372403"} +102;"Omniflo Weiche";"0000";"OFWeiche :3";"K/A";1;"";"";{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372404"} +103;"Omniflo Weiche";"0000";"OFWeiche :4";"K/A";1;"";"";{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG071090+834372404+0_BG071090"} +104;"Omniflo Weiche";"0000";"OFWeiche :5";"K/A";1;"";"";{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "0_BG071090+834372404"} +105;"Omniflo Weiche";"0000";"OFWeiche :6";"K/A";1;"";"";{"Weichentyp": "Dreifachweiche", "Richtung": "3", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": true, "SivasNummer": "834372404+0_BG071090"} +106;"Omniflo Weiche";"0000";"OFWeiche :1";"K/A";1;"";"";{"Weichentyp": "Deltaweiche", "Richtung": "7", "Weichenwinkel": 90.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372401"} +107;"Omniflo Weiche";"0000";"OFWeiche :1";"K/A";1;"";"";{"Weichentyp": "Sternweiche", "Richtung": "3", "Weichenwinkel": 0.0, "Höhe": "2000", "Drehung": 0.0, "Antrieb Kurve": false, "SivasNummer": "834372420"} +108;"Omniflo Sum";"autogenerated_of_json";"Omniflo sum";"";1;"";"";{"Anzahl Bögen": 27, "Anzahl Weichengrundkörper": 0, "Anzahl Einwegweichen": 30, "Anzahl Deltaweichen": 7, "Anzahl Doppelweichen und Dreiwegeweichen": 42, "Anzahl Sternweichen": 1, "Gesamtlänge AP110": 0.0, "Gesamtlänge AP60": 0.0} diff --git a/tests/test_foerderer.py b/tests/test_foerderer.py index 7515323..9d228c0 100644 --- a/tests/test_foerderer.py +++ b/tests/test_foerderer.py @@ -202,8 +202,8 @@ class TestFoerdererExportCSV: def test_header_felder(self): """CSV-Header muss korrekte Spaltenbezeichnungen haben.""" - expected = ["Elementnummer", "TeileArt", "TeileId", - "Bezeichnung", "Anzahl", "Merkmale"] + expected = ["Elementnummer", "TeileArt", "TeileId", "Bezeichnung", + "Planquadrat", "Anzahl", "Position", "Boundingbox", "Merkmale"] for i, name in enumerate(expected): assert self.header[i] == name, ( f"Header[{i}]: erwartet '{name}', ist '{self.header[i]}'" @@ -226,19 +226,19 @@ class TestFoerdererExportCSV: def test_anzahl_spalte_ist_eins(self): """Anzahl-Spalte muss fuer alle Zeilen '1' sein.""" for i, row in enumerate(self.rows): - if len(row) < 5: + if len(row) < 6: continue - assert row[4] == "1", ( - f"Zeile {i + 2}: Anzahl={row[4]}, erwartet 1" + assert row[5] == "1", ( + f"Zeile {i + 2}: Anzahl={row[5]}, erwartet 1" ) def test_merkmale_sind_valides_json(self): """Merkmale-Spalte muss valides JSON enthalten.""" for i, row in enumerate(self.rows): - if len(row) < 6: + if len(row) < 9: continue try: - json.loads(row[5]) + json.loads(row[8]) except json.JSONDecodeError as e: pytest.fail(f"Zeile {i + 2}: Merkmale ist kein valides JSON: {e}") @@ -247,9 +247,9 @@ class TestFoerdererExportCSV: required = {"Typ", "Winkel", "DeltaH_mm", "DeltaL_mm", "L_VF_m", "Hoehe_Von_mm", "Hoehe_Bis_mm"} for i, row in enumerate(self.rows): - if len(row) < 6: + if len(row) < 9: continue - merkmale = json.loads(row[5]) + merkmale = json.loads(row[8]) missing = required - set(merkmale.keys()) assert not missing, ( f"Zeile {i + 2}: Fehlende Merkmale-Felder: {missing}" diff --git a/tests/test_omniflo.py b/tests/test_omniflo.py index 2816277..d1b32bb 100644 --- a/tests/test_omniflo.py +++ b/tests/test_omniflo.py @@ -107,7 +107,7 @@ class TestOmnifloExportUnit: out_dir = _output_dir() os.makedirs(out_dir, exist_ok=True) csv_path = os.path.join(out_dir, "omniflo_export.csv") - header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Anzahl;Merkmale" + header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale" with open(csv_path, "w", encoding="utf-8") as f: f.write(header + "\n") for item in self.items: @@ -333,7 +333,7 @@ def _reference_dir(): def _normalize_row(line): """Splittet eine CSV-Zeile und ersetzt die TeileId (UUID) durch Platzhalter.""" - cols = line.strip().split(";", 5) + cols = line.strip().split(";", 8) if len(cols) >= 3: cols[2] = "" return cols