[ADD] Nachbau ILS-3.0-Showroom: tests/testdata/showroom_ils.json aus Showroom_ILS_3_0.dxf (6 Kreisel, 11 Gefaellestrecken, Separatoren/Scanner; Hoehen noch Platzhalter), Treiber tests/test_showroom_ils.lsp (TEST_SHOWROOM_ILS, Menue Tests -> ILS 3.0 Showroom), in alltests.json bis zu den Hoehen deaktiviert; [ADD] dxf_scan_components.py: --flach (waagrechte Staustrecken mit AS an genau einem Ende als GF), --kreisel-achse (Kreisel ohne AN8/SP8, z.B. Schleifen mit Weichenboegen), zerstueckelte Staustrecken-Linien werden vereint, ES am unteren Ende wird erkannt und verbraucht, AS/ES-Seite ohne Seitenangabe im Namen aus der Lage zur Fahrtrichtung, Kurznamen AE-*/EE-*; [FIX] Kreisel-Paarung: zwei Kreisel auf derselben Achse wurden ueber die Luecke gepaart (800 + 12832 statt 9033 + 3000) - Tausch-Nachbesserung auf minimale Abstandssumme; [CHANGE] test_dematic_arvato.lsp: Lauf als dematic_arvato:bau-datei herausgeloest (vom Showroom-Treiber mitgenutzt); [ADD] Tests in test_dxf_scan_gf.py

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-07 15:00:45 +02:00
parent f1583d2d41
commit 4d0d689815
9 changed files with 824 additions and 47 deletions
+2 -1
View File
@@ -11,5 +11,6 @@
{ "name": "mubea", "save": "dxf", "module": "KreiselInsert" },
{ "name": "hundm05", "save": "dxf", "module": "VarioFoerderer" },
{ "name": "dematic_arvato", "save": "dxf", "module": "VarioFoerderer", "disabled": true },
{ "name": "hm_recformat", "save": "dxf", "module": "VarioFoerderer", "disabled": true }
{ "name": "hm_recformat", "save": "dxf", "module": "VarioFoerderer", "disabled": true },
{ "name": "showroom_ils", "save": "dxf", "module": "VarioFoerderer", "disabled": true }
]
+21 -13
View File
@@ -255,25 +255,27 @@
"fehler_text" (vl-catch-all-error-message res)))
res))
(defun c:TEST_DEMATIC_ARVATO ( / datei daten out zaehler st)
(setq datei (dematic_arvato:datei))
;; Alle Eintraege einer Nachbau-Datei bauen und die Records zurueckgeben
;; (nil bei Fehler vor dem Bau). Gemeinsamer Lauf fuer jeden Treiber mit
;; diesem Eintragsschema - auch tests/test_showroom_ils.lsp.
;; befehl = Name fuer Meldungen/ssg-start, titel = Kopfzeile, datei = JSON
(defun dematic_arvato:bau-datei (befehl titel datei / daten out records zaehler st)
(princ "\n\n================================================================")
(princ "\n TEST_DEMATIC_ARVATO - Abschnitt Flowpuffer/Kreisel")
(princ (strcat "\n " befehl " - " titel))
(princ (strcat "\n " datei))
(princ "\n================================================================")
(cond
((null (car (atoms-family 1 '("VSP-BAU-JOURNAL"))))
(princ "\n[TEST_DEMATIC_ARVATO] FEHLER: vf_spec.lsp nicht geladen"
" (VarioFoerderer laden).")
(setq *dematic-arvato-records* nil))
(princ (strcat "\n[" befehl "] FEHLER: vf_spec.lsp nicht geladen"
" (VarioFoerderer laden)."))
nil)
((null (findfile datei))
(princ (strcat "\n[TEST_DEMATIC_ARVATO] FEHLER: " datei " nicht gefunden!"))
(setq *dematic-arvato-records* nil))
(princ (strcat "\n[" befehl "] FEHLER: " datei " nicht gefunden!"))
nil)
(T
(setq daten (ssg-json-laden datei))
(princ (strcat "\n " (itoa (length daten)) " Eintraege geladen"))
(ssg-start "TEST_DEMATIC_ARVATO"
'(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA")))
(ssg-start befehl '(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA")))
(setvar "OSMODE" 0)
(setvar "ATTREQ" 0)
(setvar "ATTDIA" 0)
@@ -285,10 +287,10 @@
(foreach obj daten
(setq out (cons (dematic_arvato:bau-eintrag obj) out)))
(ssg-end)
(setq *dematic-arvato-records* (reverse out))
(setq records (reverse out))
;; Zusammenfassung je Status
(setq zaehler '())
(foreach r *dematic-arvato-records*
(foreach r records
(setq st (cond ((ssg-val r "status")) ("?")))
(if (assoc st zaehler)
(setq zaehler (subst (cons st (1+ (cdr (assoc st zaehler))))
@@ -298,7 +300,13 @@
(foreach z (reverse zaehler)
(princ (strcat "\n " (car z) ": " (itoa (cdr z)))))
(princ "\n================================================================")
(command "_.ZOOM" "_E")))
(command "_.ZOOM" "_E")
records)))
(defun c:TEST_DEMATIC_ARVATO ()
(setq *dematic-arvato-records*
(dematic_arvato:bau-datei "TEST_DEMATIC_ARVATO" "Abschnitt Flowpuffer/Kreisel"
(dematic_arvato:datei)))
(princ))
;; Ergebnis-Export (Konvention <name>:export-results fuer test_run_all.lsp)
+94
View File
@@ -166,3 +166,97 @@ def test_ohne_as_defaults_und_hinweis():
assert eintraege[0]["hz_grad"] == 0.0
assert eintraege[0]["as_seite"] == dsc.DEFAULT_SEITE
assert any("ohne Ausschleuselement" in h for h in hinweise)
# --- Showroom_ILS_3_0.dxf: flacher 2D-Plan, Werte dort gemessen -------------
def _station(x, y):
return {"x": x, "y": y}
def test_kreisel_paare_zwei_kreisel_auf_einer_achse():
# x=26998: AN8 y=3466 / SP8 y=12499 und AN8 y=13299 / SP8 y=16299. Die
# Luecke SP8(12499)-AN8(13299) = 800 ist das kuerzeste Paar - ohne
# Tausch-Nachbesserung kamen 800 + 12833 statt 9033 + 3000 heraus.
an = [_station(26998.0, 3466.4), _station(26998.0, 13298.9)]
sp = [_station(26998.0, 16298.9), _station(26998.0, 12498.9)]
paare, an_rest, sp_rest = dsc.kreisel_paare_bilden(an, sp)
assert an_rest == [] and sp_rest == []
abstaende = sorted(round(p[2], 1) for p in paare)
assert abstaende == [3000.0, 9032.5]
def test_zerstueckelte_linie_wird_vereint():
# GF bei x=34006 in vier Stuecken, das Separatorstueck 0,3 mm daneben
stuecke = [
_linie((34005.93, 13893.90, 0.0), (34005.93, 14193.90, 0.0)),
_linie((34005.93, 15043.90, 0.0), (34005.93, 15593.90, 0.0)),
_linie((34006.24, 14744.31, 0.0), (34006.24, 15044.31, 0.0)),
_linie((34005.93, 14193.90, 0.0), (34005.93, 14743.90, 0.0)),
]
vereint = dsc.linien_zusammenfassen(stuecke)
assert len(vereint) == 1
ys = sorted([vereint[0]["a"][1], vereint[0]["b"][1]])
assert ys == pytest.approx([13893.90, 15593.90], abs=0.01)
def test_parallele_nachbarlinie_wird_nicht_vereint():
linien = [_linie((0.0, 0.0, 0.0), (0.0, 1000.0, 0.0)),
_linie((800.0, 1000.0, 0.0), (800.0, 2000.0, 0.0))]
assert len(dsc.linien_zusammenfassen(linien)) == 2
def _kreisel_d():
# Schleife oben (Kette unten y=15898.9), Radmitten per --kreisel-achse
return {"id": "K_D", "a": (27797.93, 16298.9), "u": (1.0, 0.0),
"laenge": 8908.0, "r": 400.0, "z_anwender": None}
def _kreisel_e():
# Schleife Mitte (Kette oben y=13493.9)
return {"id": "K_E", "a": (28772.93, 13093.9), "u": (1.0, 0.0),
"laenge": 6533.0, "r": 400.0, "z_anwender": None}
def test_flacher_plan_richtung_und_seiten_aus_as_es():
# Waagrechte Linie; AE-D sitzt 305 mm VOR dem oberen Ende auf der
# Kreisel-Kette, 180 mm links der Fahrtrichtung (Fahrt -y, links = +x).
# EE-R am unteren Ende 212 mm rechts davon.
linie = _linie((30455.93, 13893.9, 0.0), (30455.93, 15593.9, 0.0))
ae = {"familie": "schleuselement", "block": "AE-D",
"x": 30636.27, "y": 15898.9, "z": 0.0, "rot": 270.0}
ee = {"familie": "schleuselement", "block": "EE-R",
"x": 30243.76, "y": 13493.9, "z": 0.0, "rot": 90.0}
eintraege, belegt, _ = dsc.gf_eintraege_aus_linien(
[linie], [ae], [_kreisel_d(), _kreisel_e()], es_liste=[ee], flach=True)
assert len(eintraege) == 1
gf = eintraege[0]
assert gf["hz_grad"] == 270.0
assert gf["start_mm"][:2] == [30455.93, 15898.9]
assert gf["deltaL_mm"] == pytest.approx(2405.0, abs=0.01)
assert (gf["as_seite"], gf["es_seite"]) == ("links", "rechts")
assert (gf["kreisel_start"], gf["kreisel_ende"]) == ("K_D", "K_E")
assert belegt == {id(ae), id(ee)}
def test_flacher_plan_ohne_flach_schalter_keine_gf():
linie = _linie((30455.93, 13893.9, 0.0), (30455.93, 15593.9, 0.0))
ae = {"familie": "schleuselement", "block": "AE-D",
"x": 30636.27, "y": 15898.9, "z": 0.0, "rot": 270.0}
eintraege, _, _ = dsc.gf_eintraege_aus_linien([linie], [ae])
assert eintraege == []
def test_flacher_plan_ohne_as_keine_gf():
# Staulinie am Kreisel B (x=36348) - kein AS an einem Ende
linie = _linie((36347.6, 11313.9, 0.0), (36347.6, 14913.9, 0.0))
eintraege, _, hinweise = dsc.gf_eintraege_aus_linien([linie], [], flach=True)
assert eintraege == []
assert any("waagrechte" in h for h in hinweise)
def test_kurznamen_ae_ee():
assert dsc.familie_von("AE-D") == "schleuselement"
assert dsc.familie_von("EE-R") == "schleuselement"
assert dsc.mappe_block("AE-D")[0].startswith("AS_Element_90_")
assert dsc.mappe_block("EE-R")[0].startswith("ES_Element_90_")
+58
View File
@@ -0,0 +1,58 @@
;; ============================================================
;; test_showroom_ils.lsp - Nachbau des ILS-3.0-Showrooms.
;;
;; Datenquelle: tests/testdata/showroom_ils.json, erzeugt aus der
;; Fremdzeichnung (flacher 2D-Plan, keine Hoehen):
;; python lib/dxf_scan_components.py \
;; C:/develop/sps_skel/data/Showroom_ILS_3_0.dxf data \
;; tests/testdata/showroom_ils.json --projekt Showroom \
;; --flach --ohne-hoehen \
;; --kreisel-achse 27797.93 16298.90 36705.93 16298.90 \
;; --kreisel-achse 28772.93 13093.90 35305.93 13093.90
;;
;; Inhalt: 6 Kreisel, 11 Gefaellestrecken (Modus 1), Separatoren/Scanner.
;; - Kreisel_Showroom_05/06 sind Schleifen ohne AN8/SP8 im Plan (an beiden
;; Enden Weichenboegen) - per --kreisel-achse als STANDARD-Kreisel
;; angenaehert (Radmitten = Mittelpunkte der PIN-Kreise).
;; - Weichen (WB-*/WM-*/WL-*/WR-*) werden bewusst NICHT nachgebaut.
;; - HOEHEN FEHLEN NOCH: alle z = 0, die GF laufen mit dem Platzhalter
;; winkel_grad 3.0. Sobald die Kreisel-Hoehen bekannt sind, den Scanner
;; mit --kreisel-hoehe X Y Z je Kreisel neu laufen lassen - dann bekommen
;; die GF start_mm.z/hoehe_ende_mm und der Treiber rechnet den Winkel.
;;
;; Keine eigene Bau-Logik: Eintragsschema und Lauf wie TEST_DEMATIC_ARVATO
;; (dematic_arvato:bau-datei aus tests/test_dematic_arvato.lsp).
;;
;; Aufruf in BricsCAD:
;; (load (strcat (getenv "DXFMAKRO") "/tests/test_showroom_ils.lsp"))
;; TEST_SHOWROOM_ILS
;; ============================================================
(if (not (boundp '*showroom-ils-records*)) (setq *showroom-ils-records* nil))
;; Beim LADEN holen (siehe test_dematic_arvato.lsp: per load definierte
;; Funktionen sind erst nach Rueckkehr zum Top-Level sichtbar).
(if (null (car (atoms-family 1 '("DEMATIC_ARVATO:BAU-DATEI"))))
(load (strcat (getenv "DXFMAKRO") "/tests/test_dematic_arvato.lsp")))
(defun showroom_ils:datei ()
(strcat (getenv "DXFMAKRO") "/tests/testdata/showroom_ils.json"))
(defun c:TEST_SHOWROOM_ILS ()
(setq *showroom-ils-records*
(dematic_arvato:bau-datei "TEST_SHOWROOM_ILS" "ILS 3.0 Showroom"
(showroom_ils:datei)))
(princ))
;; Ergebnis-Export (Konvention <name>:export-results fuer test_run_all.lsp)
(defun showroom_ils:export-results (out-dir / pfad)
(if (null *showroom-ils-records*)
(princ "\n Keine Showroom-Ergebnisse vorhanden.")
(progn
(vl-mkdir out-dir)
(setq pfad (strcat out-dir "/showroom_ils_results.json"))
(vsp-results-schreiben *showroom-ils-records* pfad)))
(princ))
(princ "\nTEST_SHOWROOM_ILS geladen. Aufruf: TEST_SHOWROOM_ILS")
(princ)
+410
View File
@@ -0,0 +1,410 @@
[
{
"id": "Kreisel_Showroom_01",
"function": "insert",
"x": 26997.93,
"y": 3066.4,
"z": 0.0,
"abstand": 9032.5,
"rotation": 90.0,
"typ": "STANDARD",
"darstellung": "2D",
"comment": "aus DXF: Radmitte AN8 (Layer 1ANTR-800) (26997.93, 3466.40) -> SP8 (Layer 1SP-800) (26997.93, 12498.90), Mittenabstand 9032.50, rotation 90.00 Grad; x/y = AN8-Mitte minus Radius. ACHTUNG hoehe=11039.9 ist NICHT belegt: AN8/SP8 sind flache 2D-Symbole auf Z=0 und nur 0 3D-Nachbarn in 3000 mm - zu wenige fuer eine belegbare Hoehe. [Hoehe entfernt: --ohne-hoehen]",
"hoehe_unbekannt": true
},
{
"id": "Kreisel_Showroom_02",
"function": "insert",
"x": 26997.93,
"y": 12898.9,
"z": 0.0,
"abstand": 3000.0,
"rotation": 90.0,
"typ": "STANDARD",
"darstellung": "2D",
"comment": "aus DXF: Radmitte AN8 (Layer 1ANTR-800) (26997.93, 13298.90) -> SP8 (Layer 1SP-800) (26997.93, 16298.90), Mittenabstand 3000.00, rotation 90.00 Grad; x/y = AN8-Mitte minus Radius. ACHTUNG hoehe=11039.9 ist NICHT belegt: AN8/SP8 sind flache 2D-Symbole auf Z=0 und nur 0 3D-Nachbarn in 3000 mm - zu wenige fuer eine belegbare Hoehe. [Hoehe entfernt: --ohne-hoehen]",
"hoehe_unbekannt": true
},
{
"id": "Kreisel_Showroom_03",
"function": "insert",
"x": 37105.93,
"y": 9888.9,
"z": 0.0,
"abstand": 7200.0,
"rotation": 180.0,
"typ": "STANDARD",
"darstellung": "2D",
"comment": "aus DXF: Radmitte AN8 (Layer 1ANTR-800) (36705.93, 9888.90) -> SP8 (Layer 1SP-800) (29505.93, 9888.90), Mittenabstand 7200.00, rotation 180.00 Grad; x/y = AN8-Mitte minus Radius. ACHTUNG hoehe=11039.9 ist NICHT belegt: AN8/SP8 sind flache 2D-Symbole auf Z=0 und nur 0 3D-Nachbarn in 3000 mm - zu wenige fuer eine belegbare Hoehe. [Hoehe entfernt: --ohne-hoehen]",
"hoehe_unbekannt": true
},
{
"id": "Kreisel_Showroom_04",
"function": "insert",
"x": 36705.93,
"y": 10288.9,
"z": 0.0,
"abstand": 4810.0,
"rotation": 90.0,
"typ": "STANDARD",
"darstellung": "2D",
"comment": "aus DXF: Radmitte AN8 (Layer 1ANTR-800) (36705.93, 10688.90) -> SP8 (Layer 1SP-800) (36705.93, 15498.90), Mittenabstand 4810.00, rotation 90.00 Grad; x/y = AN8-Mitte minus Radius. ACHTUNG hoehe=11039.9 ist NICHT belegt: AN8/SP8 sind flache 2D-Symbole auf Z=0 und nur 0 3D-Nachbarn in 3000 mm - zu wenige fuer eine belegbare Hoehe. [Hoehe entfernt: --ohne-hoehen]",
"hoehe_unbekannt": true
},
{
"id": "Kreisel_Showroom_05",
"function": "insert",
"x": 27397.93,
"y": 16298.9,
"z": 0.0,
"abstand": 8908.0,
"rotation": 0.0,
"typ": "STANDARD",
"darstellung": "2D",
"comment": "aus DXF: Radmitte (manuell AN8) (Layer --kreisel-achse) (27797.93, 16298.90) -> (manuell SP8) (Layer --kreisel-achse) (36705.93, 16298.90), Mittenabstand 8908.00, rotation 0.00 Grad; x/y = AN8-Mitte minus Radius. ACHTUNG hoehe=0.0 ist NICHT belegt: AN8/SP8 sind flache 2D-Symbole auf Z=0 und nur 0 3D-Nachbarn in 3000 mm - zu wenige fuer eine belegbare Hoehe.",
"hoehe_unbekannt": true
},
{
"id": "Kreisel_Showroom_06",
"function": "insert",
"x": 28372.93,
"y": 13093.9,
"z": 0.0,
"abstand": 6533.0,
"rotation": 0.0,
"typ": "STANDARD",
"darstellung": "2D",
"comment": "aus DXF: Radmitte (manuell AN8) (Layer --kreisel-achse) (28772.93, 13093.90) -> (manuell SP8) (Layer --kreisel-achse) (35305.93, 13093.90), Mittenabstand 6533.00, rotation 0.00 Grad; x/y = AN8-Mitte minus Radius. ACHTUNG hoehe=0.0 ist NICHT belegt: AN8/SP8 sind flache 2D-Symbole auf Z=0 und nur 0 3D-Nachbarn in 3000 mm - zu wenige fuer eine belegbare Hoehe.",
"hoehe_unbekannt": true
},
{
"test_id": "GF_Showroom_01",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [30455.93, 15898.9, 0.0],
"as_seite": "links",
"es_seite": "rechts",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_05",
"kreisel_ende": "Kreisel_Showroom_06",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (30455.93, 15593.90) -> (30455.93, 13893.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_05 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite links aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (30636.27, 15898.90) -> AS_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (30456, 13994), S-SP bei (30456, 14807); es_seite rechts aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (30243.76, 13493.90) -> ES_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_02",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [31255.93, 12693.9, 0.0],
"as_seite": "rechts",
"es_seite": "links",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_06",
"kreisel_ende": "Kreisel_Showroom_03",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (31255.93, 12388.90) -> (31255.93, 10688.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_03 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite rechts aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (31075.60, 12693.90) -> AS_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (31256, 10789), S-SP bei (31256, 11602); es_seite links aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (31468.11, 10288.90) -> ES_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_03",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [31255.93, 15898.9, 0.0],
"as_seite": "links",
"es_seite": "rechts",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_05",
"kreisel_ende": "Kreisel_Showroom_06",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (31255.93, 15593.90) -> (31255.93, 13893.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_05 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite links aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (31436.27, 15898.90) -> AS_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (31256, 13994), S-SP bei (31256, 14807); es_seite rechts aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (31043.76, 13493.90) -> ES_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_04",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [32055.93, 12693.9, 0.0],
"as_seite": "rechts",
"es_seite": "links",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_06",
"kreisel_ende": "Kreisel_Showroom_03",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (32055.93, 12388.90) -> (32055.93, 10688.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_03 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite rechts aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (31875.60, 12693.90) -> AS_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (32056, 10789), S-SP bei (32056, 11602); es_seite links aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (32268.11, 10288.90) -> ES_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_05",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [32055.93, 15898.9, 0.0],
"as_seite": "links",
"es_seite": "rechts",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_05",
"kreisel_ende": "Kreisel_Showroom_06",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (32055.93, 15593.90) -> (32055.93, 13893.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_05 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite links aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (32236.27, 15898.90) -> AS_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (32056, 13994), S-SP bei (32056, 14807); es_seite rechts aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (31843.76, 13493.90) -> ES_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_06",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [33205.93, 12693.9, 0.0],
"as_seite": "rechts",
"es_seite": "links",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_06",
"kreisel_ende": "Kreisel_Showroom_03",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (33205.93, 12388.90) -> (33205.93, 10688.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_03 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite rechts aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (33025.60, 12693.90) -> AS_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (33206, 10789), S-SP bei (33206, 11602); es_seite links aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (33418.11, 10288.90) -> ES_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_07",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [33205.93, 15898.9, 0.0],
"as_seite": "links",
"es_seite": "rechts",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_05",
"kreisel_ende": "Kreisel_Showroom_06",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (33205.93, 15593.90) -> (33205.93, 13893.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_05 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite links aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (33386.27, 15898.90) -> AS_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (33206, 13994), S-SP bei (33206, 14807); es_seite rechts aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (32993.76, 13493.90) -> ES_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_08",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [34005.93, 12693.9, 0.0],
"as_seite": "rechts",
"es_seite": "links",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_06",
"kreisel_ende": "Kreisel_Showroom_03",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (34005.93, 12388.90) -> (34005.93, 10688.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_03 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite rechts aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (33825.60, 12693.90) -> AS_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (34006, 10789), S-SP bei (34006, 11602); es_seite links aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (34218.11, 10288.90) -> ES_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_09",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [34005.93, 15898.9, 0.0],
"as_seite": "links",
"es_seite": "rechts",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_05",
"kreisel_ende": "Kreisel_Showroom_06",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (34005.93, 15593.90) -> (34005.93, 13893.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_05 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite links aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (34186.27, 15898.90) -> AS_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (34006, 13994), S-SP bei (34006, 14807); es_seite rechts aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (33793.76, 13493.90) -> ES_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_10",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [34805.93, 12693.9, 0.0],
"as_seite": "rechts",
"es_seite": "links",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_06",
"kreisel_ende": "Kreisel_Showroom_03",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (34805.93, 12388.90) -> (34805.93, 10688.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_03 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite rechts aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (34625.60, 12693.90) -> AS_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (34806, 10789), S-SP bei (34806, 11602); es_seite links aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (35018.11, 10288.90) -> ES_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"test_id": "GF_Showroom_11",
"modus": 1,
"deltaL_mm": 2405.0,
"hz_grad": 270.0,
"start_mm": [34805.93, 15898.9, 0.0],
"as_seite": "links",
"es_seite": "rechts",
"as_winkel": "90",
"es_winkel": "90",
"kreisel_start": "Kreisel_Showroom_05",
"kreisel_ende": "Kreisel_Showroom_06",
"winkel_grad": 3.0,
"hoehe_unbekannt": true,
"comment": "aus DXF: LINE auf Layer '6-SP' (34805.93, 15593.90) -> (34805.93, 13893.90), Laenge XY 1700.00; am oberen Ende um 305.0 mm bis zur Kette von Kreisel_Showroom_05 verlaengert; am unteren Ende um 400.0 mm bis zur Kette von Kreisel_Showroom_06 verlaengert; Hoehen unbekannt - winkel_grad 3.0 ist Platzhalter; as_seite links aus der Lage zur Fahrtrichtung; AS aus Block 'AE-D' bei (34986.27, 15898.90) -> AS_Element_90_links, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90; Separator auf der Achse entfernt (die GF baut ihren eigenen): S-SP bei (34806, 13994), S-SP bei (34806, 14807); es_seite rechts aus der Lage zur Fahrtrichtung; ES aus Block 'EE-R' bei (34593.76, 13493.90) -> ES_Element_90_rechts, als Einzel-Insert entfernt (baut die GF selbst) - geraten: Winkel=90."
},
{
"function": "insert",
"block": "S-LP",
"x": 26597.93,
"y": 11973.9,
"z": 0.0,
"rotation": 270.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer '5SEP-LP'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 26597.93,
"y": 13982.92,
"z": 0.0,
"rotation": 90.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer 'TGW_HB_2OG-AM_5'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 27397.93,
"y": 5450.07,
"z": 0.0,
"rotation": 90.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer 'TGW_HB_2OG-AM_5'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 27397.93,
"y": 15773.9,
"z": 0.0,
"rotation": 270.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer '5SEP-LP'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 29397.93,
"y": 13493.9,
"z": 0.0,
"rotation": 0.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer '5SEP-LP'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 30343.39,
"y": 9488.9,
"z": 0.0,
"rotation": 0.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer '5SEP-LP'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 32083.74,
"y": 9488.9,
"z": 0.0,
"rotation": 0.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer '5SEP-LP'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 35905.93,
"y": 10288.9,
"z": 0.0,
"rotation": 180.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer '5SEP-LP'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "S-LP",
"x": 37105.93,
"y": 14978.9,
"z": 0.0,
"rotation": 270.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'S-LP', Layer '5SEP-LP'; Block 'S-LP' ist in data/ils/ NICHT vorhanden - erzeugt im Testlauf einen Platzhalter; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "Scanner",
"x": 29398.73,
"y": 13176.71,
"z": 0.0,
"rotation": 270.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'SCAN', Layer 'ZZSCANNER', auf Makro-Block 'Scanner' abgebildet; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "Scanner",
"x": 30343.39,
"y": 9208.9,
"z": 0.0,
"rotation": 270.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'SCAN', Layer 'ZZSCANNER', auf Makro-Block 'Scanner' abgebildet; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "Scanner",
"x": 32083.74,
"y": 9208.9,
"z": 0.0,
"rotation": 270.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'SCAN', Layer 'ZZSCANNER', auf Makro-Block 'Scanner' abgebildet; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "Scanner",
"x": 35905.93,
"y": 10008.9,
"z": 0.0,
"rotation": 270.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'SCAN', Layer 'ZZSCANNER', auf Makro-Block 'Scanner' abgebildet; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
},
{
"function": "insert",
"block": "Scanner",
"x": 36825.93,
"y": 14978.9,
"z": 0.0,
"rotation": 180.0,
"darstellung": "2D",
"hoehe_unbekannt": true,
"comment": "aus DXF: Block 'SCAN', Layer 'ZZSCANNER', auf Makro-Block 'Scanner' abgebildet; 2D-Schema ohne 3D-Zwilling - z ist keine Einbauhoehe (hoehe_unbekannt) [Hoehe entfernt: --ohne-hoehen]"
}
]