This commit is contained in:
2026-07-23 09:08:19 +02:00
18 changed files with 701 additions and 303 deletions
+76 -5
View File
@@ -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)
)
+86 -5
View File
@@ -1,14 +1,19 @@
@echo off
setlocal EnableDelayedExpansion
REM ================================================================
REM run_tests.bat - Testausfuehrung fuer SSG_LIB
REM
REM Schalter:
REM --check Fuehrt pytest-Validierung aus
REM (ohne) Zeigt Hilfe an
REM --check Fuehrt pytest-Validierung aus
REM --diff_references Vergleicht CSVs in tests\reference und tests\output,
REM ruft bei Unterschieden das Diff-Tool (meld) auf
REM (ohne) Zeigt Hilfe an
REM
REM Beispiele:
REM bin\run_tests.bat --check
REM bin\run_tests.bat --check test_kreisel.py
REM bin\run_tests.bat --diff_references
REM bin\run_tests.bat --diff_references kreisel_tests_export.csv
REM ================================================================
REM Umgebung setzen
@@ -23,6 +28,8 @@ if exist "%DXFMAKRO%\.venv\Scripts\activate.bat" (
set DO_CHECK=0
set CHECK_ARG=
set DO_DIFF=0
set DIFF_ARG=
REM Argumente parsen
:parse_args
@@ -36,11 +43,20 @@ if "%~1"=="--check" (
shift
goto :parse_args
)
if "%~1"=="--diff_references" (
set DO_DIFF=1
if not "%~2"=="" (
set "DIFF_ARG=%~2"
shift
)
shift
goto :parse_args
)
echo Unbekannter Schalter: %~1
goto :show_help
:after_args
if %DO_CHECK%==0 goto :show_help
if %DO_CHECK%==0 if %DO_DIFF%==0 goto :show_help
REM ================================================================
REM --check: pytest-Validierung
@@ -79,18 +95,83 @@ if %DO_CHECK%==1 (
echo ================================================================
)
REM ================================================================
REM --diff_references: CSV-Referenzvergleich
REM ================================================================
if %DO_DIFF%==1 (
echo.
echo ================================================================
echo REFERENZVERGLEICH ^(--diff_references^)
echo ================================================================
if not defined DXFM_DIFFTOOL (
echo.
echo FEHLER: Kein Diff-Tool ^(meld^) gefunden - siehe setenv.bat.
echo meld installieren: https://meldmerge.org
exit /b 1
)
set DIFF_COUNT=0
if not "%DIFF_ARG%"=="" (
if not exist "%DXFM_TESTREF%\%DIFF_ARG%" (
echo FEHLER: Referenzdatei nicht gefunden: %DXFM_TESTREF%\%DIFF_ARG%
exit /b 1
)
call :diff_one "%DXFM_TESTREF%\%DIFF_ARG%"
) else (
for %%F in ("%DXFM_TESTREF%\*.csv") do call :diff_one "%%F"
)
echo.
if !DIFF_COUNT!==0 (
echo ================================================================
echo ERGEBNIS: KEINE UNTERSCHIEDE GEFUNDEN
echo ================================================================
) else (
echo ================================================================
echo ERGEBNIS: !DIFF_COUNT! DATEI^(EN^) MIT UNTERSCHIEDEN
echo ================================================================
)
)
exit /b 0
REM ----------------------------------------------------------------
REM :diff_one <referenzdatei>
REM Vergleicht eine Referenzdatei mit der gleichnamigen Output-Datei
REM und ruft bei Unterschieden das Diff-Tool auf.
REM ----------------------------------------------------------------
:diff_one
set "REF_FILE=%~1"
set "OUT_FILE=%DXFM_TESTOUT%\%~nx1"
if not exist "%OUT_FILE%" (
echo WARNUNG: Keine Output-Datei fuer %~nx1 gefunden - uebersprungen.
goto :eof
)
fc "%REF_FILE%" "%OUT_FILE%" >nul 2>nul
if errorlevel 1 (
set /a DIFF_COUNT+=1
echo Unterschied: %~nx1
"%DXFM_DIFFTOOL%" "%REF_FILE%" "%OUT_FILE%"
)
goto :eof
:show_help
echo.
echo Aufruf: bin\run_tests.bat --check [testdatei]
echo bin\run_tests.bat --diff_references [csv-datei]
echo.
echo Schalter:
echo --check Fuehrt pytest-Validierung fuer alle Module aus
echo --check test_kreisel.py Validiert nur Kreisel-Tests
echo --check Fuehrt pytest-Validierung fuer alle Module aus
echo --check test_kreisel.py Validiert nur Kreisel-Tests
echo --diff_references Vergleicht alle CSVs in tests\reference/output,
echo ruft bei Unterschieden meld auf
echo --diff_references datei.csv Vergleicht nur die angegebene CSV-Datei
echo.
echo Workflow:
echo 1. In BricsCAD: SSG_RUN_ALL_TESTS ausfuehren
echo 2. bin\run_tests.bat --check
echo 3. bin\run_tests.bat --diff_references
echo.
exit /b 1
+13
View File
@@ -41,6 +41,18 @@ if exist "C:\Program Files\Bricsys\BricsCAD V25 de_DE\bricscad.exe" (
echo Keine BricsCAD-Installation gefunden.
)
REM Diff-Tool fuer Referenzvergleich (run_tests.bat --diff_references) ermitteln
set "DXFM_DIFFTOOL="
for /f "delims=" %%D in ('where meld 2^>nul') do (
if not defined DXFM_DIFFTOOL set "DXFM_DIFFTOOL=%%D"
)
if not defined DXFM_DIFFTOOL (
if exist "C:\Program Files\Meld\Meld.exe" set "DXFM_DIFFTOOL=C:\Program Files\Meld\Meld.exe"
)
if not defined DXFM_DIFFTOOL (
echo HINWEIS: Kein Diff-Tool ^(meld^) gefunden - run_tests.bat --diff_references steht nicht zur Verfuegung.
)
REM Ueberladen von Umgebungsvariablen durch _setenv.bat (z.B. DXFM_DIM=3D)
if exist "%~dp0_setenv.bat" (
echo Lade lokale Umgebungseinstellungen aus _setenv.bat...
@@ -95,6 +107,7 @@ echo DXFMAKRO = %DXFMAKRO%
echo DXFM_DIM = %DXFM_DIM%
echo DXFM_BLOCKS = %DXFM_BLOCKS%
echo DXFM_OMNIFLO = %DXFM_OMNIFLO%
echo DXFM_DIFFTOOL = %DXFM_DIFFTOOL%
echo ================================================================
echo.
+38
View File
@@ -27,3 +27,41 @@ 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}
[Nachbarschaft]
# Toleranz fuer die Nachbarschaftserkennung beim CSV-Export (Spalte "Nachbarn").
# Die Bounding-Box jedes Elements wird um die Haelfte dieses Werts nach allen
# Seiten erweitert, bevor per STRtree (shapely) auf Ueberschneidung mit anderen
# Elementen geprueft wird - zwei Elemente mit einem Abstand <= toleranz_mm
# (z.B. zwei Kreisel) gelten dann ebenfalls als benachbart. Wert in mm.
toleranz_mm=200
+29 -29
View File
@@ -1,7 +1,7 @@
[
{
"Sivasnr": 821104025,
"ProfilTyp": "APB 110 R 550/22,5° 84/522",
"ProfilTyp": "APB 110 R 550/22,5 84/522",
"Radius": 550,
"KurvenWinkel": 22.5,
"Breite": 84,
@@ -12,7 +12,7 @@
},
{
"Sivasnr": "821104025+0_B10090",
"ProfilTyp": "APB 110 R 550/22,5° 84/522 mit TEF Innen",
"ProfilTyp": "APB 110 R 550/22,5 84/522 mit TEF Innen",
"Radius": 550,
"KurvenWinkel": 22.5,
"Breite": 84,
@@ -23,7 +23,7 @@
},
{
"Sivasnr": "821104025+0_B10091",
"ProfilTyp": "APB 110 R 550/22,5° 84/522 mit TEF Aussen",
"ProfilTyp": "APB 110 R 550/22,5 84/522 mit TEF Aussen",
"Radius": 550,
"KurvenWinkel": 22.5,
"Breite": 84,
@@ -34,7 +34,7 @@
},
{
"Sivasnr": 821104021,
"ProfilTyp": "APB 110 R 400/45° 400/670",
"ProfilTyp": "APB 110 R 400/45 400/670",
"Radius": 400,
"KurvenWinkel": 45,
"Breite": 400,
@@ -44,7 +44,7 @@
},
{
"Sivasnr": 821104026,
"ProfilTyp": "APB 110 R 550/45° 232/610",
"ProfilTyp": "APB 110 R 550/45 232/610",
"Radius": 550,
"KurvenWinkel": 45,
"Breite": 232,
@@ -54,7 +54,7 @@
},
{
"Sivasnr": "821104026+0_B10071",
"ProfilTyp": "APB 110 R 550/45° 232/610 mit TEF Innen",
"ProfilTyp": "APB 110 R 550/45 232/610 mit TEF Innen",
"Radius": 550,
"KurvenWinkel": 45,
"Breite": 232,
@@ -64,7 +64,7 @@
},
{
"Sivasnr": 821104037,
"ProfilTyp": "APB 110 R 550/45° 205/337",
"ProfilTyp": "APB 110 R 550/45 205/337",
"Radius": 550,
"KurvenWinkel": 45,
"Breite": 205,
@@ -74,7 +74,7 @@
},
{
"Sivasnr": 821104029,
"ProfilTyp": "APB 110 R 550/45° 191/552",
"ProfilTyp": "APB 110 R 550/45 191/552",
"Radius": 550,
"KurvenWinkel": 45,
"Breite": 191,
@@ -84,7 +84,7 @@
},
{
"Sivasnr": 821104031,
"ProfilTyp": "APB 110 R 630/45° 400/825",
"ProfilTyp": "APB 110 R 630/45 400/825",
"Radius": 630,
"KurvenWinkel": 45,
"Breite": 400,
@@ -94,7 +94,7 @@
},
{
"Sivasnr": "821104031+0_B10060",
"ProfilTyp": "APB 110 R 630/45° 400/825 mit TEF Aussen",
"ProfilTyp": "APB 110 R 630/45 400/825 mit TEF Aussen",
"Radius": 630,
"KurvenWinkel": 45,
"Breite": 400,
@@ -104,7 +104,7 @@
},
{
"Sivasnr": "821104031+0_B10070",
"ProfilTyp": "APB 110 R 630/45° 400/825 mit TEF Innen",
"ProfilTyp": "APB 110 R 630/45 400/825 mit TEF Innen",
"Radius": 630,
"KurvenWinkel": 45,
"Breite": 400,
@@ -114,7 +114,7 @@
},
{
"Sivasnr": 821104024,
"ProfilTyp": "APB 110 R 400/67,5° 339/508",
"ProfilTyp": "APB 110 R 400/67,5 339/508",
"Radius": 400,
"KurvenWinkel": 67.5,
"Breite": 339,
@@ -124,7 +124,7 @@
},
{
"Sivasnr": "821104024+0_B10081",
"ProfilTyp": "APB 110 R 400/67,5° 339/508 mit TEF Innen",
"ProfilTyp": "APB 110 R 400/67,5 339/508 mit TEF Innen",
"Radius": 400,
"KurvenWinkel": 67.5,
"Breite": 339,
@@ -134,7 +134,7 @@
},
{
"Sivasnr": 821104027,
"ProfilTyp": "APB 110 R 550/67,5° 488/778",
"ProfilTyp": "APB 110 R 550/67,5 488/778",
"Radius": 550,
"KurvenWinkel": 67.5,
"Breite": 448,
@@ -144,7 +144,7 @@
},
{
"Sivasnr": "821104027+0_B10080",
"ProfilTyp": "APB 110 R 550/67,5° 488/778 mit TEF Innen",
"ProfilTyp": "APB 110 R 550/67,5 488/778 mit TEF Innen",
"Radius": 550,
"KurvenWinkel": 67.5,
"Breite": 448,
@@ -154,7 +154,7 @@
},
{
"Sivasnr": 821104028,
"ProfilTyp": "APB 110 R 550/67,5° 420/582",
"ProfilTyp": "APB 110 R 550/67,5 420/582",
"Radius": 550,
"KurvenWinkel": 67.5,
"Breite": 420,
@@ -164,7 +164,7 @@
},
{
"Sivasnr": 821104065,
"ProfilTyp": "APB 110 R 550/67,5° 498/758",
"ProfilTyp": "APB 110 R 550/67,5 498/758",
"Radius": 550,
"KurvenWinkel": 67.5,
"Breite": 498,
@@ -174,7 +174,7 @@
},
{
"Sivasnr": 821094101,
"ProfilTyp": "APB 60 R 515/90° 135/135",
"ProfilTyp": "APB 60 R 515/90 135/135",
"Radius": 515,
"KurvenWinkel": 90,
"Breite": 650,
@@ -184,7 +184,7 @@
},
{
"Sivasnr": 821094040,
"ProfilTyp": "APB 60 R 515/90° 295/295",
"ProfilTyp": "APB 60 R 515/90 295/295",
"Radius": 515,
"KurvenWinkel": 90,
"Breite": 810,
@@ -194,7 +194,7 @@
},
{
"Sivasnr": 821104022,
"ProfilTyp": "APB 110 R 400/90° 500/500",
"ProfilTyp": "APB 110 R 400/90 500/500",
"Radius": 400,
"KurvenWinkel": 90,
"Breite": 500,
@@ -204,7 +204,7 @@
},
{
"Sivasnr": 821104030,
"ProfilTyp": "APB 110 R 500/90° 550/550",
"ProfilTyp": "APB 110 R 500/90 550/550",
"Radius": 500,
"KurvenWinkel": 90,
"Breite": 550,
@@ -214,7 +214,7 @@
},
{
"Sivasnr": 821104033,
"ProfilTyp": "APB 110 R 630/90° 800/800",
"ProfilTyp": "APB 110 R 630/90 800/800",
"Radius": 630,
"KurvenWinkel": 90,
"Breite": 800,
@@ -224,7 +224,7 @@
},
{
"Sivasnr": "821104033+0_B10040",
"ProfilTyp": "APB 110 R 630/90° 800/800 mit TEF Aussen",
"ProfilTyp": "APB 110 R 630/90 800/800 mit TEF Aussen",
"Radius": 630,
"KurvenWinkel": 90,
"Breite": 800,
@@ -234,7 +234,7 @@
},
{
"Sivasnr": "821104033+0_B10050",
"ProfilTyp": "APB 110 R 630/90° 800/800 mit TEF Innen",
"ProfilTyp": "APB 110 R 630/90 800/800 mit TEF Innen",
"Radius": 630,
"KurvenWinkel": 90,
"Breite": 800,
@@ -244,7 +244,7 @@
},
{
"Sivasnr": 821104035,
"ProfilTyp": "APB 110 R 630/90° 850/870",
"ProfilTyp": "APB 110 R 630/90 850/870",
"Radius": 630,
"KurvenWinkel": 90,
"Breite": 850,
@@ -254,7 +254,7 @@
},
{
"Sivasnr": 821104041,
"ProfilTyp": "APB 110 R 630/90° 850/690",
"ProfilTyp": "APB 110 R 630/90 850/690",
"Radius": 630,
"KurvenWinkel": 90,
"Breite": 850,
@@ -264,7 +264,7 @@
},
{
"Sivasnr": 821104034,
"ProfilTyp": "APB 110 R 630/90° 850/890",
"ProfilTyp": "APB 110 R 630/90 850/890",
"Radius": 630,
"KurvenWinkel": 90,
"Breite": 850,
@@ -274,7 +274,7 @@
},
{
"Sivasnr": 821104066,
"ProfilTyp": "APB 110 R 550/90° 900/605",
"ProfilTyp": "APB 110 R 550/90 900/605",
"Radius": 550,
"KurvenWinkel": 90,
"Breite": 900,
@@ -284,7 +284,7 @@
},
{
"Sivasnr": 821104043,
"ProfilTyp": "APB 110 R 630/180° 1300/800",
"ProfilTyp": "APB 110 R 630/180 1300/800",
"Radius": 650,
"KurvenWinkel": 180,
"Breite": 1300,
+56 -56
View File
@@ -1,7 +1,7 @@
[
{
"Sivasnr": 834372001,
"ProfilTyp": "WEICHE S 45°-L-350/700, KPL. MIT M",
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -13,7 +13,7 @@
},
{
"Sivasnr": 834372002,
"ProfilTyp": "WEICHE S 45°-L-350/700, KPL. MIT P",
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -25,7 +25,7 @@
},
{
"Sivasnr": "834372002+0_BG090090",
"ProfilTyp": "WEICHE S 45°-L-350/700, KPL. MIT P mit TEF Innen",
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -37,7 +37,7 @@
},
{
"Sivasnr": 834372004,
"ProfilTyp": "WEICHE S 45°-R-350/700, KPL. MIT M",
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -49,7 +49,7 @@
},
{
"Sivasnr": 834372005,
"ProfilTyp": "WEICHE S 45°-R-350/700, KPL. MIT P",
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -61,7 +61,7 @@
},
{
"Sivasnr": "834372005+0_BG090090",
"ProfilTyp": "WEICHE S 45°-R-350/700, KPL. MIT P mit TEF Innen",
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -73,7 +73,7 @@
},
{
"Sivasnr": 834372007,
"ProfilTyp": "WEICHE S 45°-L-400/750, KPL. MIT M",
"ProfilTyp": "WEICHE S 45-L-400/750, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -85,7 +85,7 @@
},
{
"Sivasnr": 834372008,
"ProfilTyp": "WEICHE S 45°-L-400/750, KPL. MIT P",
"ProfilTyp": "WEICHE S 45-L-400/750, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -97,7 +97,7 @@
},
{
"Sivasnr": "834372008+0_BG190090",
"ProfilTyp": "WEICHE S 45°-L-400/750, KPL. MIT P mit TEF Ihnen",
"ProfilTyp": "WEICHE S 45-L-400/750, KPL. MIT P mit TEF Ihnen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -109,7 +109,7 @@
},
{
"Sivasnr": 834372010,
"ProfilTyp": "WEICHE S 45°-R-400/750, KPL. MIT M",
"ProfilTyp": "WEICHE S 45-R-400/750, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -121,7 +121,7 @@
},
{
"Sivasnr": 834372011,
"ProfilTyp": "WEICHE S 45°-R-400/750, KPL. MIT P",
"ProfilTyp": "WEICHE S 45-R-400/750, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -133,7 +133,7 @@
},
{
"Sivasnr": "834372011+0_BG190090",
"ProfilTyp": "WEICHE S 45°-R-400/750, KPL. MIT P mit TEF Ihnen",
"ProfilTyp": "WEICHE S 45-R-400/750, KPL. MIT P mit TEF Ihnen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -145,7 +145,7 @@
},
{
"Sivasnr": 834372021,
"ProfilTyp": "WEICHE S 90°-L-500/600, KPL. MIT M",
"ProfilTyp": "WEICHE S 90-L-500/600, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -157,7 +157,7 @@
},
{
"Sivasnr": 834372022,
"ProfilTyp": "WEICHE S 90°-L-500/600, KPL. MIT P",
"ProfilTyp": "WEICHE S 90-L-500/600, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -169,7 +169,7 @@
},
{
"Sivasnr": 834372024,
"ProfilTyp": "WEICHE S 90°-R-500/600, KPL. MIT M",
"ProfilTyp": "WEICHE S 90-R-500/600, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -181,7 +181,7 @@
},
{
"Sivasnr": 834372025,
"ProfilTyp": "WEICHE S 90°-R-500/600, KPL. MIT P",
"ProfilTyp": "WEICHE S 90-R-500/600, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -193,7 +193,7 @@
},
{
"Sivasnr": 834372027,
"ProfilTyp": "WEICHE S 90°-L-700/700, KPL. MIT M",
"ProfilTyp": "WEICHE S 90-L-700/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -205,7 +205,7 @@
},
{
"Sivasnr": 834372028,
"ProfilTyp": "WEICHE S 90°-L-700/700, KPL. MIT P",
"ProfilTyp": "WEICHE S 90-L-700/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -217,7 +217,7 @@
},
{
"Sivasnr": "834372028+0_BG080090",
"ProfilTyp": "WEICHE S 90°-L-700/700, KPL. MIT P mit TEF Innen",
"ProfilTyp": "WEICHE S 90-L-700/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -229,7 +229,7 @@
},
{
"Sivasnr": 834372030,
"ProfilTyp": "WEICHE S 90°-R-700/700, KPL. MIT M",
"ProfilTyp": "WEICHE S 90-R-700/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -241,7 +241,7 @@
},
{
"Sivasnr": 834372031,
"ProfilTyp": "WEICHE S 90°-R-700/700, KPL. MIT P",
"ProfilTyp": "WEICHE S 90-R-700/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -253,7 +253,7 @@
},
{
"Sivasnr": "834372031+0_BG080090",
"ProfilTyp": "WEICHE S 90°-R-700/700, KPL. MIT P mit TEF Innen",
"ProfilTyp": "WEICHE S 90-R-700/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -313,7 +313,7 @@
},
{
"Sivasnr": 834372100,
"ProfilTyp": "WEICHE S D 45°-350/700, KPL. MIT M",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT M",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -324,7 +324,7 @@
},
{
"Sivasnr": 834372101,
"ProfilTyp": "WEICHE S D 45°-350/700, KPL. MIT P",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -335,7 +335,7 @@
},
{
"Sivasnr": "0_BG090090+834372101",
"ProfilTyp": "WEICHE S D 45°-350/700, KPL. MIT P mit TEF links",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -346,7 +346,7 @@
},
{
"Sivasnr": "834372101+0_BG090090",
"ProfilTyp": "WEICHE S D 45°-350/700, KPL. MIT P mit TEF rechts",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -357,7 +357,7 @@
},
{
"Sivasnr": "0_BG090090+834372101+0_BG090090",
"ProfilTyp": "WEICHE S D 45°-350/700, KPL. MIT P mit TEF beideseitig",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -368,7 +368,7 @@
},
{
"Sivasnr": 834372103,
"ProfilTyp": "WEICHE S D 45°-400/750, KPL. MIT M",
"ProfilTyp": "WEICHE S D 45-400/750, KPL. MIT M",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -379,7 +379,7 @@
},
{
"Sivasnr": 834372104,
"ProfilTyp": "WEICHE S D 45°-400/750, KPL. MIT P",
"ProfilTyp": "WEICHE S D 45-400/750, KPL. MIT P",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -390,7 +390,7 @@
},
{
"Sivasnr": "0_BG190090+834372104",
"ProfilTyp": "WEICHE S D 45°-400/750, KPL. MIT P mit TEF links",
"ProfilTyp": "WEICHE S D 45-400/750, KPL. MIT P mit TEF links",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -401,7 +401,7 @@
},
{
"Sivasnr": "834372104+0_BG190090",
"ProfilTyp": "WEICHE S D 45°-400/750, KPL. MIT P mit TEF rechts",
"ProfilTyp": "WEICHE S D 45-400/750, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -412,7 +412,7 @@
},
{
"Sivasnr": "0_BG190090+834372104+0_BG190090",
"ProfilTyp": "WEICHE S D 45°-400/750, KPL. MIT P mit TEF beideseitig",
"ProfilTyp": "WEICHE S D 45-400/750, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -423,7 +423,7 @@
},
{
"Sivasnr": 834372106,
"ProfilTyp": "WEICHE S D 90°-500/600, KPL. MIT M",
"ProfilTyp": "WEICHE S D 90-500/600, KPL. MIT M",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -434,7 +434,7 @@
},
{
"Sivasnr": 834372107,
"ProfilTyp": "WEICHE S D 90°-500/600, KPL. MIT P",
"ProfilTyp": "WEICHE S D 90-500/600, KPL. MIT P",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -445,7 +445,7 @@
},
{
"Sivasnr": 834372109,
"ProfilTyp": "WEICHE S D 90°-700/700, KPL. MIT M",
"ProfilTyp": "WEICHE S D 90-700/700, KPL. MIT M",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -456,7 +456,7 @@
},
{
"Sivasnr": 834372110,
"ProfilTyp": "WEICHE S D 90°-700/700, KPL. MIT P",
"ProfilTyp": "WEICHE S D 90-700/700, KPL. MIT P",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -467,7 +467,7 @@
},
{
"Sivasnr": "0_BG080090+834372110",
"ProfilTyp": "WEICHE S D 90°-700/700, KPL. MIT P mit TEF links",
"ProfilTyp": "WEICHE S D 90-700/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -478,7 +478,7 @@
},
{
"Sivasnr": "834372110+0_BG080090",
"ProfilTyp": "WEICHE S D 90°-700/700, KPL. MIT P mit TEF rechts",
"ProfilTyp": "WEICHE S D 90-700/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -489,7 +489,7 @@
},
{
"Sivasnr": "0_BG080090+834372110+0_BG080090",
"ProfilTyp": "WEICHE S D 90°-700/700, KPL. MIT P mit TEF beideseitig",
"ProfilTyp": "WEICHE S D 90-700/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -522,7 +522,7 @@
},
{
"Sivasnr": 834372200,
"ProfilTyp": "WEICHE S T 45°-350/700, KPL. MIT M",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT M",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -533,7 +533,7 @@
},
{
"Sivasnr": 834372201,
"ProfilTyp": "WEICHE S T 45°-350/700, KPL. MIT P",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -544,7 +544,7 @@
},
{
"Sivasnr": "0_BG090090+834372201",
"ProfilTyp": "WEICHE S T 45°-350/700, KPL. MIT P mit TEF links",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -555,7 +555,7 @@
},
{
"Sivasnr": "834372201+0_BG090090",
"ProfilTyp": "WEICHE S T 45°-350/700, KPL. MIT P mit TEF rechts",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -566,7 +566,7 @@
},
{
"Sivasnr": "0_BG090090+834372201+0_BG090090",
"ProfilTyp": "WEICHE S T 45°-350/700, KPL. MIT P mit TEF beideseitig",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -577,7 +577,7 @@
},
{
"Sivasnr": 834372203,
"ProfilTyp": "WEICHE S T 45°-400/750, KPL. MIT M",
"ProfilTyp": "WEICHE S T 45-400/750, KPL. MIT M",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
@@ -588,7 +588,7 @@
},
{
"Sivasnr": 834372204,
"ProfilTyp": "WEICHE S T 45°-400/750, KPL. MIT P",
"ProfilTyp": "WEICHE S T 45-400/750, KPL. MIT P",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -599,7 +599,7 @@
},
{
"Sivasnr": "0_BG190090+834372204",
"ProfilTyp": "WEICHE S T 45°-400/750, KPL. MIT P mit TEF links",
"ProfilTyp": "WEICHE S T 45-400/750, KPL. MIT P mit TEF links",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -610,7 +610,7 @@
},
{
"Sivasnr": "834372204+0_BG190090",
"ProfilTyp": "WEICHE S T 45°-400/750, KPL. MIT P mit TEF rechts",
"ProfilTyp": "WEICHE S T 45-400/750, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -621,7 +621,7 @@
},
{
"Sivasnr": "0_BG190090+834372204+0_BG190090",
"ProfilTyp": "WEICHE S T 45°-400/750, KPL. MIT P mit TEF beideseitig",
"ProfilTyp": "WEICHE S T 45-400/750, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
@@ -632,7 +632,7 @@
},
{
"Sivasnr": 834372206,
"ProfilTyp": "WEICHE S T 90°-500/600, KPL. MIT M",
"ProfilTyp": "WEICHE S T 90-500/600, KPL. MIT M",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -643,7 +643,7 @@
},
{
"Sivasnr": 834372207,
"ProfilTyp": "WEICHE S T 90°-500/600, KPL. MIT P",
"ProfilTyp": "WEICHE S T 90-500/600, KPL. MIT P",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -654,7 +654,7 @@
},
{
"Sivasnr": 834372209,
"ProfilTyp": "WEICHE S T 90°-700/700, KPL. MIT M",
"ProfilTyp": "WEICHE S T 90-700/700, KPL. MIT M",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
@@ -665,7 +665,7 @@
},
{
"Sivasnr": 834372210,
"ProfilTyp": "WEICHE S T 90°-700/700, KPL. MIT P",
"ProfilTyp": "WEICHE S T 90-700/700, KPL. MIT P",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -676,7 +676,7 @@
},
{
"Sivasnr": "0_BG080090+834372210",
"ProfilTyp": "WEICHE S T 90°-700/700, KPL. MIT P mit TEF links",
"ProfilTyp": "WEICHE S T 90-700/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -687,7 +687,7 @@
},
{
"Sivasnr": "834372210+0_BG080090",
"ProfilTyp": "WEICHE S T 90°-700/700, KPL. MIT P mit TEF rechts",
"ProfilTyp": "WEICHE S T 90-700/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
@@ -698,7 +698,7 @@
},
{
"Sivasnr": "0_BG080090+834372210+0_BG080090",
"ProfilTyp": "WEICHE S T 90°-700/700, KPL. MIT P mit TEF beideseitig",
"ProfilTyp": "WEICHE S T 90-700/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
+18 -18
View File
@@ -1,30 +1,30 @@
[
{
"Sivasnr": 0_B10001,
"Beschreibung": "Antribestation links für TEF links",
"Radius": ,
"KurvenWinkel": ,
"innen":
"Sivasnr": "0_B10001",
"Beschreibung": "Antriebstation links für TEF links",
"Radius": "",
"KurvenWinkel": "",
"innen": ""
},
{
"Sivasnr": 0_B10020,
"Beschreibung": "Antribestation rechts für TEF rechts",
"Radius": ,
"KurvenWinkel": ,
"innen":
"Sivasnr": "0_B10020",
"Beschreibung": "Antriebstation rechts für TEF rechts",
"Radius": "",
"KurvenWinkel": "",
"innen": ""
},
{
"Sivasnr": YYYYY,
"Sivasnr": "-",
"Beschreibung": "Umlenkspannstation links für TEF links",
"Radius": ,
"KurvenWinkel": ,
"innen":
"Radius": "",
"KurvenWinkel": "",
"innen": ""
},
{
"Sivasnr": YYYYY,
"Sivasnr": "-",
"Beschreibung": "Umlenkspannstation rechts für TEF rechts",
"Radius": ,
"KurvenWinkel": ,
"innen":
"Radius": "",
"KurvenWinkel": "",
"innen": ""
}
]
+9 -9
View File
@@ -1,62 +1,62 @@
[
{
"Sivasnr": 0_B10040,
"Sivasnr": "0_B10040",
"Beschreibung": "TEF Bogen 90° R725",
"Radius": 725,
"KurvenWinkel": 90,
"innen": false
},
{
"Sivasnr": 0_B10050,
"Sivasnr": "0_B10050",
"Beschreibung": "TEF Bogen 90° R535",
"Radius": 535,
"KurvenWinkel": 90,
"innen": true
},
{
"Sivasnr": 0_B10060,
"Sivasnr": "0_B10060",
"Beschreibung": "TEF Bogen 45° R725",
"Radius": 725,
"KurvenWinkel": 45,
"innen": false
},
{
"Sivasnr": 0_B10070,
"Sivasnr": "0_B10070",
"Beschreibung": "TEF Bogen 45° R535",
"Radius": 535,
"KurvenWinkel": 45,
"innen": true
},
{
"Sivasnr": 0_B10071,
"Sivasnr": "0_B10071",
"Beschreibung": "TEF Bogen 45° R450 für S C Delta 1600",
"Radius": 450,
"KurvenWinkel": 45,
"innen": true
},
{
"Sivasnr": 0_B10080,
"Sivasnr": "0_B10080",
"Beschreibung": "TEF Bogen 67.5° R400",
"Radius": 400,
"KurvenWinkel": 67.5,
"innen": true
},
{
"Sivasnr": 0_B10081,
"Sivasnr": "0_B10081",
"Beschreibung": "TEF Bogen 67.5° R250",
"Radius": 250,
"KurvenWinkel": 67.5,
"innen": true
},
{
"Sivasnr": 0_B10090,
"Sivasnr": "0_B10090",
"Beschreibung": "TEF Bogen 22.5° R450",
"Radius": 450,
"KurvenWinkel": 22.5,
"innen": true
},
{
"Sivasnr": 0_B10091,
"Sivasnr": "0_B10091",
"Beschreibung": "TEF Bogen 22.5° R650",
"Radius": 650,
"KurvenWinkel": 22.5,
+20 -20
View File
@@ -1,71 +1,71 @@
[
{
"Sivasnr": _BG080090,
"Sivasnr": "_BG080090",
"Beschreibung": "TEF Bogen für Weiche S 90° 700/700 links",
"Radius": ,
"Radius": "",
"KurvenWinkel": 90,
"innen": true
},
{
"Sivasnr": _BG080090,
"Sivasnr": "_BG080090",
"Beschreibung": "TEF Bogen für Weiche S 90° 700/700 rechts",
"Radius": ,
"Radius": "",
"KurvenWinkel": 90,
"innen": true
},
{
"Sivasnr": _BG081090,
"Sivasnr": "_BG081090",
"Beschreibung": "TEF Bogen für Weiche S 90° 500/600 links",
"Radius": ,
"Radius": "",
"KurvenWinkel": 90,
"innen": true
},
{
"Sivasnr": _BG081090,
"Sivasnr": "_BG081090",
"Beschreibung": "TEF Bogen für Weiche S 90° 500/600 rechts",
"Radius": ,
"Radius": "",
"KurvenWinkel": 90,
"innen": true
},
{
"Sivasnr": _BG190090,
"Sivasnr": "_BG190090",
"Beschreibung": "TEF Bogen für Weiche S 45° 400/750 links",
"Radius": ,
"Radius": "",
"KurvenWinkel": 45,
"innen": true
},
{
"Sivasnr": _BG190090,
"Sivasnr": "_BG190090",
"Beschreibung": "TEF Bogen für Weiche S 45° 400/750 rechts",
"Radius": ,
"Radius": "",
"KurvenWinkel": 45,
"innen": true
},
{
"Sivasnr": _BG090090,
"Sivasnr": "_BG090090",
"Beschreibung": "TEF Bogen für Weiche S 45° 350/700 links",
"Radius": ,
"Radius": "",
"KurvenWinkel": 45,
"innen": true
},
{
"Sivasnr": _BG090090,
"Sivasnr": "_BG090090",
"Beschreibung": "TEF Bogen für Weiche S 45° 350/700 rechts",
"Radius": ,
"Radius": "",
"KurvenWinkel": 45,
"innen": true
},
{
"Sivasnr": _BG071090,
"Sivasnr": "_BG071090",
"Beschreibung": "TEF Bogen für Weiche S C Delta 1600/800 links",
"Radius": ,
"Radius": "",
"KurvenWinkel": 90,
"innen": true
},
{
"Sivasnr": _BG071090,
"Sivasnr": "_BG071090",
"Beschreibung": "TEF Bogen für Weiche S C Delta 1600/800 rechts",
"Radius": ,
"Radius": "",
"KurvenWinkel": 90,
"innen": true
}
+1 -1
View File
@@ -10,7 +10,7 @@ omniflo_weichen : dialog {
: popup_list {
key = "profiltyp";
label = "Profiltyp-Auswahl:";
width = 50;
width = 65;
}
}
+83 -2
View File
@@ -11,7 +11,19 @@ Aufruf:
python export_csv.py <export_raw.json> <data_dir> <output.csv>
CSV-Format:
Elementnummer;TeileArt;TeileId;NachbarIds;Bezeichnung;Planquadrat;rotation;Merkmale
Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Nachbarn;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).
Nachbarn = kommaseparierte TeileId-Liste ueberschneidender Elemente (Bounding-
Box-Ueberschneidung in der x/y-Ebene per shapely-STRtree, Toleranz konfigurierbar
ueber [Nachbarschaft] -> toleranz_mm in cfg/export.cfg), siehe export_neighbors.py.
Position, Boundingbox, Planquadrat und Nachbarn sind nur fuer EXPORTCSV
vorhanden (nicht EXPORTSIVAS) - siehe csv:run-export.
"""
import json
@@ -19,8 +31,12 @@ import sys
import os
from export_blockpatterns import load_patterns, matches_any
from export_planquadrat import load_planquadrat_config, compute_planquadrat
from export_neighbors import load_neighbor_tolerance_mm, compute_neighbor_ids
BLOCKPATTERNS = load_patterns()
PLANQUADRAT_CFG = load_planquadrat_config()
NEIGHBOR_TOLERANCE_MM = load_neighbor_tolerance_mm()
# ---------------------------------------------------------------------------
@@ -219,6 +235,44 @@ 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" enthaelt zusaetzlich die rohen Zahlenwerte fuer die Nachbarschafts-
erkennung (siehe export_neighbors.py), wird nicht in die CSV geschrieben.
"""
bbox = block.get("bbox")
if not bbox:
return {"position": "", "boundingbox": "", "_bbox": None}
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}',
"_bbox": bbox,
}
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 +322,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 +335,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 +362,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 +378,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 +393,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 +409,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 +424,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 +439,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,11 +452,18 @@ 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": "",
})
neighbor_ids = compute_neighbor_ids(items, NEIGHBOR_TOLERANCE_MM)
for item, nachbarn in zip(items, neighbor_ids):
item["nachbarn"] = nachbarn
return items
@@ -401,7 +478,11 @@ 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';"{item["nachbarn"]}"'
f';{merkmale_json}'
)
@@ -433,7 +514,7 @@ def main():
items = process_blocks(blocks, lookup)
header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Anzahl;Merkmale"
header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Nachbarn;Merkmale"
with open(output_csv, "w", encoding="utf-8") as f:
f.write(header + "\n")
for item in items:
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
export_neighbors.py - Ermittelt benachbarte Elemente ueber die Bounding-Box (STRtree).
Zwei Elemente gelten als benachbart, wenn ihre Bounding-Boxes sich in der
x/y-Ebene (Grundriss, Z/Hoehe wird ignoriert) ueberschneiden. Um auch nah
beieinander liegende, aber nicht direkt beruehrende Elemente (z.B. Kreisel)
als benachbart zu erkennen, wird jede Bounding-Box vor der Pruefung um die
Haelfte der konfigurierten Toleranz nach allen Seiten erweitert - zwei
Elemente mit einem Abstand <= toleranz_mm gelten dann ebenfalls als
benachbart. Die Toleranz wird aus cfg/export.cfg ([Nachbarschaft] ->
toleranz_mm) gelesen.
Nur von export_csv.py genutzt (EXPORTCSV), nicht von export_sivas.py.
"""
import configparser
from shapely.geometry import box
from shapely.strtree import STRtree
from export_blockpatterns import cfg_path_from_env
def load_neighbor_tolerance_mm(cfg_path=None):
"""Liest die Nachbarschafts-Toleranz (mm) aus export.cfg. Default: 0."""
if cfg_path is None:
cfg_path = cfg_path_from_env()
parser = configparser.ConfigParser(inline_comment_prefixes=("#",))
parser.read(cfg_path, encoding="utf-8")
return parser.getfloat("Nachbarschaft", "toleranz_mm", fallback=0.0)
def compute_neighbor_ids(items, tolerance_mm):
"""Ermittelt je Item die IDs (item["teileid"]) ueberschneidender Nachbarn.
items = Liste von dict mit "teileid" und optional "_bbox"
({"cx","cy","dx","dy",...}, siehe export.lsp csv:get-bbox / export_csv.py
bbox_columns). Items ohne _bbox (z.B. die synthetische Omniflo-Sum-Zeile)
haben keine Nachbarn.
Rueckgabe: Liste von kommaseparierten Nachbar-ID-Strings, positionsgleich
zu items (nicht ueber die ID dedupliziert, da TeileId nicht zwingend
eindeutig ist).
"""
idx_with_bbox = [i for i, it in enumerate(items) if it.get("_bbox")]
result = [""] * len(items)
if len(idx_with_bbox) < 2:
return result
half_tol = tolerance_mm / 2.0
geoms = []
for i in idx_with_bbox:
bb = items[i]["_bbox"]
minx = bb["cx"] - bb["dx"] / 2.0 - half_tol
maxx = bb["cx"] + bb["dx"] / 2.0 + half_tol
miny = bb["cy"] - bb["dy"] / 2.0 - half_tol
maxy = bb["cy"] + bb["dy"] / 2.0 + half_tol
geoms.append(box(minx, miny, maxx, maxy))
tree = STRtree(geoms)
for local_i, global_i in enumerate(idx_with_bbox):
hits = tree.query(geoms[local_i], predicate="intersects")
neighbor_ids = [
items[idx_with_bbox[int(local_j)]]["teileid"]
for local_j in hits
if int(local_j) != local_i
]
result[global_i] = ", ".join(neighbor_ids)
return result
+71
View File
@@ -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=<Name der Sub-Sektion>, 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)
+7 -37
View File
@@ -4,7 +4,7 @@
export_sivas.py - Erzeugt Sivas-Export-CSV mit gruppierten Zeilen und Summierungszeilen.
Neues CSV-Format:
Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];Hoehe[m];IDs;details
Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details
- Bezeichnung: Wert des Attributs "Bezeichnung" (Kreisel/Eckrad/VF/GF/Strecke).
Bei gruppierten Zeilen (mehrere Bloecke je Zeile) kommasepariert.
@@ -80,13 +80,6 @@ def classify_weiche(eintrag):
return "einzelweiche"
def get_hoehe_mm(block):
"""Liest HOEHE aus Block-Attributen. Fallback: Z-Koordinate."""
attribs = block.get("attribs", {})
v = attribs.get("HOEHE") or str(int(block.get("z", 0) or 0)) or "2000"
return v
def get_id(block):
"""Liest das eindeutige ID-Attribut eines Blocks (von ssg-id-check-all vergeben)."""
return block.get("attribs", {}).get("ID", "")
@@ -101,17 +94,6 @@ def format_sivasnr(sivasnr):
return ", ".join(p.strip() for p in str(sivasnr).split("+") if p.strip())
def format_hoehe_m(hoehe_mm_str):
"""Konvertiert mm-String nach m mit deutschem Dezimaltrennzeichen."""
try:
m = float(hoehe_mm_str) / 1000.0
if m == int(m):
return str(int(m))
return f"{m:.1f}".replace(".", ",")
except (ValueError, TypeError):
return ""
def build_gefaellestrecke_details(block):
"""Merkmale-Dict fuer eine einzelne ILS Gefaellestrecke (GF_N-Block)."""
attribs = block.get("attribs", {})
@@ -286,10 +268,10 @@ def process_blocks(blocks, lookup):
items - Liste der CSV-Zeilen als Dicts
counters - Zaehler fuer ILS-Automation-Summierungszeile
"""
# Gruppen: sivasnr_str -> {anzahl, hoehe_mm, ids}
# Gruppen: sivasnr_str -> {anzahl, ids}
bogen_groups = {} # sivasnr -> dict
weiche_groups = {} # sivasnr -> dict
# Gerade: artinr_str -> {anzahl, laenge_mm_total, hoehe_mm, ids}
# Gerade: artinr_str -> {anzahl, laenge_mm_total, ids}
gerade_groups = {}
kreisel_list = [] # Liste von blocks
eckrad_ids = [] # IDs aller Eckrad-Bloecke
@@ -340,18 +322,17 @@ def process_blocks(blocks, lookup):
if bname in lookup:
typ, eintrag = lookup[bname]
sivasnr = format_sivasnr(eintrag.get("Sivasnr", bname))
hoehe = get_hoehe_mm(block)
if typ == "bogen":
if sivasnr not in bogen_groups:
bogen_groups[sivasnr] = {"anzahl": 0, "hoehe_mm": hoehe, "ids": []}
bogen_groups[sivasnr] = {"anzahl": 0, "ids": []}
bogen_groups[sivasnr]["anzahl"] += 1
bogen_groups[sivasnr]["ids"].append(get_id(block))
counters["anzahl_boegen"] += 1
elif typ == "weiche":
if sivasnr not in weiche_groups:
weiche_groups[sivasnr] = {"anzahl": 0, "hoehe_mm": hoehe, "ids": []}
weiche_groups[sivasnr] = {"anzahl": 0, "ids": []}
weiche_groups[sivasnr]["anzahl"] += 1
weiche_groups[sivasnr]["ids"].append(get_id(block))
subtyp = classify_weiche(eintrag)
@@ -372,7 +353,6 @@ def process_blocks(blocks, lookup):
attribs = block.get("attribs", {})
artinr = attribs.get("ARTINR", "")
key = artinr if artinr else "AP110"
hoehe = get_hoehe_mm(block)
laenge = 2000.0
laenge_attr = attribs.get("LAENGE") or attribs.get("A")
if laenge_attr:
@@ -382,7 +362,7 @@ def process_blocks(blocks, lookup):
pass
if key not in gerade_groups:
gerade_groups[key] = {
"anzahl": 0, "laenge_mm": 0.0, "hoehe_mm": hoehe,
"anzahl": 0, "laenge_mm": 0.0,
"artinr": artinr, "ids": [],
}
gerade_groups[key]["anzahl"] += 1
@@ -484,7 +464,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 10,
"anzahl": g["anzahl"],
"laenge_mm": "",
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
"ids": g["ids"],
"details": {},
})
@@ -500,7 +479,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 10,
"anzahl": g["anzahl"],
"laenge_mm": "",
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
"ids": g["ids"],
"details": {},
})
@@ -516,7 +494,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 10,
"anzahl": g["anzahl"],
"laenge_mm": int(g["laenge_mm"]),
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
"ids": g["ids"],
"details": {},
})
@@ -544,7 +521,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 20,
"anzahl": len(group["ids"]),
"laenge_mm": "",
"hoehe_m": "",
"ids": group["ids"],
"details": build_kreisel_details(group["block"]),
})
@@ -561,7 +537,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 20,
"anzahl": counters["anzahl_eckraeder"],
"laenge_mm": "",
"hoehe_m": "",
"ids": eckrad_ids,
"details": {},
})
@@ -581,7 +556,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 20,
"anzahl": len(strecke_ids),
"laenge_mm": "",
"hoehe_m": "",
"ids": strecke_ids,
"details": {},
})
@@ -600,7 +574,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 20,
"anzahl": 1,
"laenge_mm": "",
"hoehe_m": "",
"ids": [get_id(block)],
"details": build_variofoerderer_details(block),
})
@@ -629,7 +602,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 20,
"anzahl": len(group["ids"]),
"laenge_mm": "",
"hoehe_m": "",
"ids": group["ids"],
"details": details,
})
@@ -673,7 +645,6 @@ def process_blocks(blocks, lookup):
"dispgruppe": 20,
"anzahl": 1,
"laenge_mm": "",
"hoehe_m": "",
"details": automation_details,
})
@@ -693,7 +664,6 @@ def format_csv_line(item):
f';{item["dispgruppe"]}'
f';{item["anzahl"]}'
f';{item["laenge_mm"]}'
f';{item["hoehe_m"]}'
f';"{ids_str}"'
f';{details_json}'
)
@@ -722,7 +692,7 @@ def main():
items, _ = process_blocks(blocks, lookup)
header = "Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];Hoehe[m];IDs;details"
header = "Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details"
with open(output_csv, "w", encoding="utf-8") as f:
f.write(header + "\n")
for item in items:
+1
View File
@@ -3,4 +3,5 @@
ezdxf==1.4.1
pytest==9.0.2
shapely==2.1.2
+109 -109
View File
@@ -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;Nachbarn;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}
Can't render this file because it contains an unexpected character in line 2 and column 42.
+10 -10
View File
@@ -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", "Nachbarn", "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) < 10:
continue
try:
json.loads(row[5])
json.loads(row[9])
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) < 10:
continue
merkmale = json.loads(row[5])
merkmale = json.loads(row[9])
missing = required - set(merkmale.keys())
assert not missing, (
f"Zeile {i + 2}: Fehlende Merkmale-Felder: {missing}"
@@ -290,7 +290,7 @@ class TestFoerdererExportSivas:
def test_header_felder(self):
"""Sivas-CSV-Header muss korrekte Spalten haben."""
expected = ["Nr", "TeileArt", "SivasNummer", "Bezeichnung",
"Dispogruppe", "Anzahl", "Laenge[mm]", "Hoehe[m]", "details"]
"Dispogruppe", "Anzahl", "Laenge[mm]", "details"]
for i, name in enumerate(expected):
assert self.header[i] == name, (
f"Header[{i}]: erwartet '{name}', ist '{self.header[i]}'"
+2 -2
View File
@@ -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;Nachbarn;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(";", 9)
if len(cols) >= 3:
cols[2] = "<ID>"
return cols