CSV-Export: Nachbarschaftserkennung ueber Bounding-Box-Ueberschneidung (STRtree/shapely)
Neue Spalte "Nachbarn" (kommaseparierte TeileId-Liste) in export_csv.py: zwei Elemente gelten als benachbart, wenn ihre Bounding-Boxes (x/y-Ebene) sich ueberschneiden. Toleranz konfigurierbar in mm ueber cfg/export.cfg [Nachbarschaft] -> toleranz_mm, siehe lib/export_neighbors.py. Nur EXPORTCSV betroffen, EXPORTSIVAS bleibt unveraendert. shapely als neue Abhaengigkeit in requirements.txt ergaenzt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
57badf0556
commit
6ab698286f
9 files changed
+315
-127
No files matched your search
+86
-5
@@ -1,14 +1,19 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
REM ================================================================
|
REM ================================================================
|
||||||
REM run_tests.bat - Testausfuehrung fuer SSG_LIB
|
REM run_tests.bat - Testausfuehrung fuer SSG_LIB
|
||||||
REM
|
REM
|
||||||
REM Schalter:
|
REM Schalter:
|
||||||
REM --check Fuehrt pytest-Validierung aus
|
REM --check Fuehrt pytest-Validierung aus
|
||||||
REM (ohne) Zeigt Hilfe an
|
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
|
||||||
REM Beispiele:
|
REM Beispiele:
|
||||||
REM bin\run_tests.bat --check
|
REM bin\run_tests.bat --check
|
||||||
REM bin\run_tests.bat --check test_kreisel.py
|
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 ================================================================
|
||||||
|
|
||||||
REM Umgebung setzen
|
REM Umgebung setzen
|
||||||
@@ -23,6 +28,8 @@ if exist "%DXFMAKRO%\.venv\Scripts\activate.bat" (
|
|||||||
|
|
||||||
set DO_CHECK=0
|
set DO_CHECK=0
|
||||||
set CHECK_ARG=
|
set CHECK_ARG=
|
||||||
|
set DO_DIFF=0
|
||||||
|
set DIFF_ARG=
|
||||||
|
|
||||||
REM Argumente parsen
|
REM Argumente parsen
|
||||||
:parse_args
|
:parse_args
|
||||||
@@ -36,11 +43,20 @@ if "%~1"=="--check" (
|
|||||||
shift
|
shift
|
||||||
goto :parse_args
|
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
|
echo Unbekannter Schalter: %~1
|
||||||
goto :show_help
|
goto :show_help
|
||||||
|
|
||||||
:after_args
|
:after_args
|
||||||
if %DO_CHECK%==0 goto :show_help
|
if %DO_CHECK%==0 if %DO_DIFF%==0 goto :show_help
|
||||||
|
|
||||||
REM ================================================================
|
REM ================================================================
|
||||||
REM --check: pytest-Validierung
|
REM --check: pytest-Validierung
|
||||||
@@ -79,18 +95,83 @@ if %DO_CHECK%==1 (
|
|||||||
echo ================================================================
|
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
|
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
|
:show_help
|
||||||
echo.
|
echo.
|
||||||
echo Aufruf: bin\run_tests.bat --check [testdatei]
|
echo Aufruf: bin\run_tests.bat --check [testdatei]
|
||||||
|
echo bin\run_tests.bat --diff_references [csv-datei]
|
||||||
echo.
|
echo.
|
||||||
echo Schalter:
|
echo Schalter:
|
||||||
echo --check Fuehrt pytest-Validierung fuer alle Module aus
|
echo --check Fuehrt pytest-Validierung fuer alle Module aus
|
||||||
echo --check test_kreisel.py Validiert nur Kreisel-Tests
|
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.
|
||||||
echo Workflow:
|
echo Workflow:
|
||||||
echo 1. In BricsCAD: SSG_RUN_ALL_TESTS ausfuehren
|
echo 1. In BricsCAD: SSG_RUN_ALL_TESTS ausfuehren
|
||||||
echo 2. bin\run_tests.bat --check
|
echo 2. bin\run_tests.bat --check
|
||||||
|
echo 3. bin\run_tests.bat --diff_references
|
||||||
echo.
|
echo.
|
||||||
exit /b 1
|
exit /b 1
|
||||||
@@ -41,6 +41,18 @@ if exist "C:\Program Files\Bricsys\BricsCAD V25 de_DE\bricscad.exe" (
|
|||||||
echo Keine BricsCAD-Installation gefunden.
|
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)
|
REM Ueberladen von Umgebungsvariablen durch _setenv.bat (z.B. DXFM_DIM=3D)
|
||||||
if exist "%~dp0_setenv.bat" (
|
if exist "%~dp0_setenv.bat" (
|
||||||
echo Lade lokale Umgebungseinstellungen aus _setenv.bat...
|
echo Lade lokale Umgebungseinstellungen aus _setenv.bat...
|
||||||
@@ -95,6 +107,7 @@ echo DXFMAKRO = %DXFMAKRO%
|
|||||||
echo DXFM_DIM = %DXFM_DIM%
|
echo DXFM_DIM = %DXFM_DIM%
|
||||||
echo DXFM_BLOCKS = %DXFM_BLOCKS%
|
echo DXFM_BLOCKS = %DXFM_BLOCKS%
|
||||||
echo DXFM_OMNIFLO = %DXFM_OMNIFLO%
|
echo DXFM_OMNIFLO = %DXFM_OMNIFLO%
|
||||||
|
echo DXFM_DIFFTOOL = %DXFM_DIFFTOOL%
|
||||||
echo ================================================================
|
echo ================================================================
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
|
|||||||
+9
-1
@@ -56,4 +56,12 @@ x_step=2
|
|||||||
x_description=numerisch # Zahlen, von links nach rechts, 2m pro Spalte
|
x_description=numerisch # Zahlen, von links nach rechts, 2m pro Spalte
|
||||||
y_step=4
|
y_step=4
|
||||||
y_description=numerisch # Zahlen von unten nach oben, 4m pro Zeile
|
y_description=numerisch # Zahlen von unten nach oben, 4m pro Zeile
|
||||||
format= {x}/{y}
|
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
|
||||||
+18
-5
@@ -11,7 +11,7 @@ Aufruf:
|
|||||||
python export_csv.py <export_raw.json> <data_dir> <output.csv>
|
python export_csv.py <export_raw.json> <data_dir> <output.csv>
|
||||||
|
|
||||||
CSV-Format:
|
CSV-Format:
|
||||||
Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale
|
Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Nachbarn;Merkmale
|
||||||
|
|
||||||
Position und Boundingbox stammen aus der von export.lsp (csv:get-bbox, per
|
Position und Boundingbox stammen aus der von export.lsp (csv:get-bbox, per
|
||||||
vla-getboundingbox) ermittelten Bounding-Box je Block:
|
vla-getboundingbox) ermittelten Bounding-Box je Block:
|
||||||
@@ -19,8 +19,11 @@ vla-getboundingbox) ermittelten Bounding-Box je Block:
|
|||||||
Boundingbox = Ausdehnung (Laenge, Breite, Hoehe) in x, y, z
|
Boundingbox = Ausdehnung (Laenge, Breite, Hoehe) in x, y, z
|
||||||
Planquadrat wird aus der x/y-Koordinate des Blocks berechnet, siehe
|
Planquadrat wird aus der x/y-Koordinate des Blocks berechnet, siehe
|
||||||
export_planquadrat.py ([Planquadrate] in cfg/export.cfg).
|
export_planquadrat.py ([Planquadrate] in cfg/export.cfg).
|
||||||
Position, Boundingbox und Planquadrat sind nur fuer EXPORTCSV vorhanden
|
Nachbarn = kommaseparierte TeileId-Liste ueberschneidender Elemente (Bounding-
|
||||||
(nicht EXPORTSIVAS) - siehe csv:run-export.
|
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
|
import json
|
||||||
@@ -29,9 +32,11 @@ import os
|
|||||||
|
|
||||||
from export_blockpatterns import load_patterns, matches_any
|
from export_blockpatterns import load_patterns, matches_any
|
||||||
from export_planquadrat import load_planquadrat_config, compute_planquadrat
|
from export_planquadrat import load_planquadrat_config, compute_planquadrat
|
||||||
|
from export_neighbors import load_neighbor_tolerance_mm, compute_neighbor_ids
|
||||||
|
|
||||||
BLOCKPATTERNS = load_patterns()
|
BLOCKPATTERNS = load_patterns()
|
||||||
PLANQUADRAT_CFG = load_planquadrat_config()
|
PLANQUADRAT_CFG = load_planquadrat_config()
|
||||||
|
NEIGHBOR_TOLERANCE_MM = load_neighbor_tolerance_mm()
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@@ -240,13 +245,16 @@ def bbox_columns(block):
|
|||||||
Rueckgabe: dict mit "position" (Mittenkoordinate x,y,z) und "boundingbox"
|
Rueckgabe: dict mit "position" (Mittenkoordinate x,y,z) und "boundingbox"
|
||||||
(Ausdehnung x,y,z) als Strings, oder leere Strings falls kein bbox-Feld
|
(Ausdehnung x,y,z) als Strings, oder leere Strings falls kein bbox-Feld
|
||||||
vorhanden ist (z.B. EXPORTSIVAS oder die synthetische Omniflo-Sum-Zeile).
|
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")
|
bbox = block.get("bbox")
|
||||||
if not bbox:
|
if not bbox:
|
||||||
return {"position": "", "boundingbox": ""}
|
return {"position": "", "boundingbox": "", "_bbox": None}
|
||||||
return {
|
return {
|
||||||
"position": f'{bbox.get("cx", 0):.2f}, {bbox.get("cy", 0):.2f}, {bbox.get("cz", 0):.2f}',
|
"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}',
|
"boundingbox": f'{bbox.get("dx", 0):.2f}, {bbox.get("dy", 0):.2f}, {bbox.get("dz", 0):.2f}',
|
||||||
|
"_bbox": bbox,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -452,6 +460,10 @@ def process_blocks(blocks, lookup):
|
|||||||
"boundingbox": "",
|
"boundingbox": "",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
neighbor_ids = compute_neighbor_ids(items, NEIGHBOR_TOLERANCE_MM)
|
||||||
|
for item, nachbarn in zip(items, neighbor_ids):
|
||||||
|
item["nachbarn"] = nachbarn
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
|
||||||
@@ -470,6 +482,7 @@ def format_csv_line(item):
|
|||||||
f';1'
|
f';1'
|
||||||
f';"{item["position"]}"'
|
f';"{item["position"]}"'
|
||||||
f';"{item["boundingbox"]}"'
|
f';"{item["boundingbox"]}"'
|
||||||
|
f';"{item["nachbarn"]}"'
|
||||||
f';{merkmale_json}'
|
f';{merkmale_json}'
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -501,7 +514,7 @@ def main():
|
|||||||
|
|
||||||
items = process_blocks(blocks, lookup)
|
items = process_blocks(blocks, lookup)
|
||||||
|
|
||||||
header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale"
|
header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Nachbarn;Merkmale"
|
||||||
with open(output_csv, "w", encoding="utf-8") as f:
|
with open(output_csv, "w", encoding="utf-8") as f:
|
||||||
f.write(header + "\n")
|
f.write(header + "\n")
|
||||||
for item in items:
|
for item in items:
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -3,4 +3,5 @@
|
|||||||
|
|
||||||
ezdxf==1.4.1
|
ezdxf==1.4.1
|
||||||
pytest==9.0.2
|
pytest==9.0.2
|
||||||
|
shapely==2.1.2
|
||||||
|
|
||||||
@@ -1,109 +1,109 @@
|
|||||||
Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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"}
|
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}
|
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 54.
|
@@ -203,7 +203,7 @@ class TestFoerdererExportCSV:
|
|||||||
def test_header_felder(self):
|
def test_header_felder(self):
|
||||||
"""CSV-Header muss korrekte Spaltenbezeichnungen haben."""
|
"""CSV-Header muss korrekte Spaltenbezeichnungen haben."""
|
||||||
expected = ["Elementnummer", "TeileArt", "TeileId", "Bezeichnung",
|
expected = ["Elementnummer", "TeileArt", "TeileId", "Bezeichnung",
|
||||||
"Planquadrat", "Anzahl", "Position", "Boundingbox", "Merkmale"]
|
"Planquadrat", "Anzahl", "Position", "Boundingbox", "Nachbarn", "Merkmale"]
|
||||||
for i, name in enumerate(expected):
|
for i, name in enumerate(expected):
|
||||||
assert self.header[i] == name, (
|
assert self.header[i] == name, (
|
||||||
f"Header[{i}]: erwartet '{name}', ist '{self.header[i]}'"
|
f"Header[{i}]: erwartet '{name}', ist '{self.header[i]}'"
|
||||||
@@ -235,10 +235,10 @@ class TestFoerdererExportCSV:
|
|||||||
def test_merkmale_sind_valides_json(self):
|
def test_merkmale_sind_valides_json(self):
|
||||||
"""Merkmale-Spalte muss valides JSON enthalten."""
|
"""Merkmale-Spalte muss valides JSON enthalten."""
|
||||||
for i, row in enumerate(self.rows):
|
for i, row in enumerate(self.rows):
|
||||||
if len(row) < 9:
|
if len(row) < 10:
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
json.loads(row[8])
|
json.loads(row[9])
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
pytest.fail(f"Zeile {i + 2}: Merkmale ist kein valides JSON: {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",
|
required = {"Typ", "Winkel", "DeltaH_mm", "DeltaL_mm",
|
||||||
"L_VF_m", "Hoehe_Von_mm", "Hoehe_Bis_mm"}
|
"L_VF_m", "Hoehe_Von_mm", "Hoehe_Bis_mm"}
|
||||||
for i, row in enumerate(self.rows):
|
for i, row in enumerate(self.rows):
|
||||||
if len(row) < 9:
|
if len(row) < 10:
|
||||||
continue
|
continue
|
||||||
merkmale = json.loads(row[8])
|
merkmale = json.loads(row[9])
|
||||||
missing = required - set(merkmale.keys())
|
missing = required - set(merkmale.keys())
|
||||||
assert not missing, (
|
assert not missing, (
|
||||||
f"Zeile {i + 2}: Fehlende Merkmale-Felder: {missing}"
|
f"Zeile {i + 2}: Fehlende Merkmale-Felder: {missing}"
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ class TestOmnifloExportUnit:
|
|||||||
out_dir = _output_dir()
|
out_dir = _output_dir()
|
||||||
os.makedirs(out_dir, exist_ok=True)
|
os.makedirs(out_dir, exist_ok=True)
|
||||||
csv_path = os.path.join(out_dir, "omniflo_export.csv")
|
csv_path = os.path.join(out_dir, "omniflo_export.csv")
|
||||||
header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Merkmale"
|
header = "Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;Nachbarn;Merkmale"
|
||||||
with open(csv_path, "w", encoding="utf-8") as f:
|
with open(csv_path, "w", encoding="utf-8") as f:
|
||||||
f.write(header + "\n")
|
f.write(header + "\n")
|
||||||
for item in self.items:
|
for item in self.items:
|
||||||
@@ -333,7 +333,7 @@ def _reference_dir():
|
|||||||
|
|
||||||
def _normalize_row(line):
|
def _normalize_row(line):
|
||||||
"""Splittet eine CSV-Zeile und ersetzt die TeileId (UUID) durch Platzhalter."""
|
"""Splittet eine CSV-Zeile und ersetzt die TeileId (UUID) durch Platzhalter."""
|
||||||
cols = line.strip().split(";", 8)
|
cols = line.strip().split(";", 9)
|
||||||
if len(cols) >= 3:
|
if len(cols) >= 3:
|
||||||
cols[2] = "<ID>"
|
cols[2] = "<ID>"
|
||||||
return cols
|
return cols
|
||||||
|
|||||||
Reference in new issue
Block a user