Merge remote-tracking branch 'origin/master'

This commit is contained in:
2026-10-29 12:14:20 +01:00
21 changed files with 683 additions and 154 deletions
+1 -1
View File
@@ -208,7 +208,7 @@ Abhaengigkeiten: `ezdxf`, Standard-Library. Benoetigen Umgebungsvariablen (`DXFM
| `set_einfuegepkt.py` | Setzt `$INSBASE` (Einfuegepunkt) in Omniflo-DXF-Dateien. Schalter je Typ: `--boegen`, `--weichen45`, `--weichen90`, `--weichenkoerper`, `--weichen-parallel`, `--delta`, `--dreifachweiche`, `--sternweiche`, `--show-omniflo` |
| `set_koords.py` | Setzt Koordinatensystem-Bloecke (K1-K4) in Omniflo-DXF-Dateien. Schalter: `--k1set` bis `--k4set`, `--set-all`, `--force`, `--show-omniflo`, `--test`, `--number` |
| `export_sivas.py` | Erzeugt Sivas-Export-CSV mit Summierungszeilen (ILS Automation, Omniflo Sum). Omniflo-Elemente werden ueber das TEILEART-Attribut (`Omniflo *`) erkannt, ihre Sivas-Nummern kommen - wie beim Geruest - NUR aus dem kommagetrennten `ARTINR`-Attribut (eine Zeile je Nummer, TEF-Teile `0_B*` als `Omniflo TEF`); KEIN Katalog-Lookup mehr (den nutzt nur noch `export_csv.py` fuer die Merkmale). Schreibt zusaetzlich immer `<output>_zusammengefasst.csv`: Zeilen, die sich nur in Nr/Anzahl/IDs unterscheiden (v.a. Geruest, je Block eine Zeile), zu einer Zeile zusammengefasst (`items_zusammenfassen`, Anzahl addiert, IDs vereinigt); die Hauptdatei bleibt unveraendert. **ILS 2.0 Weiche (6216)**: eine Summenzeile (Anzahl 1), sobald `kreisel_weichen.json` (LISP-Export, siehe KreiselInsert.lsp) Beruehrpunkte enthaelt - je Beruehrpunkt eine Weichenkombination aus 1x aktiv (3371) + 1x passiv (3372), Zuordnung in `cfg/sivas.cfg` `[weichen]` ueber das synthetische Attribut `ANZAHL_WEICHEN`; dieselbe Zahl geht in Merkmal 4403 der Automation-Zeile. Aufruf: `python export_sivas.py <export_raw.json> <data_dir> <output.csv>` |
| `export_csv.py` | Erzeugt einfache Item-Liste als CSV (ohne Summierung). Aufruf: `python export_csv.py <export_raw.json> <data_dir> <output.csv>` |
| `export_csv.py` | Erzeugt einfache Item-Liste als CSV (ohne Summierung). Spalten `Nachbarn`/`TrackIds` einer VF_n/GF_n kommen aus deren `sepliste` (Bauprotokoll, nur beim Bau per `entnext` gesammelt). **Freie Separatoren** (eigenstaendige `Separator_SP`-Bloecke, deren Zuordnung die Strecke nennt, die aber nicht beim Bau entstanden - realer Fall Mubea VF_3: 0037/0038) nimmt `einsortieren_freie_separatoren` (export_neighbors.py) vor `compute_sep_kette` nach Lage in die Kette auf: nur wenn Mittelpunkt in der Strecken-BBox UND laengs des Linienzugs der Kettenglieder zwischen AS und ES (reiner Kern `sepliste_einsortier_positionen`); der Separator bekommt das Merkmal `"Einsortiert in": <Strecke>` (sps_skel zieht ihn darueber von der sepliste-Gegenprobe ab) und einen Hinweis in `Warnungen`. **Bewusst nur im Speicher des Exportlaufs, NICHT in die sepliste-XDATA zurueckgeschrieben**: Lisp paart die sepliste-Eintraege ueber die Anzahl je Typ mit den eingebauten Bausteinen (`csv:sepliste-kette-paare`) und fuehrt reservierte AS/ES-IDs unter der `lfdnr` (`csv:asmark-res-key`) - ein fremder Eintrag verschoebe beides; ausserdem schreibt jeder Neuaufbau/Edit der Strecke die XDATA neu. Test `tests/test_export_freie_separatoren.py`. Aufruf: `python export_csv.py <export_raw.json> <data_dir> <output.csv>` |
| `split_block_library.py` | Teilt `ils_library.dxf` in einzelne DXF-Dateien pro Block auf (mit Abhaengigkeiten). Export-Prefixe: Vario_, Staustrecke_, _3D_AS_, _3D_ES_ |
| `vf_journal_export.py` | Liest die Eingabe-Journale der `VF_n`-Bloecke (XDATA-App `SSG_VF_EDIT`, Marker `"linienzug"`) aus einer Zeichnung und schreibt sie als Frage-Antwort-Protokoll im Schema von `tests/testdata/linienzug_tests.json` (Gegenstueck zu `vfl-entry->string`; kein ezdxf, reine Gruppencode-Lesung). Optional `--csv <sivas_export.csv>` fuer Strecken-ID und Erwartungswerte je Kette. Aufruf: `python vf_journal_export.py <dxf> <output.json> [--csv ...] [--kein-startpunkt-fix]` — erzeugt `tests/testdata/hm_recformat.json` aus `data/polylines.dxf` (die Aufzeichnung, aus der `tests/testdata/hundm05.json` als Spec abgeleitet wird) |
| `dxf_vf_abbild.py` | Abbild der `VF_`/`GF_`-Wrapperbloecke einer Testzeichnung: Attribute UND Bausteinzusammensetzung je Kette, Ketten ueber den Einfuegepunkt der Spec zugeordnet (der Blockname taugt nicht - die VF-Nummer beginnt in jeder Zeichnung neu bei 1). Regressionsnetz fuer Umbauten am Bau-Ablauf: `--referenz` vergleicht gegen `tests/reference/hundm05_attribute.json` (Exit 1 bei Abweichung), `--schreibe-referenz` frischt sie nach einem GEPRUEFTEN Lauf auf. Faengt genau das, was der Ergebnis-Record nicht sieht - eine vertauschte `vfl-acc-*`-Reihenfolge (Komma-Listen `L_VF_m`/`L_GF_m`/`GF_WINKEL`, in der Zeichnung unsichtbar, im Sivas-Export falsch) und eine falsche Blockvariante. Liest ASCII-DXF streamend; binaere DXF kann `dxf_scan_components.py`. Genutzt von `tests/test_vf_geometrie.py` |
+63 -11
View File
@@ -420,6 +420,18 @@
att-entity att-data att-tag new-value
beforeAtt)
;; Mindestabstand: unterhalb des Durchmessers wuerden sich die Endkreise
;; (AN8/SP8) beruehren bzw. ueberschneiden - harte Sperre fuer alle Aufrufer
;; (Insert/Connect/Redraw/Edit/Script), da draw-module der einzige
;; gemeinsame Zeichenpfad ist.
(if (< abstand *kreisel-durchmesser*)
(progn
(ssg-emsg (ssg-textf "kreisel-emsg-abstand-zu-klein"
(list (rtos abstand 2 0) (rtos *kreisel-durchmesser* 2 0))))
(exit)
)
)
;; Attribute vorbereiten
(setq attribs (ssg-attrib-merge attribs *kreisel-attrib-defs*))
(setq attribs (subst (cons "ABSTAND" (rtos abstand 2 0))
@@ -695,11 +707,23 @@
)
;; 2. Abstand (Tangentenlaenge) - Linie gibt auch den Winkel vor
;; Mindestabstand = Kreisel-Durchmesser (sonst beruehren/ueberschneiden
;; sich die Endkreise) - bei Unterschreitung erneut abfragen.
(setq abstand nil)
(while (null abstand)
(setq p2 (getpoint pt (ssg-textf "kreisel-prompt-abstand"
(list (rtos *kreisel-default-laenge* 2 0)))))
(setq erg (kreisel-insert-richtung pt p2 *kreisel-default-laenge*)
abstand (car erg)
rotation (cadr erg))
(if (< abstand *kreisel-durchmesser*)
(progn
(ssg-emsg (ssg-textf "kreisel-emsg-abstand-zu-klein"
(list (rtos abstand 2 0) (rtos *kreisel-durchmesser* 2 0))))
(setq abstand nil)
)
)
)
(princ (ssg-textf "kreisel-abstand-ausgabe" (list (rtos abstand 2 0))))
;; 3. Hoehe (Z-Koordinate)
@@ -747,7 +771,12 @@
(progn (ssg-end) (princ (ssg-text "kreisel-abgebrochen")) (princ) (exit))
)
;; 2. Endpunkt (aeusserster Punkt SP-Seite) mit Gummiband
;; 2. Endpunkt (aeusserster Punkt SP-Seite) mit Gummiband - der Abstand
;; (Kreismitten-Tangentenlaenge = dist - Durchmesser) muss mindestens dem
;; Durchmesser entsprechen, sonst beruehren/ueberschneiden sich die
;; Endkreise; bei Unterschreitung erneut abfragen statt abzubrechen.
(setq abstand nil)
(while (null abstand)
(setq ptEnd (getpoint ptStart (ssg-text "kreisel-prompt-endpunkt")))
(if (null ptEnd)
(progn (ssg-end) (princ (ssg-text "kreisel-abgebrochen")) (princ) (exit))
@@ -759,12 +788,12 @@
(setq dist (sqrt (+ (* dx dx) (* dy dy))))
(setq abstand (- dist *kreisel-durchmesser*))
(if (<= abstand 0.0)
(if (< abstand *kreisel-durchmesser*)
(progn
(ssg-emsg (ssg-textf "kreisel-emsg-distanz-klein"
(list (rtos dist 2 0) (rtos *kreisel-durchmesser* 2 0))))
(ssg-end)
(exit)
(list (rtos dist 2 0) (rtos (* 2.0 *kreisel-durchmesser*) 2 0))))
(setq abstand nil)
)
)
)
@@ -883,7 +912,7 @@
;; geaendertem) Abstand neu. Alle Attribute bleiben
;; erhalten.
;; -----------------------------------------------
(defun c:KreiselRedraw ( / sel ent ed attribs basePoint rotation newAbstand)
(defun c:KreiselRedraw ( / sel ent ed attribs basePoint rotation newAbstand gueltig)
(ssg-start (ssg-text "kreisel-start-redraw") '(("CECOLOR")))
@@ -910,12 +939,21 @@
(cdr (assoc "HOEHE" attribs))
(cdr (assoc "KREISELART" attribs)))))
;; 3. Neuen Abstand abfragen (Enter = beibehalten)
;; 3. Neuen Abstand abfragen (Enter = beibehalten); Mindestabstand =
;; Kreisel-Durchmesser, sonst beruehren/ueberschneiden sich die Endkreise.
(setq newAbstand nil gueltig nil)
(while (not gueltig)
(initget 6)
(setq newAbstand (getdist (ssg-textf "kreisel-prompt-neuer-abstand" (list (cdr (assoc "ABSTAND" attribs))))))
(if (null newAbstand)
(setq newAbstand (atof (cdr (assoc "ABSTAND" attribs))))
)
(if (< newAbstand *kreisel-durchmesser*)
(ssg-emsg (ssg-textf "kreisel-emsg-abstand-zu-klein"
(list (rtos newAbstand 2 0) (rtos *kreisel-durchmesser* 2 0))))
(setq gueltig T)
)
)
;; NEU - Neue Höhe abfragen:
(setq newHoehe (getreal (ssg-textf "kreisel-prompt-neue-hoehe" (list (cdr (assoc "HOEHE" attribs))))))
(if (null newHoehe)
@@ -991,7 +1029,7 @@
;; 3. Bei OK: Block loeschen und mit neuen Werten neu zeichnen
;; -----------------------------------------------
(defun c:KreiselEdit ( / sel ss ent ed attribs basePoint rotation
dcl-pfad dat ergebnis
dcl-pfad dat ergebnis fertig
dlg-name dlg-abstand dlg-hoehe dlg-ausrichtung
dlg-drehrichtung dlg-kreiselart dlg-geruest-einzelmodul
dlg-geruest-typ
@@ -1049,7 +1087,12 @@
(princ (ssg-textf "kreisel-edit-bestehend"
(list (cdr (assoc "ABSTAND" attribs)) (rtos rotation 2 1) (cdr (assoc "KREISELART" attribs)))))
;; 3. DCL-Dialog laden
;; 3. DCL-Dialog laden; bei zu kleinem Abstand (< Kreisel-Durchmesser,
;; sonst beruehren/ueberschneiden sich die Endkreise) erneut anzeigen,
;; statt den fehlerhaften Wert zu uebernehmen (Projektmuster wie GERUEST).
(setq dlg-abstand (cdr (assoc "ABSTAND" attribs)))
(setq fertig nil)
(while (not fertig)
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/kreisel_edit.dcl"))
(setq dat (load_dialog dcl-pfad))
(if (not (new_dialog "kreisel_edit" dat))
@@ -1065,9 +1108,9 @@
)
)
;; Tiles initialisieren
;; Tiles initialisieren (Abstand aus vorherigem Versuch uebernehmen)
(set_tile "name" (cdr (assoc "Bezeichnung" attribs)))
(set_tile "abstand" (cdr (assoc "ABSTAND" attribs)))
(set_tile "abstand" dlg-abstand)
(set_tile "hoehe" (cdr (assoc "HOEHE" attribs)))
(start_list "ausrichtung")
@@ -1116,6 +1159,15 @@
(setq ergebnis (start_dialog))
(unload_dialog dat)
(cond
((/= ergebnis 1) (setq fertig T))
((< (atof dlg-abstand) *kreisel-durchmesser*)
(ssg-emsg (ssg-textf "kreisel-emsg-abstand-zu-klein"
(list (rtos (atof dlg-abstand) 2 0) (rtos *kreisel-durchmesser* 2 0)))))
(t (setq fertig T))
)
)
;; 4. Bei OK: Block loeschen und neu zeichnen
(if (= ergebnis 1)
(progn
+9 -1
View File
@@ -90,8 +90,16 @@
;; (Daten lesen / Dialogaufbau), siehe kf-zeit in
;; KettenFoerderer.lsp. Standard 0 - nur einschalten,
;; wenn der Dialog spuerbar verzoegert erscheint.
;; testlauf - Laufprotokoll je Test von SSG_RUN_ALL_TESTS nach
;; DXFM_LOG/testlauf_<name>.dbg (eigene Datei, nicht
;; ueber *dbg-path*; jede Zeile sofort geschrieben,
;; damit bei einem haengenden Test der letzte Schritt
;; sichtbar ist). Standard 1 - kostet nur ein paar
;; Zeilen je Test, siehe testrun:log in
;; tests/test_run_all.lsp.
;; ------------------------------------------------------------
(foreach nm '(("vf-sepliste" . 1) ("csv_leave_proxies" . 0) ("kf-zeit" . 0))
(foreach nm '(("vf-sepliste" . 1) ("csv_leave_proxies" . 0) ("kf-zeit" . 0)
("testlauf" . 1))
(if (not (assoc (car nm) *dbg-schalter*))
(setq *dbg-schalter* (cons nm *dbg-schalter*))))
+4 -1
View File
@@ -681,6 +681,7 @@
(setq *vsp-alt-headless* (if (boundp '*vfl-headless*) *vfl-headless*))
(setq *vfl-wizard-mode* nil)
(setq *vfl-headless* T)
(setq *vsp-alt-gui* (if (boundp '*ssg-gui-aus*) *ssg-gui-aus*))
(if (car (atoms-family 1 '("SSG-GUI-AUS"))) (ssg-gui-aus))
(setq *vsp-prompts* 0)
(princ))
@@ -693,7 +694,9 @@
alert *vsp-alt-alert*)
(setq *vfl-wizard-mode* *vsp-alt-wizard*)
(setq *vfl-headless* *vsp-alt-headless*)
(if (car (atoms-family 1 '("SSG-GUI-AN"))) (ssg-gui-an))
;; Vorzustand zurueck statt pauschal ssg-gui-an: unter SSG_RUN_ALL_TESTS
;; muss die GUI fuer den Export danach aus bleiben.
(setq *ssg-gui-aus* *vsp-alt-gui*)
(princ))
+1
View File
@@ -321,6 +321,7 @@
"kreisel-edit-bestehend": "\n-> Bestehend: Abstand=%1 Drehung=%2 Art=%3",
"kreisel-edit-dialog-fehlt": "Dialog nicht verfuegbar: %1",
"kreisel-eingefuegt": "\n-> Kreisel #%1 eingefügt: %2 (Höhe=%3)",
"kreisel-emsg-abstand-zu-klein": "Abstand zu klein! (%1 < %2) - die Endkreise wuerden sich beruehren/ueberschneiden.",
"kreisel-emsg-distanz-klein": "Distanz zu klein! (%1 < %2)",
"kreisel-hoehe-aus-3dpunkt": "\n-> Hoehe aus 3D-Punkt uebernommen: %1",
"kreisel-hoehe-aus-basispunkt": "\n-> Höhe aus Basispunkt übernommen: %1",
+1
View File
@@ -321,6 +321,7 @@
"kreisel-edit-bestehend": "\n-> Existing: Distance=%1 Rotation=%2 Type=%3",
"kreisel-edit-dialog-fehlt": "Dialog not available: %1",
"kreisel-eingefuegt": "\n-> Kreisel #%1 inserted: %2 (height=%3)",
"kreisel-emsg-abstand-zu-klein": "Distance too small! (%1 < %2) - the end circles would touch/overlap.",
"kreisel-emsg-distanz-klein": "Distance too small! (%1 < %2)",
"kreisel-hoehe-aus-3dpunkt": "\n-> Height taken from 3D point: %1",
"kreisel-hoehe-aus-basispunkt": "\n-> Height taken from base point: %1",
+7
View File
@@ -42,6 +42,7 @@ from export_neighbors import (
compute_kreisel_touch_switches,
lisp_touch_switches,
load_lisp_kreisel_weichen,
einsortieren_freie_separatoren,
compute_sep_kette,
compute_kreisel_umlauf,
SENSOR_TEILEARTEN,
@@ -1543,6 +1544,12 @@ def process_blocks(blocks, lookup, dbg=None, lisp_weichen=None):
if item.get("teileart", "") == "ILS 2.0 Scanner" and separator_id:
item["merkmale"]["Naechster Separator"] = separator_id
# Freie Separatoren, deren Zuordnung eine VF_n/GF_n nennt, die aber nicht
# beim Bau der Strecke entstanden sind (fehlen darum in ihrer sepliste),
# nach Lage in die Kette aufnehmen - nur fuer diesen Lauf, die XDATA am
# Block bleibt unveraendert (siehe einsortieren_freie_separatoren).
einsortieren_freie_separatoren(items, NEIGHBOR_TOLERANCE_MM, dbg=dbg)
# Ketteninterne Separator-/AS-/ES-Reihenfolge aus der neuen "sepliste"-
# XDATA (siehe ssg-sepliste-xdata-schreiben) - leeres dict, wenn keine
# Strecke eine sepliste traegt (reiner Altbestand ohne neue XDATA).
+193
View File
@@ -1255,6 +1255,194 @@ def _asel_collision_boxes(item, half_tol, box_dims):
# Ersetzt das bisherige Raten der Ketten-internen Reihenfolge (die Linie
# selbst wird nicht exportiert) durch die tatsaechliche Bau-Reihenfolge.
def sepliste_einsortier_positionen(kette_xy, kandidaten):
"""Reiner Rechenkern fuer einsortieren_freie_separatoren: wohin gehoert
jeder Kandidat in eine vorhandene Kette?
kette_xy = [(x, y), ...] Lage der Kettenglieder in Kettenfolge (AS ...
ES), mindestens zwei Punkte. Sie bilden einen Polygonzug - so
folgt die Zuordnung auch einer Kette, die um eine Kurve laeuft,
statt nur einer Geraden AS->ES.
kandidaten = [(key, x, y), ...]
Jeder Kandidat wird dem naechstgelegenen Abschnitt (Glied i -> i+1)
zugeordnet. Liegt er dabei VOR dem ersten oder HINTER dem letzten Glied,
wird er verworfen - eingefuegt wird nur zwischen AS und ES.
Rueckgabe (einfuegen, verworfen): einfuegen = {i: [key, ...]} - nach
Glied i einzufuegen, untereinander in Kettenrichtung sortiert;
verworfen = [key, ...].
"""
abschnitte = []
for i in range(len(kette_xy) - 1):
(ax, ay), (bx, by) = kette_xy[i], kette_xy[i + 1]
dx, dy = bx - ax, by - ay
l2 = dx * dx + dy * dy
if l2 > 1e-12:
abschnitte.append((i, ax, ay, dx, dy, l2))
letzter = len(kette_xy) - 2
einfuegen = {}
verworfen = []
for key, x, y in kandidaten:
best = None
for i, ax, ay, dx, dy, l2 in abschnitte:
t = ((x - ax) * dx + (y - ay) * dy) / l2
tc = min(max(t, 0.0), 1.0)
d = math.hypot(x - (ax + tc * dx), y - (ay + tc * dy))
if best is None or d < best[0] - 1e-9:
best = (d, i, t)
if best is None:
verworfen.append(key)
continue
_d, i, t = best
if (i == 0 and t <= 0.0) or (i == letzter and t >= 1.0):
verworfen.append(key)
continue
einfuegen.setdefault(i, []).append((min(max(t, 0.0), 1.0), key))
return ({i: [key for _t, key in sorted(liste)] for i, liste in einfuegen.items()},
verworfen)
def _kettenglied_xy(entry, item, strecke):
"""Lage eines sepliste-Glieds fuer den Polygonzug: AS/ES ueber K1/K2 der
Strecke (Ein-/Auslauf - der ZZ_ASES_MARKER sitzt auf dem Einfuegepunkt
des Elements und kann bis ~600 mm seitlich davon liegen), sonst bzw.
ohne K1/K2 der Bounding-Box-Mittelpunkt des vertretenden Items."""
typ = entry.get("typ", "")
if typ in ("AS", "ES"):
k1_xy, k2_xy = _asel_kos_xy(strecke)
pt = k1_xy if typ == "AS" else k2_xy
if pt is not None:
return pt
bbox = (item or {}).get("_bbox")
if not bbox:
return None
return (bbox.get("cx", 0.0), bbox.get("cy", 0.0))
def einsortieren_freie_separatoren(items, tolerance_mm, dbg=None):
"""Nimmt freie Separatoren in die sepliste ihrer VF_n/GF_n-Strecke auf.
Die sepliste entsteht beim BAU der Strecke (ssg-sepliste-sammeln) und
kennt nur die Separatoren, die dabei erzeugt wurden. Ein eigenstaendiger
Separator_SP-Block, der spaeter (oder aus einer frueheren Fassung der
Strecke) auf ihr liegt, fehlt darin - obwohl seine ZUORDNUNG
(cs-zuordnung-lauf) die Strecke nennt. Ohne diesen Schritt fehlt er in
TrackIds und Nachbarn (realer Fall Mubea VF_3: 0037/0038 zwischen 0062
und 0063).
Aufgenommen wird ein Separator nur, wenn
- seine Zuordnung die Strecke nennt,
- er in keiner sepliste steht,
- sein Mittelpunkt in der Bounding-Box der Strecke liegt (+ tolerance_mm/2),
- er laengs der Kette zwischen AS und ES liegt
(sepliste_einsortier_positionen).
Bewusst NUR im Speicher dieses Exportlaufs: die sepliste-XDATA am Block
bleibt das Bauprotokoll. Lisp ordnet ihre Eintraege den eingebauten
Bausteinen ueber die Anzahl je Typ zu (csv:sepliste-kette-paare) und
fuehrt reservierte AS/ES-IDs unter der lfdnr - ein in die XDATA
eingefuegter fremder Separator verschoebe beides. Ausserdem schreibt jeder
Neuaufbau der Strecke die XDATA neu; hier wird bei jedem Export frisch
aus dem aktuellen Zeichnungsstand gerechnet.
Aendert items in-place: item["sepliste"] der Strecke bekommt neue
SEP-Eintraege (lfdnr "frei<TeileId>", "id" = TeileId des Separators,
"frei": True); der Separator bekommt "_in_strecke_kette" (Strecken-
TeileId, damit compute_kreisel_umlauf ihn nicht zusaetzlich einem
Kreisel zuschlaegt), das Merkmal "Einsortiert in" (Strecken-TeileId,
in der CSV-Spalte Merkmale) und einen Hinweis in "warnung".
Muss NACH der Separator-Zuordnung und VOR compute_sep_kette laufen.
"""
half_tol = tolerance_mm / 2.0
by_teileid = {it.get("teileid", ""): it for it in items if it.get("teileid", "")}
in_ketten = set()
for it in items:
if it.get("teileart", "") in GF_VF_TEILEARTEN:
for e in it.get("sepliste") or []:
eid = str(e.get("id", "")).strip()
if eid:
in_ketten.add(eid)
if dbg:
dbg("=== einsortieren_freie_separatoren ===")
for strecke in items:
if strecke.get("teileart", "") not in GF_VF_TEILEARTEN:
continue
sepliste = strecke.get("sepliste")
sbbox = strecke.get("_bbox")
if not sepliste or not sbbox:
continue
sid = strecke.get("teileid", "")
sbounds = _bounds(sbbox, half_tol)
kandidaten = []
for it in items:
if it.get("teileart", "") != "ILS 2.0 Separator":
continue
tid = it.get("teileid", "")
if not tid or tid in in_ketten:
continue
zuordnung = ((it.get("merkmale") or {}).get("Zuordnung")
or it.get("_zuordnung_attr") or "").strip()
if zuordnung != sid:
continue
bbox = it.get("_bbox")
if not bbox:
continue
cx, cy = bbox.get("cx", 0.0), bbox.get("cy", 0.0)
if not (sbounds[0] <= cx <= sbounds[1] and sbounds[2] <= cy <= sbounds[3]):
if dbg:
dbg(f" Strecke {sid}: Separator {tid} ausserhalb der Strecken-BBox "
f"- nicht einsortiert")
continue
kandidaten.append((tid, cx, cy))
if not kandidaten:
continue
kette_xy = []
for e in sepliste:
pt = _kettenglied_xy(e, by_teileid.get(str(e.get("id", "")).strip()), strecke)
if pt is None:
break
kette_xy.append(pt)
if len(kette_xy) != len(sepliste) or len(kette_xy) < 2:
if dbg:
dbg(f" Strecke {sid}: Kettenglieder nicht vollstaendig lokalisierbar "
f"- freie Separatoren {[k[0] for k in kandidaten]} nicht einsortiert")
continue
einfuegen, verworfen = sepliste_einsortier_positionen(kette_xy, kandidaten)
if dbg and verworfen:
dbg(f" Strecke {sid}: {verworfen} liegen nicht zwischen AS und ES "
f"- nicht einsortiert")
if not einfuegen:
continue
neu = []
for i, entry in enumerate(sepliste):
neu.append(entry)
for tid in einfuegen.get(i, []):
neu.append({"typ": "SEP", "lfdnr": f"frei{tid}", "id": tid, "frei": True})
sep = by_teileid[tid]
sep["_in_strecke_kette"] = sid
# Fuer Folgewerkzeuge (sps_skel: sepliste-Gegenprobe): dieser
# Separator steht in TrackIds, aber nicht im Bauprotokoll.
sep.setdefault("merkmale", {})["Einsortiert in"] = sid
hinweis = (f"nicht im Bau von {sid} erzeugt - per Lage in dessen "
f"Kette einsortiert")
bisherige = sep.get("warnung", "")
sep["warnung"] = f"{bisherige}; {hinweis}" if bisherige else hinweis
in_ketten.add(tid)
strecke["sepliste"] = neu
if dbg:
dbg(f" Strecke {sid}: Kette jetzt "
f"{' -> '.join(str(e.get('id', '')) for e in neu)}")
def compute_sep_kette(items, dbg=None):
"""Baut je VF_n/GF_n-Item MIT "sepliste" die ketteninterne Vorgaenger-/
Nachfolger-Beziehung AS -> Sep1 -> ... -> SepN -> ES.
@@ -1392,6 +1580,11 @@ def compute_kreisel_umlauf(items, tolerance_mm, durchmesser_mm=800.0,
for item in items:
if item.get("teileart", "") not in KREISEL_UMLAUF_TEILEARTEN:
continue
# Freier Separator, den einsortieren_freie_separatoren in die Kette
# einer Strecke aufgenommen hat - gehoert nicht zusaetzlich auf einen
# Kreisel, auch wenn seine Box einen beruehrt.
if item.get("_in_strecke_kette"):
continue
teileid = item.get("teileid", "")
bbox = item.get("_bbox")
if not bbox:
+14 -14
View File
@@ -1,15 +1,15 @@
Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details
1;"ILS 2.0 Strecke";"6220";"VF_13";20;1;;"0013";{"Anlagenhöhe in Meter": "-1.5", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.0", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.707", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.055", "Streckengruppe - Varioförderer 001-Richtung": "ab", "Streckengruppe - Varioförderer 001- Winkel": "39", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
2;"ILS 2.0 Strecke";"6220";"VF_12";20;1;;"0012";{"Anlagenhöhe in Meter": "0.5", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.084", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.0", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.478", "Streckengruppe - Varioförderer 001-Richtung": "auf", "Streckengruppe - Varioförderer 001- Winkel": "21", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
3;"ILS 2.0 Strecke";"6220";"VF_11";20;1;;"0011";{"Anlagenhöhe in Meter": "1.5", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.166", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.166", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.207", "Streckengruppe - Varioförderer 001-Richtung": "auf", "Streckengruppe - Varioförderer 001- Winkel": "51", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
4;"ILS 2.0 Strecke";"6220";"VF_10";20;1;;"0010";{"Anlagenhöhe in Meter": "-1", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.541", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.541", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "2.731", "Streckengruppe - Varioförderer 001-Richtung": "ab", "Streckengruppe - Varioförderer 001- Winkel": "27", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
5;"ILS 2.0 Strecke";"6220";"VF_9";20;1;;"0009";{"Anlagenhöhe in Meter": "1", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.206", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.206", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.07", "Streckengruppe - Varioförderer 001-Richtung": "auf", "Streckengruppe - Varioförderer 001- Winkel": "39", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
6;"ILS 2.0 Strecke";"6220";"VF_8";20;1;;"0008";{"Anlagenhöhe in Meter": "-2", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.15", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.15", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "4.067", "Streckengruppe - Varioförderer 001-Richtung": "ab", "Streckengruppe - Varioförderer 001- Winkel": "45", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
7;"ILS 2.0 Strecke";"6220";"VF_7";20;1;;"0007";{"Anlagenhöhe in Meter": "-1.5", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.354", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.354", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.055", "Streckengruppe - Varioförderer 001-Richtung": "ab", "Streckengruppe - Varioförderer 001- Winkel": "39", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
8;"ILS 2.0 Strecke";"6220";"VF_6";20;1;;"0006";{"Anlagenhöhe in Meter": "-1", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.013", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.013", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.701", "Streckengruppe - Varioförderer 001-Richtung": "ab", "Streckengruppe - Varioförderer 001- Winkel": "21", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
9;"ILS 2.0 Strecke";"6220";"VF_5";20;1;;"0005";{"Anlagenhöhe in Meter": "-0.5", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.486", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.486", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.056", "Streckengruppe - Varioförderer 001-Richtung": "ab", "Streckengruppe - Varioförderer 001- Winkel": "9", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
10;"ILS 2.0 Strecke";"6220";"VF_4";20;1;;"0004";{"Anlagenhöhe in Meter": "1.5", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.166", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.166", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.207", "Streckengruppe - Varioförderer 001-Richtung": "auf", "Streckengruppe - Varioförderer 001- Winkel": "51", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
11;"ILS 2.0 Strecke";"6220";"VF_3";20;1;;"0003";{"Anlagenhöhe in Meter": "1", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.206", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.206", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.07", "Streckengruppe - Varioförderer 001-Richtung": "auf", "Streckengruppe - Varioförderer 001- Winkel": "39", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
12;"ILS 2.0 Strecke";"6220";"VF_2";20;1;;"0002";{"Anlagenhöhe in Meter": "0.5", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.042", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.042", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "3.478", "Streckengruppe - Varioförderer 001-Richtung": "auf", "Streckengruppe - Varioförderer 001- Winkel": "21", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
13;"ILS 2.0 Strecke";"6220";"VF_1";20;1;;"0001";{"Anlagenhöhe in Meter": "0", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "0.615", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "0.615", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "2.74", "Streckengruppe - Varioförderer 001-Richtung": "auf", "Streckengruppe - Varioförderer 001- Winkel": "9", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
14;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"Automation": "Ja", "Anzahl der Kreisel": "0", "Anzahl der Separatoren - Kreisel ohne PINBAND": "0", "Anzahl der Kreisel mit PINBAND": "0", "Anzahl der Separatoren - Kreisel mit PINBAND": "0", "Anzahl der Verbindungskreisel": "0", "Längen aller Kreisel": "0.00", "Anzahl der Weichen": "0", "Anzahl der Eckräder": "0", "Anzahl der einzelnen Gefällestrecken": "0", "Anzahl der einzelnen Vario-Förderer": "0", "Anzahl der Streckengruppen": "13", "Längen aller Gefällestrecken": "0.00", "Anzahl der Motoren in Vario - Förderer": "13", "Längen aller Vario - Förderer": "41.915000000000006", "Anzahl der ETFs": "0", "Längen aller ETFS und Zusatzstücke (Gefällestrecken)": "0.0", "Anzahl der Separatoren in der Anlage": "26", "Anzahl der Scanner in der Anlage": "0", "Zusatzmodul - Anzahl der BT-Beladung": "0", "Zusatzmodul - Anzahl der Abwurfstation": "0", "Pneumatik": "Ja"}
1;"ILS 2.0 Strecke";"6220";"VF_13";20;1;;"0013";{"2950": "-1.5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.0", "4391": "3", "4314": "Ja", "4319": "0.707", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.055", "4354": "ab", "4386": "39", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
2;"ILS 2.0 Strecke";"6220";"VF_12";20;1;;"0012";{"2950": "0.5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.084", "4391": "3", "4314": "Ja", "4319": "0.0", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.478", "4354": "auf", "4386": "21", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
3;"ILS 2.0 Strecke";"6220";"VF_11";20;1;;"0011";{"2950": "1.5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.166", "4391": "3", "4314": "Ja", "4319": "0.166", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.207", "4354": "auf", "4386": "51", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
4;"ILS 2.0 Strecke";"6220";"VF_10";20;1;;"0010";{"2950": "-1", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.541", "4391": "3", "4314": "Ja", "4319": "0.541", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "2.731", "4354": "ab", "4386": "27", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
5;"ILS 2.0 Strecke";"6220";"VF_9";20;1;;"0009";{"2950": "1", "4431": "Ja", "4427": "90 °", "4428": "rechts", "4432": "Ja", "4429": "90 °", "4430": "rechts", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.206", "4391": "3", "4314": "Ja", "4319": "0.206", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.07", "4354": "auf", "4386": "39", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
6;"ILS 2.0 Strecke";"6220";"VF_8";20;1;;"0008";{"2950": "-2", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.15", "4391": "3", "4314": "Ja", "4319": "0.15", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "4.067", "4354": "ab", "4386": "45", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
7;"ILS 2.0 Strecke";"6220";"VF_7";20;1;;"0007";{"2950": "-1.5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.354", "4391": "3", "4314": "Ja", "4319": "0.354", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.055", "4354": "ab", "4386": "39", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
8;"ILS 2.0 Strecke";"6220";"VF_6";20;1;;"0006";{"2950": "-1", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.013", "4391": "3", "4314": "Ja", "4319": "0.013", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.701", "4354": "ab", "4386": "21", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
9;"ILS 2.0 Strecke";"6220";"VF_5";20;1;;"0005";{"2950": "-0.5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.486", "4391": "3", "4314": "Ja", "4319": "0.486", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.056", "4354": "ab", "4386": "9", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488", "4437": "-0.512"}
10;"ILS 2.0 Strecke";"6220";"VF_4";20;1;;"0004";{"2950": "1.5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.166", "4391": "3", "4314": "Ja", "4319": "0.166", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.207", "4354": "auf", "4386": "51", "4433": "-0.012", "4434": "0.488", "4435": "0.988", "4436": "1.488"}
11;"ILS 2.0 Strecke";"6220";"VF_3";20;1;;"0003";{"2950": "1", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.206", "4391": "3", "4314": "Ja", "4319": "0.206", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.07", "4354": "auf", "4386": "39", "4433": "-0.012", "4434": "0.488", "4435": "0.988"}
12;"ILS 2.0 Strecke";"6220";"VF_2";20;1;;"0002";{"2950": "0.5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.042", "4391": "3", "4314": "Ja", "4319": "0.042", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "3.478", "4354": "auf", "4386": "21", "4433": "-0.012", "4434": "0.488"}
13;"ILS 2.0 Strecke";"6220";"VF_1";20;1;;"0001";{"2950": "0", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "0", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.615", "4391": "3", "4314": "Ja", "4319": "0.615", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "2.74", "4354": "auf", "4386": "9", "4433": "-0.012"}
14;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"4000": "Ja", "4400": "0", "4413": "0", "4401": "0", "4414": "0", "4402": "0", "4419": "0.00", "4403": "0", "4404": "0", "4425": "0", "4426": "0", "4407": "13", "4418": "0.00", "4408": "13", "4420": "41.915000000000006", "4409": "0", "4417": "0.0", "4410": "26", "4411": "0", "4421": "0", "4422": "0", "4100": "Ja"}
Can't render this file because it contains an unexpected character in line 2 and column 50.
@@ -1,6 +1,6 @@
Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details
1;"ILS 2.0 Gefaellestrecke";"6220";"GF_8";20;1;;"0008";{"Anlagenhöhe in Meter": "5", "Streckengruppe": "ein Objekt", "Gefällestrecke oder Vario-Förderer": "Gefällestrecke", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "9.261", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "1", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
2;"ILS 2.0 Gefaellestrecke";"6220";"GF_7";20;1;;"0007";{"Anlagenhöhe in Meter": "2", "Streckengruppe": "mehrere Objekte", "Gefällestrecke oder Vario-Förderer": "Gefällestrecke", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "7.274,5.264", "Streckengruppe - Gefällestrecke 001 -Winkel": "0.2,0.2", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "2", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
3;"ILS 2.0 Gefaellestrecke";"6220";"GF_6";20;1;;"0006";{"Anlagenhöhe in Meter": "5", "Streckengruppe": "ein Objekt", "Gefällestrecke oder Vario-Förderer": "Gefällestrecke", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "8.838", "Streckengruppe - Gefällestrecke 001 -Winkel": "2.8", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "1", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
4;"ILS 2.0 Gefaellestrecke";"6220";"GF_5, GF_4, GF_3, GF_2, GF_1";20;1;;"0005, 0004, 0003, 0002, 0001";{"Anlagenhöhe in Meter": "5", "Streckengruppe": "ein Objekt", "Gefällestrecke oder Vario-Förderer": "Gefällestrecke", "Strecken- zu fertigende Menge": "5", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "8.851", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "1", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Gerüst für Einzelmodul": "Nein", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
5;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"Automation": "Ja", "Anzahl der Kreisel": "0", "Anzahl der Separatoren - Kreisel ohne PINBAND": "0", "Anzahl der Kreisel mit PINBAND": "0", "Anzahl der Separatoren - Kreisel mit PINBAND": "0", "Anzahl der Verbindungskreisel": "0", "Längen aller Kreisel": "0.00", "Anzahl der Weichen": "0", "Anzahl der Eckräder": "0", "Anzahl der einzelnen Gefällestrecken": "8", "Anzahl der einzelnen Vario-Förderer": "0", "Anzahl der Streckengruppen": "0", "Längen aller Gefällestrecken": "62.35", "Anzahl der Motoren in Vario - Förderer": "0", "Längen aller Vario - Förderer": "0.0", "Anzahl der ETFs": "0", "Längen aller ETFS und Zusatzstücke (Gefällestrecken)": "0.0", "Anzahl der Separatoren in der Anlage": "9", "Anzahl der Scanner in der Anlage": "0", "Zusatzmodul - Anzahl der BT-Beladung": "0", "Zusatzmodul - Anzahl der Abwurfstation": "0", "Pneumatik": "Ja"}
1;"ILS 2.0 Gefaellestrecke";"6220";"GF_8";20;1;;"0008";{"2950": "5", "4431": "Ja", "4427": "30 °", "4428": "links", "4432": "Ja", "4429": "30 °", "4430": "links", "4384": "Gefällestrecke", "4318": "9.261", "4391": "3", "4337": "1", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "ein Objekt", "4311": "1"}
2;"ILS 2.0 Gefaellestrecke";"6220";"GF_7";20;1;;"0007";{"2950": "2", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4384": "Gefällestrecke", "4318": "7.274,5.264", "4391": "0.2,0.2", "4337": "2", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1"}
3;"ILS 2.0 Gefaellestrecke";"6220";"GF_6";20;1;;"0006";{"2950": "5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4384": "Gefällestrecke", "4318": "8.838", "4391": "2.8", "4337": "1", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "ein Objekt", "4311": "1"}
4;"ILS 2.0 Gefaellestrecke";"6220";"GF_5, GF_4, GF_3, GF_2, GF_1";20;1;;"0005, 0004, 0003, 0002, 0001";{"2950": "5", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4384": "Gefällestrecke", "4318": "8.851", "4391": "3", "4337": "1", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "3992": "Nein", "3993": "Schönenberger-Gerüst", "4300": "ein Objekt", "4311": "5"}
5;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"4000": "Ja", "4400": "0", "4413": "0", "4401": "0", "4414": "0", "4402": "0", "4419": "0.00", "4403": "0", "4404": "0", "4425": "8", "4426": "0", "4407": "0", "4418": "62.35", "4408": "0", "4420": "0.0", "4409": "0", "4417": "0.0", "4410": "9", "4411": "0", "4421": "0", "4422": "0", "4100": "Ja"}
Can't render this file because it contains an unexpected character in line 2 and column 57.
+6 -6
View File
@@ -5,20 +5,20 @@ Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingb
4;"ILS 2.0 Strecke";"0004";"VF_4";"H/1-J/4";1;"18465.07, 4300.26, 2119.66";"2518.90, 6404.92, 848.78";"f///EdR0IN4QAAAAAAAAAAAA";"AqAYAC2kAFQk";"AwJzAC2kAFQk";"";"";"0006-L";"0038, 0039, 0040, 0041";"nur ein Partner";"";{"Typ": "Streckengruppe", "Seite_AS": "links", "Seite_ES": "links", "Winkel": "3,3", "VF_Winkel": "0,0,18", "DeltaH_mm": "0", "DeltaL_mm": "1907", "L_VF_m": "0.269,0.458,1.663", "L_GF_m": "4.166,1.658", "Montagehoehe_m": "2.154", "Hoehe_Von_mm": "2154", "Hoehe_Bis_mm": "2154", "Antriebfahrtrichtung": "horizontal,horizontal,Auf", "Anzahl_Separator": "2", "Anzahl_Scanner": "0"}
5;"ILS 2.0 Strecke";"0005";"VF_5";"J/1-K/4";1;"22239.27, 4299.16, 2119.66";"2518.90, 6404.92, 848.78";"f///EdAoIN4QAAAAAAAAAAAA";"AzOGAC2ZAFQk";"A5XhAC2ZAFQk";"";"";"0006-L";"0042, 0043, 0044, 0045";"nur ein Partner";"";{"Typ": "Streckengruppe", "Seite_AS": "links", "Seite_ES": "links", "Winkel": "3,3", "VF_Winkel": "0,0,18", "DeltaH_mm": "0", "DeltaL_mm": "1907", "L_VF_m": "0.269,0.458,1.663", "L_GF_m": "4.166,1.658", "Montagehoehe_m": "2.154", "Hoehe_Von_mm": "2154", "Hoehe_Bis_mm": "2154", "Antriebfahrtrichtung": "horizontal,horizontal,Auf", "Anzahl_Separator": "4", "Anzahl_Scanner": "1"}
6;"ILS 2.0 Kreisel";"0006";"Kreisel1";"A/1-M/1";1;"13594.00, 767.00, 2154.00";"24100.00, 800.00, 1.00";"F49AC7QYIN4QAAAAAAAAAAAA";"";"";"";"";"0005, 0004, 0003, 0002, 0001";"0021, 0022, 0007, 0008, 0024, 0029, 0010, 0030, 0033, 0012, 0034, 0037, 0014, 0038, 0041, 0016, 0042, 0045, 0018, 0020, 0023";"";"";{"Abstand (Kreiselachse A - Kreiselachse) in Meter": "23.3", "Anzahl der Separatoren": "4", "Kreiselart": "STANDARD", "Anzahl der Scanner": "4", "Anzahl der Rampen": "0", "Höhe in m": "2.15", "Drehrichtung": "UZS", "Drehung": 0, "Name": "Kreisel1", "Geruest fuer Einzelmodul": true}
7;"ILS 2.0 Separator";"0007";"Separator :20";"A/1";1;"2414.95, 365.00, 2155.50";"209.90, 150.00, 3.00";"I+84BZHIIN4QAAAAAAAAAAAA";"AFv+AA5CAFQk";"";"";"";"0022, 0008";"";"";"";{"Zuordnung": "0006-R", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 0, "Typ": ""}
7;"ILS 2.0 Separator";"0007";"Separator :20";"A/1";1;"2414.95, 365.00, 2155.50";"209.90, 150.00, 3.00";"I+84BZHIIN4QAAAAAAAAAAAA";"AFv+AA5CAFQk";"";"";"";"0022, 0008";"";"";"";{"Zuordnung": "0001", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 0, "Typ": ""}
8;"ILS 2.0 Separator";"0008";"Separator :19";"B/1";1;"4056.38, 1165.90, 2155.50";"209.90, 150.00, 3.00";"Ps9qEcpMIN4QAAAAAAAAf///";"AKDLAC2LAFQk";"";"";"";"0007, 0024";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
9;"ILS 2.0 Scanner";"0009";"Scanner :6";"B/1";1;"4095.50, 804.10, 2154.00";"150.00, 280.00, 1.00";"Pn4MEcNEIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0008"}
10;"ILS 2.0 Separator";"0010";"Separator :18";"D/1";1;"8555.49, 1169.50, 2155.50";"209.90, 150.00, 3.00";"f///EdhcIN4QAAAAAAAAf///";"AVCKAC2vAFQk";"";"";"";"0029, 0030";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
11;"ILS 2.0 Scanner";"0011";"Scanner :5";"D/1";1;"8598.69, 807.70, 2154.00";"150.00, 280.00, 1.00";"f///EdFUIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0010"}
10;"ILS 2.0 Separator";"0010";"Separator :18";"D/1";1;"8555.49, 1169.50, 2155.50";"209.90, 150.00, 3.00";"f///EdhcIN4QAAAAAAAAf///";"AVCKAC2vAFQk";"";"";"";"0029, 0030";"";"";"";{"Zuordnung": "0002", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
11;"ILS 2.0 Scanner";"0011";"Scanner :5";"D/1";1;"8598.69, 807.70, 2154.00";"150.00, 280.00, 1.00";"f///EdFUIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0002", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0010"}
12;"ILS 2.0 Separator";"0012";"Separator :17";"F/1";1;"12631.71, 1168.20, 2155.50";"209.90, 150.00, 3.00";"f///EdNIIN4QAAAAAAAAf///";"Ae/EAC2iAFQk";"";"";"";"0033, 0034";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
13;"ILS 2.0 Scanner";"0013";"Scanner :4";"F/1";1;"12669.10, 806.40, 2154.00";"150.00, 280.00, 1.00";"f///EcxAIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0012"}
14;"ILS 2.0 Separator";"0014";"Separator :16";"H/1";1;"16799.72, 1171.70, 2155.50";"209.90, 150.00, 3.00";"f///EeD0IN4QAAAAAAAAf///";"ApKUAC3FAFQk";"";"";"";"0037, 0038";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
15;"ILS 2.0 Scanner";"0015";"Scanner :3";"H/1";1;"16839.52, 809.80, 2154.00";"150.00, 280.00, 1.00";"f///EdmIIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"Distanz-Zuordnung unsicher: 0006 (3270mm) vs. 0004 (3527mm)";{"Zuordnung": "0006-L", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0014"}
16;"ILS 2.0 Separator";"0016";"Separator :15";"J/1";1;"20577.16, 1166.20, 2155.50";"209.90, 150.00, 3.00";"f///Ect4IN4QAAAAAAAAf///";"AyYjAC2OAFQk";"";"";"";"0041, 0042";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
17;"ILS 2.0 Scanner";"0017";"Scanner :2";"J/1";1;"20807.70, 804.30, 2154.00";"150.00, 280.00, 1.00";"f///EcQMIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0005", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0016"}
17;"ILS 2.0 Scanner";"0017";"Scanner :2";"J/1";1;"20807.70, 804.30, 2154.00";"150.00, 280.00, 1.00";"f///EcQMIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0016"}
18;"ILS 2.0 Separator";"0018";"Separator :14";"L/1";1;"23678.05, 1170.60, 2155.50";"209.90, 150.00, 3.00";"f///EdyoIN4QAAAAAAAAf///";"A59EAC26AFQk";"";"";"";"0045, 0020";"";"";"";{"Zuordnung": "0005", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
19;"ILS 2.0 Scanner";"0019";"Scanner :1";"L/1";1;"23780.80, 808.80, 2154.00";"150.00, 280.00, 1.00";"f///EdWgIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0018"}
20;"ILS 2.0 Separator";"0020";"Separator :13";"L/1";1;"24570.15, 1167.20, 2155.50";"209.90, 150.00, 3.00";"f///Ec9gIN4QAAAAAAAAf///";"A8IdAC2YAFQk";"";"";"";"0018, 0023";"";"";"";{"Zuordnung": "0006-L", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
19;"ILS 2.0 Scanner";"0019";"Scanner :1";"L/1";1;"23780.80, 808.80, 2154.00";"150.00, 280.00, 1.00";"f///EdWgIN4QAAAAAAAApX2I";"";"";"";"";"";"";"";"";{"Zuordnung": "0005", "ARTINR": "829534306", "Höhe": "2154", "Drehung": 270, "Typ": "", "Naechster Separator": "0018"}
20;"ILS 2.0 Separator";"0020";"Separator :13";"L/1";1;"24570.15, 1167.20, 2155.50";"209.90, 150.00, 3.00";"f///Ec9gIN4QAAAAAAAAf///";"A8IdAC2YAFQk";"";"";"";"0018, 0023";"";"";"";{"Zuordnung": "0005", "ARTINR": "200000077", "Höhe": "2154", "Drehung": 180, "Typ": ""}
21;"ILS 2.0 BTMT Beladung";"0021";"BTMT Beladung :2";"B/1-C/1";1;"5532.67, 265.14, 2109.31";"652.35, 408.38, 316.02";"ULuUBaYYIN4QAAAAAAAAf/7S";"AON9AANLAFSv";"AMu/AA6CAFQk";"";"";"0023, 0022";"";"";"";{"ARTINR": "829662012", "Höhe": "2154", "Drehung": 179}
22;"ILS 2.0 BTMT Beladung";"0022";"BTMT Beladung :1";"B/1";1;"4503.25, 269.77, 2109.31";"651.33, 406.70, 316.02";"QQVQBbW4IN4QAAAAAAAAf/8o";"ALtMAAOBAFSv";"AKOGAA6oAFQk";"";"";"0021, 0007";"";"";"";{"ARTINR": "829662012", "Höhe": "2154", "Drehung": 179}
23;"ILS 2.0 BTMT Entladung";"0023";"BTMT Entladung :1";"L/1-M/1";1;"25014.37, 1545.51, 2001.09";"1475.51, 961.98, 467.01";"f///Edt8IN4QAAAAAAAAARVf";"A7q4AC1/AFQk";"A+0BAE7eAEX5";"";"";"0020, 0021";"";"";"";{"ARTINR": "400100156", "Höhe": "2154", "Drehung": 1}
Can't render this file because it contains an unexpected character in line 2 and column 233.
+6 -6
View File
@@ -1,9 +1,9 @@
Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details
1;"ILS 2.0 Kreisel";"6200";"Kreisel12";20;1;;"0006";{"2952": "2.154", "3510": "Kreisel", "3511": "1", "3512": "23.3", "3515": "4", "3517": "4", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
1;"ILS 2.0 Kreisel";"6200";"Kreisel1";20;1;;"0006";{"2952": "2.154", "3511": "1", "3515": "4", "3517": "4", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel", "3512": "23.3"}
2;"ILS 2.0 Zusatzmodul";"6215";"";20;1;;"0022, 0021, 0023";{"3501": "Ja", "3503": "2", "3502": "Ja", "3504": "1"}
3;"ILS 2.0 Strecke";"6220";"VF_9";20;1;;"0005";{"2950": "2.154", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "4", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "1", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
4;"ILS 2.0 Strecke";"6220";"VF_8";20;1;;"0004";{"2950": "2.154", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
5;"ILS 2.0 Strecke";"6220";"VF_7";20;1;;"0003";{"2950": "2.154", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
6;"ILS 2.0 Strecke";"6220";"VF_6";20;1;;"0002";{"2950": "2.154", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "3", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "1", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
7;"ILS 2.0 Strecke";"6220";"VF_5";20;1;;"0001";{"2950": "2.154", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.727", "4391": "3", "4314": "Ja", "4319": "0.201", "4392": "3", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "2", "4353": "3.704", "4354": "horizontal", "4386": "0", "4373": "0", "4374": "0", "4375": "1", "4376": "2", "4377": "0", "4378": "1", "4381": "5", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
3;"ILS 2.0 Strecke";"6220";"VF_5";20;1;;"0005";{"2950": "2.154", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "4", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "1", "3992": "Ja", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4433": "1.800", "4434": "1.800", "4435": "2.071"}
4;"ILS 2.0 Strecke";"6220";"VF_4";20;1;;"0004";{"2950": "2.154", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4433": "1.800", "4434": "1.800", "4435": "2.071"}
5;"ILS 2.0 Strecke";"6220";"VF_3";20;1;;"0003";{"2950": "2.154", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4433": "1.800", "4434": "1.800", "4435": "2.071"}
6;"ILS 2.0 Strecke";"6220";"VF_2";20;1;;"0002";{"2950": "2.154", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "3", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "1", "3992": "Ja", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4433": "1.800", "4434": "1.800", "4435": "2.071"}
7;"ILS 2.0 Strecke";"6220";"VF_1";20;1;;"0001";{"2950": "2.154", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "1", "4376": "2", "4377": "0", "4378": "1", "4381": "5", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "0.727", "4391": "3", "4314": "Ja", "4319": "0.201", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "2", "4353": "3.704", "4354": "horizontal", "4386": "0", "4433": "1.980", "4434": "1.980", "4435": "1.875", "4436": "2.076", "4437": "2.282"}
8;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"4000": "Ja", "4400": "1", "4413": "4", "4401": "0", "4414": "0", "4402": "0", "4419": "23.30", "4403": "0", "4404": "0", "4425": "0", "4426": "0", "4407": "5", "4418": "0.00", "4408": "17", "4420": "0.0", "4409": "0", "4417": "0.0", "4410": "20", "4411": "6", "4421": "2", "4422": "1", "4100": "Ja"}
Can't render this file because it contains an unexpected character in line 2 and column 54.
+8 -8
View File
@@ -3,7 +3,7 @@
"test_id": "KR_Kreuz_Q1_0Grad",
"status": "executed",
"block_name": "KREISEL_1_STANDARD_2000",
"block_handle": "13A",
"block_handle": "186",
"insert_point": [500, 500, 2500],
"actual_attributes": {
"ID": "0001",
@@ -28,7 +28,7 @@
"test_id": "KR_Kreuz_Q2_90Grad",
"status": "executed",
"block_name": "KREISEL_2_STANDARD_3000",
"block_handle": "187",
"block_handle": "1D7",
"insert_point": [-500, 500, 2500],
"actual_attributes": {
"ID": "0002",
@@ -53,7 +53,7 @@
"test_id": "KR_Kreuz_Q3_180Grad",
"status": "executed",
"block_name": "KREISEL_3_STANDARD_4000",
"block_handle": "1D3",
"block_handle": "227",
"insert_point": [-500, -500, 2500],
"actual_attributes": {
"ID": "0003",
@@ -78,7 +78,7 @@
"test_id": "KR_Kreuz_Q4_270Grad",
"status": "executed",
"block_name": "KREISEL_4_STANDARD_5000",
"block_handle": "21F",
"block_handle": "277",
"insert_point": [500, -500, 2500],
"actual_attributes": {
"ID": "0004",
@@ -103,7 +103,7 @@
"test_id": "KR_Schraeg_Q1_30Grad",
"status": "executed",
"block_name": "KREISEL_5_STANDARD_3000",
"block_handle": "26B",
"block_handle": "2C7",
"insert_point": [3000, 3000, 3000],
"actual_attributes": {
"ID": "0005",
@@ -128,7 +128,7 @@
"test_id": "KR_Pin_Q1_0Grad",
"status": "executed",
"block_name": "KREISEL_6_PIN_3000",
"block_handle": "2BC",
"block_handle": "31C",
"insert_point": [500, 6000, 1500],
"actual_attributes": {
"ID": "0006",
@@ -153,7 +153,7 @@
"test_id": "KR_Pin_Q1_90Grad",
"status": "executed",
"block_name": "KREISEL_7_PIN_4000",
"block_handle": "30C",
"block_handle": "370",
"insert_point": [-500, 6500, 1500],
"actual_attributes": {
"ID": "0007",
@@ -178,7 +178,7 @@
"test_id": "KR_Pin_Q1_30Grad_Schraeg",
"status": "executed",
"block_name": "KREISEL_8_PIN_3000",
"block_handle": "35C",
"block_handle": "3C4",
"insert_point": [3000, 8000, 1500],
"actual_attributes": {
"ID": "0008",
+8 -7
View File
@@ -1,8 +1,9 @@
Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details
1;"ILS 2.0 Kreisel";"6200";"Kreisel8, Kreisel6";20;2;;"0008, 0006";{"2952": "1.5", "3510": "Kreisel mit PINBAND", "3511": "1", "3512": "3.0", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
2;"ILS 2.0 Kreisel";"6200";"Kreisel7";20;1;;"0007";{"2952": "1.5", "3510": "Kreisel mit PINBAND", "3511": "1", "3512": "4.0", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
3;"ILS 2.0 Kreisel";"6200";"Kreisel5, Kreisel2";20;2;;"0005, 0002";{"2952": "3", "3510": "Kreisel", "3511": "1", "3512": "3.0", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
4;"ILS 2.0 Kreisel";"6200";"Kreisel4";20;1;;"0004";{"2952": "2.5", "3510": "Kreisel", "3511": "1", "3512": "5.0", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
5;"ILS 2.0 Kreisel";"6200";"Kreisel3";20;1;;"0003";{"2952": "2.5", "3510": "Kreisel", "3511": "1", "3512": "4.0", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
6;"ILS 2.0 Kreisel";"6200";"Kreisel1";20;1;;"0001";{"2952": "2.5", "3510": "Kreisel", "3511": "1", "3512": "2.0", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst"}
7;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"4000": "Ja", "4400": "8", "4413": "0", "4401": "3", "4414": "0", "4402": "0", "4419": "27.00", "4403": "0", "4404": "0", "4425": "0", "4426": "0", "4407": "0", "4418": "0.00", "4408": "0", "4420": "0.0", "4409": "0", "4417": "0.0", "4410": "0", "4411": "0", "4421": "0", "4422": "0", "4100": "Ja"}
1;"ILS 2.0 Kreisel";"6200";"Kreisel8, Kreisel6";20;2;;"0008, 0006";{"2952": "1.5", "3511": "1", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel mit PINBAND", "3512": "3.0"}
2;"ILS 2.0 Kreisel";"6200";"Kreisel7";20;1;;"0007";{"2952": "1.5", "3511": "1", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel mit PINBAND", "3512": "4.0"}
3;"ILS 2.0 Kreisel";"6200";"Kreisel5";20;1;;"0005";{"2952": "3", "3511": "1", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel", "3512": "3.0"}
4;"ILS 2.0 Kreisel";"6200";"Kreisel4";20;1;;"0004";{"2952": "2.5", "3511": "1", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel", "3512": "5.0"}
5;"ILS 2.0 Kreisel";"6200";"Kreisel3";20;1;;"0003";{"2952": "2.5", "3511": "1", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel", "3512": "4.0"}
6;"ILS 2.0 Kreisel";"6200";"Kreisel2";20;1;;"0002";{"2952": "2.5", "3511": "1", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel", "3512": "3.0"}
7;"ILS 2.0 Kreisel";"6200";"Kreisel1";20;1;;"0001";{"2952": "2.5", "3511": "1", "3515": "0", "3517": "0", "3519": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "3510": "Kreisel", "3512": "2.0"}
8;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"4000": "Ja", "4400": "8", "4413": "0", "4401": "3", "4414": "0", "4402": "0", "4419": "27.00", "4403": "0", "4404": "0", "4425": "0", "4426": "0", "4407": "0", "4418": "0.00", "4408": "0", "4420": "0.0", "4409": "0", "4417": "0.0", "4410": "0", "4411": "0", "4421": "0", "4422": "0", "4100": "Ja"}
Can't render this file because it contains an unexpected character in line 2 and column 69.
+1 -1
View File
@@ -2,7 +2,7 @@
{
"test_id": "LZ_Standard",
"status": "OK",
"schritte_gesamt": 37,
"schritte_gesamt": 34,
"schritte_offen": 0
}
]
+2 -2
View File
@@ -1,3 +1,3 @@
Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details
1;"ILS 2.0 Strecke";"6220";"VF_1";20;1;;"0001";{"Anlagenhöhe in Meter": "2.154", "Streckengruppe": "mehrere Objekte", "Strecken- zu fertigende Menge": "1", "Streckengruppe - Gefällestrecke": "Ja", "Streckengruppe - Gefällestrecke 001-Länge in Meter": "4.166", "Streckengruppe - Gefällestrecke 001 -Winkel": "3", "Streckengruppe - Gefällestrecke 002": "Ja", "Streckengruppe - Gefällestrecke 002-Länge in Meter": "1.658", "Streckengruppe - Gefällestrecke 002- Winkel": "3", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke links 30°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 90°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 60°": "0", "Streckengruppe - Anzahl der Kurven - Gefällestrecke rechts 30°": "0", "Streckengruppe - Anzahl der Separatoren - Gefällestrecke": "0", "Streckengruppe - Bearbeitung Gefällestreckenteilstück für Separator (829516050)": "ohne HARTCOAT HRC 50 ± 5", "Streckengruppe - Anzahl der Scanner": "0", "Streckengruppe - Varioförderer": "Ja", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (links)": "0", "Streckengruppe - Anzahl der Motoren für Vario-Förderer (rechts)": "1", "Streckengruppe - Varioförderer 001-Länge in Meter": "0.269", "Streckengruppe - Varioförderer 001-Richtung": "horizontal", "Streckengruppe - Varioförderer 001- Winkel": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 90°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Außenbogen 30°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 90°": "2", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 60°": "0", "Streckengruppe - Anzahl der Kurven - Varioförderer Innenbogen 30°": "0", "Streckengruppe - Anzahl der Separatoren - Varioförderer": "2", "Gerüst für Einzelmodul": "Ja", "Gerüstoption für Einzelmodul": "Schönenberger-Gerüst"}
2;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"Automation": "Ja", "Anzahl der Kreisel": "0", "Anzahl der Separatoren - Kreisel ohne PINBAND": "0", "Anzahl der Kreisel mit PINBAND": "0", "Anzahl der Separatoren - Kreisel mit PINBAND": "0", "Anzahl der Verbindungskreisel": "0", "Längen aller Kreisel": "0.00", "Anzahl der Weichen": "0", "Anzahl der Eckräder": "0", "Anzahl der einzelnen Gefällestrecken": "0", "Anzahl der einzelnen Vario-Förderer": "0", "Anzahl der Streckengruppen": "1", "Längen aller Gefällestrecken": "0.00", "Anzahl der Motoren in Vario - Förderer": "3", "Längen aller Vario - Förderer": "0.0", "Anzahl der ETFs": "0", "Längen aller ETFS und Zusatzstücke (Gefällestrecken)": "0.0", "Anzahl der Separatoren in der Anlage": "2", "Anzahl der Scanner in der Anlage": "0", "Zusatzmodul - Anzahl der BT-Beladung": "0", "Zusatzmodul - Anzahl der Abwurfstation": "0", "Pneumatik": "Ja"}
1;"ILS 2.0 Strecke";"6220";"VF_1";20;1;;"0001";{"2950": "2.154", "4431": "Ja", "4427": "90 °", "4428": "links", "4432": "Ja", "4429": "90 °", "4430": "links", "4329": "0", "4330": "0", "4331": "0", "4332": "0", "4333": "0", "4334": "0", "4373": "0", "4374": "0", "4375": "0", "4376": "2", "4377": "0", "4378": "0", "4381": "2", "4382": "ohne HARTCOAT HRC 50 ± 5", "4383": "0", "3992": "Ja", "3993": "Schönenberger-Gerüst", "4300": "mehrere Objekte", "4311": "1", "4312": "Ja", "4318": "4.166", "4391": "3", "4314": "Ja", "4319": "1.658", "4392": "3", "4337": "0", "4338": "ohne HARTCOAT HRC 50 ± 5", "4339": "0", "4340": "Ja", "4341": "0", "4342": "1", "4353": "0.269", "4354": "horizontal", "4386": "0", "4433": "1.800", "4434": "1.800", "4435": "2.071"}
2;"ILS 2.0 Automation und Pneumatik - Gesamtanlage";"6269";"";20;1;;"";{"4000": "Ja", "4400": "0", "4413": "0", "4401": "0", "4414": "0", "4402": "0", "4419": "0.00", "4403": "0", "4404": "0", "4425": "0", "4426": "0", "4407": "1", "4418": "0.00", "4408": "3", "4420": "0.0", "4409": "0", "4417": "0.0", "4410": "2", "4411": "0", "4421": "0", "4422": "0", "4100": "Ja"}
Can't render this file because it contains an unexpected character in line 2 and column 49.
+174
View File
@@ -0,0 +1,174 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
test_export_freie_separatoren.py - freie Separatoren in der Kette einer Strecke.
Laeuft komplett ohne BricsCAD (reine Python-Logik, siehe lib/export_neighbors.py).
Szenario nach einem realen Mubea-Befund (VF_3 = 0015): die sepliste aus dem
Bau kennt nur AS 0061, SEP 0062, SEP 0063, ES 0064. Die eigenstaendigen
Separatoren 0037/0038 liegen auf der Strecke, ihre Zuordnung nennt 0015 - sie
fehlten aber in TrackIds und Nachbarn. einsortieren_freie_separatoren nimmt
sie nach Lage auf.
Alle Daten sind hier fest eingetragen (Stand des Mubea-Exports 2026-10-28) und
werden aus keiner Datei gelesen - aendert sich die Mubea-Zeichnung, bleibt
dieser Test unberuehrt. Er prueft den Algorithmus, nicht die Szene.
"""
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
from export_neighbors import ( # noqa: E402
compute_sep_kette,
einsortieren_freie_separatoren,
sepliste_einsortier_positionen,
)
from export_csv import ( # noqa: E402
map_sepliste_kette_items,
resolve_umlauf_und_sepliste_nachbarn,
write_separatorliste_merkmale,
)
TOL_MM = 100.0
def _sep(teileid, x, y, zuordnung):
return {
"teileart": "ILS 2.0 Separator",
"teileid": teileid,
"merkmale": {"Zuordnung": zuordnung},
"nachbarn": "",
"_bbox": {"cx": x, "cy": y, "cz": 0.0, "dx": 150.0, "dy": 210.0},
}
def _ases(teileart, teileid, x, y, zuordnung):
return {
"teileart": teileart,
"teileid": teileid,
"_zuordnung": zuordnung,
"merkmale": {},
"nachbarn": "",
"_bbox": {"cx": x, "cy": y, "cz": 0.0, "dx": 200.0, "dy": 200.0},
}
def _mubea_vf3():
strecke = {
"teileart": "ILS 2.0 Strecke",
"teileid": "0015",
"nachbarn": "0002-L",
"merkmale": {},
"k1": "", "k2": "",
"_bbox": {"cx": -631.28, "cy": 6543.11, "cz": 1624.70,
"dx": 1018.09, "dy": 12791.0},
"sepliste": [
{"typ": "AS", "lfdnr": 1, "id": "0061"},
{"typ": "SEP", "lfdnr": 2, "id": "0062"},
{"typ": "SEP", "lfdnr": 3, "id": "0063"},
{"typ": "ES", "lfdnr": 4, "id": "0064"},
],
}
return [
strecke,
_ases("ILS Ausschleuselement", "0061", -400.00, 270.54, "0015"),
_sep("0062", -898.87, 1134.60, "0015"),
_sep("0063", -702.98, 12307.81, "0015"),
_ases("ILS Einschleuselement", "0064", -400.00, 12832.58, "0015"),
_sep("0037", -1026.00, 10723.05, "0015"),
_sep("0038", -1026.00, 5250.05, "0015"),
]
def _by_id(items, teileid):
return next(it for it in items if it.get("teileid") == teileid)
def _pipeline(items):
einsortieren_freie_separatoren(items, TOL_MM)
sep_kette = compute_sep_kette(items)
sep_kette_by_key = map_sepliste_kette_items(items, sep_kette)
write_separatorliste_merkmale(items, sep_kette_by_key)
resolve_umlauf_und_sepliste_nachbarn(items, {}, sep_kette, sep_kette_by_key, {})
return items
class TestEinsortierPositionen:
"""Reiner Rechenkern, ohne Items."""
KETTE = [(0.0, 0.0), (0.0, 1000.0), (0.0, 5000.0), (0.0, 6000.0)]
def test_zwei_kandidaten_im_selben_abschnitt_sortiert(self):
einfuegen, verworfen = sepliste_einsortier_positionen(
self.KETTE, [("B", 50.0, 4000.0), ("A", -50.0, 2000.0)])
assert einfuegen == {1: ["A", "B"]}
assert verworfen == []
def test_vor_as_und_hinter_es_verworfen(self):
einfuegen, verworfen = sepliste_einsortier_positionen(
self.KETTE, [("vor", 0.0, -500.0), ("hinter", 0.0, 6500.0)])
assert einfuegen == {}
assert sorted(verworfen) == ["hinter", "vor"]
def test_kette_um_eine_kurve(self):
"""Polygonzug statt Gerade AS->ES: ein Separator auf dem zweiten
Schenkel einer L-Kette gehoert in DEN Abschnitt, nicht nach
seiner Projektion auf die Diagonale."""
kette = [(0.0, 0.0), (0.0, 3000.0), (3000.0, 3000.0)]
einfuegen, _ = sepliste_einsortier_positionen(kette, [("S", 1500.0, 3050.0)])
assert einfuegen == {1: ["S"]}
def test_entartete_kette(self):
einfuegen, verworfen = sepliste_einsortier_positionen(
[(0.0, 0.0), (0.0, 0.0)], [("S", 10.0, 10.0)])
assert einfuegen == {}
assert verworfen == ["S"]
class TestMubeaVf3:
def test_trackids_mit_freien_separatoren(self):
items = _pipeline(_mubea_vf3())
assert _by_id(items, "0015").get("trackids") == \
"0061, 0062, 0038, 0037, 0063, 0064"
def test_nachbarn_der_kette(self):
items = _pipeline(_mubea_vf3())
assert _by_id(items, "0062")["nachbarn"] == "0061, 0038"
assert _by_id(items, "0038")["nachbarn"] == "0062, 0037"
assert _by_id(items, "0037")["nachbarn"] == "0038, 0063"
assert _by_id(items, "0063")["nachbarn"] == "0037, 0064"
def test_hinweis_am_freien_separator(self):
items = _pipeline(_mubea_vf3())
assert "0015" in _by_id(items, "0037").get("warnung", "")
assert _by_id(items, "0062").get("warnung", "") == ""
def test_merkmal_einsortiert_in(self):
items = _pipeline(_mubea_vf3())
assert _by_id(items, "0037")["merkmale"].get("Einsortiert in") == "0015"
assert _by_id(items, "0038")["merkmale"].get("Einsortiert in") == "0015"
assert "Einsortiert in" not in _by_id(items, "0062")["merkmale"]
def test_fremde_zuordnung_bleibt_draussen(self):
items = _mubea_vf3()
_by_id(items, "0037")["merkmale"]["Zuordnung"] = "0002-L"
_pipeline(items)
assert _by_id(items, "0015").get("trackids") == "0061, 0062, 0038, 0063, 0064"
def test_ausserhalb_der_strecken_bbox_bleibt_draussen(self):
items = _mubea_vf3()
_by_id(items, "0038")["_bbox"]["cx"] = -3000.0
_pipeline(items)
assert _by_id(items, "0015").get("trackids") == "0061, 0062, 0037, 0063, 0064"
def test_ohne_ids_kein_einsortieren(self):
"""Altbestand ohne aufgeloeste IDs: Glieder nicht lokalisierbar ->
sepliste bleibt wie gebaut."""
items = _mubea_vf3()
for e in _by_id(items, "0015")["sepliste"]:
e["id"] = ""
einsortieren_freie_separatoren(items, TOL_MM)
assert len(_by_id(items, "0015")["sepliste"]) == 4
+2 -1
View File
@@ -477,6 +477,7 @@
;; aufgehen und warten).
(setq *hmrec-alt-wizard* (if (boundp '*vfl-wizard-mode*) *vfl-wizard-mode*))
(setq *vfl-wizard-mode* nil)
(setq *hmrec-alt-gui* (if (boundp '*ssg-gui-aus*) *ssg-gui-aus*))
(if (car (atoms-family 1 '("SSG-GUI-AUS"))) (ssg-gui-aus))
;; Headless-Riegel der Produktion einschalten: eine erschoepfte Replay-Queue
;; ist dann ein harter, lokalisierter Abbruch statt eines stillen Rueckfalls
@@ -497,7 +498,7 @@
alert *hmrec-alt-alert*)
(setq *vfl-wizard-mode* *hmrec-alt-wizard*)
(setq *vfl-headless* *hmrec-alt-headless*)
(if (car (atoms-family 1 '("SSG-GUI-AN"))) (ssg-gui-an))
(setq *ssg-gui-aus* *hmrec-alt-gui*) ; Vorzustand, nicht pauschal an
(princ)
)
+7 -4
View File
@@ -148,7 +148,7 @@
;; ebenfalls nur einen einzigen Testfall pro Lauf kennt).
(defun tlz-run-datei (json-datei test-id befehl-anzeige /
daten meta schritte-anz rest-anz status
old-vgp old-gs old-gi old-gr err)
old-vgp old-gs old-gi old-gr err old-gui)
(if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek))
(if (null (car (atoms-family 1 '("VF-LINIENZUG-MODUS"))))
(progn
@@ -185,6 +185,7 @@
;; GUI aus: keine Wizard-DCL-Dialoge waehrend des automatischen Replays -
;; die Eingaben kommen aus der Mock-Queue (getstring/getint/getreal), siehe
;; ssg-gui-aus/ssg-gui-p in ssg_core.lsp und vfl-wizard-mode-p.
(setq old-gui (if (boundp '*ssg-gui-aus*) *ssg-gui-aus*))
(if (car (atoms-family 1 '("SSG-GUI-AUS"))) (ssg-gui-aus))
;; --- Eingabe-Funktionen sichern und durch Mocks ersetzen ---
@@ -201,9 +202,11 @@
;; --- Eingabe-Funktionen wiederherstellen (IMMER) ---
(setq vfl-getpoint old-vgp getstring old-gs getint old-gi getreal old-gr)
;; GUI wieder einschalten (auch nach Fehler), damit eine folgende interaktive
;; Sitzung nicht headless bleibt.
(if (car (atoms-family 1 '("SSG-GUI-AN"))) (ssg-gui-an))
;; GUI-Zustand von VOR dem Test wiederherstellen (auch nach Fehler) - NICHT
;; pauschal einschalten: unter SSG_RUN_ALL_TESTS ist sie fuer den ganzen
;; Batch aus, und ein pauschales ssg-gui-an liess den anschliessenden
;; EXPORTSIVAS nach Hoehen-Check/Bereinigen fragen (Lauf hing).
(setq *ssg-gui-aus* old-gui)
(setq rest-anz (length *tlz-q*))
+86 -2
View File
@@ -69,6 +69,45 @@
;; --- Hilfsfunktion: String-Wert aus JSON-Objekt-Zeile lesen ---
;; Sucht "key": "value" in obj-str und gibt value zurueck.
;; Rueckgabe: String (nicht leer) oder nil (key fehlt, null, leer).
;; ------------------------------------------------------------
;; Laufprotokoll je Test (Debug-Schalter "testlauf", Standard EIN)
;; ------------------------------------------------------------
;; DXFM_LOG/testlauf_<name>.dbg - eine Datei je Test, bei jedem Lauf neu.
;; Bewusst NICHT ueber dbgopen/*dbg-path*: die getesteten Module oeffnen und
;; schliessen dort ihre eigenen .dbg-Dateien (vfl_modus1.dbg ...) und wuerden
;; das Protokoll mitten im Test umlenken. Jede Zeile wird SOFORT angehaengt
;; (kein Puffer) - haengt ein Test, steht der letzte erreichte Schritt drin.
(if (not (boundp '*testrun-log*)) (setq *testrun-log* nil))
(defun testrun:log-start (name / dir fh)
(setq *testrun-log* nil)
(if (and (car (atoms-family 1 '("DBG-SCHALTER-P"))) (dbg-schalter-p "testlauf"))
(progn
(setq dir (cond ((getenv "DXFM_LOG")) ((strcat (getenv "DXFMAKRO") "/logs"))))
(vl-mkdir dir)
(setq *testrun-log* (strcat dir "/testlauf_" name ".dbg"))
(if (setq fh (open *testrun-log* "w"))
(progn (write-line (strcat "=== TESTLAUF " name " ===") fh) (close fh))
(setq *testrun-log* nil))))
*testrun-log*)
(defun testrun:log (text / fh)
(if (and *testrun-log* (setq fh (open *testrun-log* "a")))
(progn
(write-line (strcat (if (car (atoms-family 1 '("DBG-TIMESTAMP"))) (dbg-timestamp) "")
" " text)
fh)
(close fh)))
(princ))
;; Schalter, die in einem Testlauf eine Rueckfrage ausloesen koennen.
(defun testrun:zustand ()
(strcat "GUI=" (if (and (boundp '*ssg-gui-aus*) *ssg-gui-aus*) "aus" "AN")
" hoehencheck-fragen=" (vl-princ-to-string (if (boundp '*csv-hoehencheck-fragen*) *csv-hoehencheck-fragen*))
" bereinigen=" (vl-princ-to-string (if (boundp '*csv-bereinigen-vor-export*) *csv-bereinigen-vor-export*))
" wizard=" (vl-princ-to-string (if (boundp '*vfl-wizard-mode*) *vfl-wizard-mode*))
" DWGNAME=" (getvar "DWGNAME")))
;; Dateiname ohne fuehrenden Praefix (sonst unveraendert). Gegenstueck zu
;; export:dwg-praefix, den der Export selbst vor den Namen setzt.
(defun testrun:ohne-praefix (dateiname praefix)
@@ -162,7 +201,7 @@
out-path dwg-pfad dxf-pfad old-json test-result
old-filenames csv-name sivas-name csv-pfad
sivas-pfad csv-ok sivas-ok old-filedia
praefix)
praefix old-hoehencheck old-bereinigen)
(setq tests-pfad (strcat (getenv "DXFMAKRO") "/tests"))
(setq tests-out-dir (strcat tests-pfad "/output"))
@@ -220,6 +259,13 @@
;; oeffnet DCL-/Wizard-Dialoge, die den automatischen Lauf blockieren wuerden.
;; Am Ende wieder einschalten. Siehe ssg-gui-aus/-an in ssg_core.lsp.
(if (car (atoms-family 1 '("SSG-GUI-AUS"))) (ssg-gui-aus))
;; Rueckfragen des Exports (export.lsp) fuer den ganzen Lauf abschalten -
;; zusaetzlich zur GUI-Sperre, damit auch ein Test, der die GUI wieder
;; einschaltet, den Export nicht anhalten kann.
(setq old-hoehencheck (if (boundp '*csv-hoehencheck-fragen*) *csv-hoehencheck-fragen*)
old-bereinigen (if (boundp '*csv-bereinigen-vor-export*) *csv-bereinigen-vor-export*))
(setq *csv-hoehencheck-fragen* nil
*csv-bereinigen-vor-export* 'aus)
;; Tests laden und ausfuehren
;; Jeder Test bekommt eine eigene neue Zeichnung (statt die aktuelle
@@ -279,10 +325,18 @@
;; Testreihenfolge ab und jeder Referenz-Diff wurde unruhig.
(setq #VF_LetzteNr 0 #GF_LetzteNr 0 #Kreisel_LetzteNr 0 #Eckrad_LetzteNr 0)
(testrun:log-start name)
(testrun:log (strcat "Test " (itoa idx) "/" (itoa anz) ": " befehl
" Modul=" (if module module "-")
" save=" (if save-fmt save-fmt "-")
" Modus=" (if auto-export "Automatik" "Kontrolle")))
(testrun:log (strcat "Vor Test: " (testrun:zustand)))
(if (findfile datei)
(progn
(load datei)
;; Test mit Fehlerbehandlung ausfuehren
(testrun:log (strcat "Starte " befehl))
(setq test-result
(vl-catch-all-apply
'(lambda ()
@@ -292,12 +346,18 @@
)
)
(if (vl-catch-all-error-p test-result)
(progn
(princ (strcat "\n FEHLER in " befehl ": "
(vl-catch-all-error-message test-result)))
)
(testrun:log (strcat "FEHLER in " befehl ": "
(vl-catch-all-error-message test-result))))
(testrun:log (strcat befehl " beendet")))
(testrun:log (strcat "Nach Test: " (testrun:zustand)))
;; JSON-Export (immer)
(apply export-fn (list tests-out-dir))
(testrun:log (strcat "Ergebnis-JSON " name "_results.json: "
(if (findfile old-json) "vorhanden" "FEHLT")))
(setq out-path (strcat tests-out-dir "/" name "_tests"))
@@ -364,22 +424,40 @@
(T p)))
old-filenames))
;; Unmittelbar vor dem Export erneut erzwingen: export.lsp setzt
;; *csv-hoehencheck-fragen* beim (Nach-)Laden von nil auf T, und
;; ein Test kann die GUI wieder eingeschaltet haben.
(if (not (and (boundp '*ssg-gui-aus*) *ssg-gui-aus*))
(progn
(testrun:log "WARNUNG: GUI war nach dem Test wieder AN - fuer den Export abgeschaltet")
(princ "\n WARNUNG: GUI war nach dem Test wieder an - abgeschaltet.")
(ssg-gui-aus)))
(setq *csv-hoehencheck-fragen* nil
*csv-bereinigen-vor-export* 'aus)
(testrun:log (strcat "Vor Export: " (testrun:zustand)))
(princ (strcat "\n CSV-Export -> " csv-name))
(testrun:log (strcat "EXPORTCSV -> " csv-pfad))
(c:EXPORTCSV)
(setq csv-ok (testrun:wait-for-file csv-pfad 30.0))
(princ (if csv-ok "\n CSV OK" "\n CSV TIMEOUT/FEHLER"))
(testrun:log (if csv-ok "EXPORTCSV OK" "EXPORTCSV TIMEOUT/FEHLER - Datei nicht entstanden"))
(princ (strcat "\n Sivas-Export -> " sivas-name))
(testrun:log (strcat "EXPORTSIVAS -> " sivas-pfad))
(c:EXPORTSIVAS)
(setq sivas-ok (testrun:wait-for-file sivas-pfad 30.0))
(princ (if sivas-ok "\n Sivas OK" "\n Sivas TIMEOUT/FEHLER"))
(testrun:log (if sivas-ok "EXPORTSIVAS OK" "EXPORTSIVAS TIMEOUT/FEHLER - Datei nicht entstanden"))
(setq *export-filenames* old-filenames)
;; Zeichnung schliessen: der urspruenglich schon offene Tab
;; bleibt unangetastet, BricsCAD erzeugt daher kein neues
;; Blank-Dokument samt Modul-/Menue-Reload.
(testrun:log "Zeichnung schliessen")
(vla-close new-doc :vlax-false)
(testrun:log "Test fertig")
)
;; ==========================================================
@@ -441,7 +519,9 @@
)
)
)
(progn
(princ (strcat "\n WARNUNG: " datei " nicht gefunden - uebersprungen"))
(testrun:log (strcat "WARNUNG: " datei " nicht gefunden - uebersprungen")))
)
) ;; end (progn ...) des aktiven Zweigs
) ;; end (if (cdr (assoc "disabled" entry)) ...)
@@ -449,6 +529,10 @@
;; GUI wieder einschalten (Batch fertig).
(if (car (atoms-family 1 '("SSG-GUI-AN"))) (ssg-gui-an))
;; nil = "nie gesetzt" (export.lsp belegt dann mit der Vorgabe vor)
(setq *csv-hoehencheck-fragen* (if old-hoehencheck old-hoehencheck T)
*csv-bereinigen-vor-export* (if old-bereinigen old-bereinigen 'an))
(setq *testrun-log* nil)
(setq *export-test-override* nil)
+2 -1
View File
@@ -8,6 +8,7 @@
"abstand": 5000,
"rotation": 0.0,
"typ": "STANDARD",
"drehrichtung": "GUZ",
"expect_block_prefix": "KREISEL_",
"expect_hoehe": "1554",
"expect_kreiselart": "STANDARD",
@@ -22,7 +23,7 @@
"abstand": 20015,
"rotation": 90.0,
"typ": "STANDARD",
"drehrichtung": "GUZ",
"drehrichtung": "UZS",
"expect_block_prefix": "KREISEL_",
"expect_hoehe": "1554",
"expect_kreiselart": "STANDARD",