[MERGE] Gerüständerungen mergen
This commit is contained in:
+3
-1
@@ -10,5 +10,7 @@
|
||||
{ "name": "gefaellestrecke", "save": "dwg", "module": "Gefaellestrecke" },
|
||||
{ "name": "mubea", "save": "dxf", "module": "KreiselInsert" },
|
||||
{ "name": "hundm05", "save": "dxf", "module": "VarioFoerderer" },
|
||||
{ "name": "hm_recformat", "save": "dxf", "module": "VarioFoerderer", "disabled": true }
|
||||
{ "name": "dematic_arvato", "save": "dxf", "module": "VarioFoerderer", "disabled": true },
|
||||
{ "name": "hm_recformat", "save": "dxf", "module": "VarioFoerderer", "disabled": true },
|
||||
{ "name": "showroom_ils", "save": "dxf", "module": "VarioFoerderer", "disabled": true }
|
||||
]
|
||||
|
||||
@@ -0,0 +1,417 @@
|
||||
;; ============================================================
|
||||
;; test_dematic_arvato.lsp - Nachbau des Abschnitts Flowpuffer/Kreisel der
|
||||
;; Anlage Dematic/Arvato.
|
||||
;;
|
||||
;; Datenquelle: tests/testdata/dematic_arvato.json. Entstehung in zwei
|
||||
;; Stufen:
|
||||
;; 1. Vorlage aus der Fremdzeichnung (Scanner, raet vieles):
|
||||
;; python lib/dxf_scan_components.py \
|
||||
;; C:/develop/sps_skel/data/Dematic_arvato_reduced.dxf data \
|
||||
;; tests/testdata/dematic_arvato.json --projekt Arvato \
|
||||
;; --fenster -2534 -4549 49466 29451 --ohne-hoehen \
|
||||
;; --kreisel-hoehe 35860.37 12519.72 2437 \
|
||||
;; --kreisel-hoehe 36661.24 24878.8 1826
|
||||
;; 2. Vorlage mit diesem Treiber bauen, in BricsCAD von Hand korrigieren
|
||||
;; und ergaenzen (VF-Ketten, Hoehen, Sensoren aufgeraeumt), als DXF
|
||||
;; speichern und daraus die Testdaten neu schreiben - AKTUELLER STAND:
|
||||
;; python lib/dxf_anlage_export.py \
|
||||
;; C:/develop/sps_skel/data/Dematic_TST.dxf \
|
||||
;; tests/testdata/dematic_arvato.json --projekt Arvato
|
||||
;;
|
||||
;; Eintragsarten:
|
||||
;; "function": "insert" ohne "block" -> Kreisel (hundm05:bau-kreisel ->
|
||||
;; kreisel-insert-script; x/y = Einfuegepunkt,
|
||||
;; abstand = Mittenabstand AN8-SP8)
|
||||
;; "function": "insert" + "block" -> Einzelblock (hundm05:bau-sensor)
|
||||
;; "typ": "standard"/"etage" + "test_id"
|
||||
;; -> VarioFoerderer ueber mubea:vario-bauen
|
||||
;; (mubea-Schema: deltaL, deltaH, richtung,
|
||||
;; winkel, L_GF1, seite, hz, x/y/z), optional
|
||||
;; "motorseite"
|
||||
;; "typ": "linienzug_journal"
|
||||
;; -> Linienzug-Kette: das aufgezeichnete Eingabe-
|
||||
;; Journal (SSG_VF_EDIT) wird 1:1 abgespielt
|
||||
;; (vsp-bau-journal) - keine Spec, weil der
|
||||
;; Dialog neuer ist als die Spec-Grammatik
|
||||
;; "modus": 1 -> Gefaellestrecke ueber mubea:gf-bauen
|
||||
;; (start_mm + deltaL_mm, kein Endpunkt). Mit
|
||||
;; hoehe_ende_mm (Hoehe des Kreisels am Ende)
|
||||
;; rechnet dematic_arvato:gf-geometrie Winkel
|
||||
;; und Staustreckenlaenge (gf-bauen-exakt),
|
||||
;; sonst gilt winkel_grad.
|
||||
;; "typ": "gerade" -> waagrechter Foerderer aus der Scanner-Vorlage -
|
||||
;; kein Bau-Pfad, wird gemeldet und uebersprungen
|
||||
;;
|
||||
;; Reihenfolge wie mubea.json (VF vor GF): gf-init-bibliothek setzt die
|
||||
;; globalen AS/ES-Masse um, siehe mubea:ensure-gf-init.
|
||||
;;
|
||||
;; Keine eigene Bau-Logik: hundm05:bau-kreisel/-sensor aus
|
||||
;; tests/test_hundm05.lsp und mubea:gf-bauen/-vario-bauen aus
|
||||
;; tests/test_mubea.lsp werden mitgeladen (beide Dateien definieren nur
|
||||
;; Funktionen), Linienzug-Ketten laufen ueber vsp-bau-journal (vf_spec.lsp).
|
||||
;;
|
||||
;; Aufruf in BricsCAD:
|
||||
;; (load (strcat (getenv "DXFMAKRO") "/tests/test_dematic_arvato.lsp"))
|
||||
;; TEST_DEMATIC_ARVATO
|
||||
;; ============================================================
|
||||
|
||||
(if (not (boundp '*dematic-arvato-records*)) (setq *dematic-arvato-records* nil))
|
||||
|
||||
;; Module und die Bau-Funktionen aus test_hundm05.lsp beim LADEN dieser Datei
|
||||
;; holen, nicht erst in c:TEST_DEMATIC_ARVATO: in BricsCAD werden per load
|
||||
;; definierte Funktionen erst nach Rueckkehr zum Top-Level sichtbar (siehe
|
||||
;; tests/test_unit.scr).
|
||||
(ssg-ensure "KreiselInsert")
|
||||
(ssg-ensure "VarioFoerderer")
|
||||
(ssg-ensure "SSG_LIB_Commands")
|
||||
(ssg-ensure "Gefaellestrecke")
|
||||
(if (null (car (atoms-family 1 '("HUNDM05:BAU-SENSOR"))))
|
||||
(load (strcat (getenv "DXFMAKRO") "/tests/test_hundm05.lsp")))
|
||||
(if (null (car (atoms-family 1 '("MUBEA:VARIO-BAUEN"))))
|
||||
(load (strcat (getenv "DXFMAKRO") "/tests/test_mubea.lsp")))
|
||||
|
||||
(defun dematic_arvato:datei ()
|
||||
(strcat (getenv "DXFMAKRO") "/tests/testdata/dematic_arvato.json"))
|
||||
|
||||
;; Record um den gebauten Block ergaenzen (oder als Abbruch markieren).
|
||||
(defun dematic_arvato:rec-block (rec ent fehlertext / ed)
|
||||
(if (and ent (= (type ent) 'ENAME))
|
||||
(progn
|
||||
(setq ed (entget ent))
|
||||
(princ (strcat " -> Block " (cdr (assoc 2 ed))))
|
||||
(setq rec (vsp-set rec "block_name" (cdr (assoc 2 ed))))
|
||||
(setq rec (vsp-set rec "block_handle" (cdr (assoc 5 ed))))
|
||||
(setq rec (vsp-set rec "insert_point" (cdr (assoc 10 ed))))
|
||||
(setq rec (vsp-set rec "attribs" (ssg-attrib-read ent)))
|
||||
(vsp-set rec "status" "executed"))
|
||||
(progn
|
||||
(princ (strcat " FEHLER: " fehlertext))
|
||||
(vsp-set (vsp-set rec "status" "abbruch") "fehler_text" fehlertext))))
|
||||
|
||||
;; Foerderer "gerade": noch kein Bau-Pfad - nur melden.
|
||||
(defun dematic_arvato:gerade-melden (obj / tid rec)
|
||||
(setq tid (ssg-val obj "test_id"))
|
||||
(princ (strcat "\n [GERADE] " (if tid tid "?")
|
||||
" uebersprungen - waagrechter Foerderer noch nicht unterstuetzt"))
|
||||
(setq rec (vsp-rec-neu (if tid tid "(ohne id)")))
|
||||
(setq rec (vsp-set rec "kind" "gerade"))
|
||||
(vsp-set (vsp-set rec "status" "uebersprungen") "fehler_text"
|
||||
"kein Bau-Pfad fuer typ gerade"))
|
||||
|
||||
;; ES-Element bei Einlaufneigung w (Grad, bergab) in Fahrtrichtung hz
|
||||
;; vermessen: horizontale Laenge entlang hz und Abfall von KS_EIN bis KS_AUS.
|
||||
;; Wie gf-messe-dz-block (Gefaellestrecke.lsp), liefert aber zusaetzlich die
|
||||
;; Laenge - beide aendern sich mit der Neigung (90-Grad-ES flach ~436 mm
|
||||
;; lang, bei 43 Grad nur noch ~292 mm).
|
||||
;; Rueckgabe: (dx dz), dz positiv = nach unten.
|
||||
(defun dematic_arvato:es-mass (blockname hz w / rad-h rad-v frame-aus ent-vor ent-nach p)
|
||||
(setq rad-h (* hz (/ pi 180.0))
|
||||
rad-v (* w (/ pi 180.0)))
|
||||
(setq ent-vor (entlast))
|
||||
(setq frame-aus
|
||||
(insert-block-ks-to-ks blockname
|
||||
(make-frame-from-dir '(0 0 0)
|
||||
(list (* (cos rad-h) (cos rad-v)) (* (sin rad-h) (cos rad-v))
|
||||
(- (sin rad-v))))))
|
||||
(setq ent-nach (entlast))
|
||||
(if (and ent-nach (not (eq ent-nach ent-vor))) (entdel ent-nach))
|
||||
(setq p (car frame-aus))
|
||||
(list (+ (* (car p) (cos rad-h)) (* (cadr p) (sin rad-h)))
|
||||
(- 0.0 (caddr p))))
|
||||
|
||||
;; Winkel UND Staustreckenlaenge einer GF (Modus 1) aus Start- und Endhoehe,
|
||||
;; so dass der ES-Auslauf genau auf Hoehe UND Kette des unteren Kreisels
|
||||
;; liegt. deltaL reicht von AS-KS_EIN bis ES-KS_AUS (horizontal).
|
||||
;;
|
||||
;; H = deltaL - aus-dx - es_dx(w) horizontale Laenge der Schraege
|
||||
;; tan(w) = (dH - aus-dz - es_dz(w)) / H Schraege = Staustrecke + Separator
|
||||
;; L_stau = H / cos(w) - 300
|
||||
;;
|
||||
;; es_dx/es_dz werden beim aktuellen Winkel gemessen (dematic_arvato:es-mass)
|
||||
;; und iteriert; das AS liegt flach, aus-dx/aus-dz sind fest.
|
||||
;;
|
||||
;; Warum nicht mubea:gf-bauen / gf-winkel-berechnen:
|
||||
;; - gf-winkel-berechnen rechnet asin(dH / L), also mit SCHRAEGER Laenge
|
||||
;; (Modus 3); Modus 1 haelt aber die horizontale Laenge fest. Bei 2-3 Grad
|
||||
;; (Dematic) gleich, bei den steilen Showroom-GF (1860 mm auf 2405 mm)
|
||||
;; ~50 statt ~43 Grad - die GF endete weit unter dem Kreisel.
|
||||
;; - mubea:gf-bauen zieht die FLACH gemessene ES-Laenge ein-dx ab. Bei 43
|
||||
;; Grad ist das ES horizontal ~144 mm kuerzer, die GF hoerte so 144 mm
|
||||
;; vor der Kette des unteren Kreisels auf (Hoehe stimmte).
|
||||
;; VORZEICHEN: vf-set-as-masse misst aus-dz als KS_AUS.z - KS_EIN.z
|
||||
;; (negativ) - darum der Betrag (Dematic: sonst HOEHE_BIS 1568 statt 1826).
|
||||
;; Rueckgabe: (winkel L_stau)
|
||||
(defun dematic_arvato:gf-geometrie (deltaL hz as-seite es-seite as-winkel es-winkel
|
||||
z-start z-ende / es-block dH es H winkel vorher
|
||||
iter dx-as dz-as)
|
||||
(mubea:ensure-gf-init)
|
||||
(vf-set-as-masse as-winkel as-seite)
|
||||
(vf-set-es-masse es-winkel es-seite)
|
||||
(setq es-block (strcat "ES_Element_" es-winkel "_" es-seite)
|
||||
dx-as (float aus-dx)
|
||||
dz-as (abs (float aus-dz))
|
||||
dH (- z-start z-ende)
|
||||
es (list (float ein-dx) (abs (float ein-dz)))
|
||||
vorher -999.0
|
||||
iter 0)
|
||||
(setq H (- deltaL dx-as (car es))
|
||||
winkel (* (atan (- dH dz-as (cadr es)) H) (/ 180.0 pi)))
|
||||
(while (and (< iter 8) (> (abs (- winkel vorher)) 0.0005))
|
||||
(setq vorher winkel
|
||||
es (dematic_arvato:es-mass es-block hz winkel)
|
||||
H (- deltaL dx-as (car es))
|
||||
winkel (* (atan (- dH dz-as (cadr es)) H) (/ 180.0 pi))
|
||||
iter (1+ iter)))
|
||||
(vf-set-as-masse "90" as-seite)
|
||||
(vf-set-es-masse "90" es-seite)
|
||||
(list winkel (- (/ H (cos (* winkel (/ pi 180.0)))) 300.0)))
|
||||
|
||||
;; GF mit vorgegebener Staustreckenlaenge einfuegen (wie mubea:gf-bauen, aber
|
||||
;; L_stau kommt aus dematic_arvato:gf-geometrie statt aus der flachen
|
||||
;; ES-Laenge).
|
||||
(defun dematic_arvato:gf-bauen-exakt (tid start-mm deltaL hz as-seite es-seite
|
||||
as-winkel es-winkel winkel L_stau / ent)
|
||||
(mubea:ensure-gf-init)
|
||||
;; Element-Masse der Variante wie in mubea:gf-bauen, danach zurueck auf 90
|
||||
(vf-set-as-masse as-winkel as-seite)
|
||||
(vf-set-es-masse es-winkel es-seite)
|
||||
(princ (strcat "\n [GF] " tid " -> Start=(" (rtos (car start-mm) 2 0)
|
||||
"," (rtos (cadr start-mm) 2 0) "," (rtos (caddr start-mm) 2 0)
|
||||
") hz=" (rtos hz 2 0) " deltaL=" (rtos deltaL 2 0)
|
||||
" winkel=" (rtos winkel 2 3) " L_stau=" (rtos L_stau 2 1)))
|
||||
(setq ent (car (gefaellestrecke-einfuegen
|
||||
L_stau winkel start-mm as-seite es-seite hz
|
||||
deltaL as-winkel es-winkel "0" "Schoenenberger Geruest")))
|
||||
(vf-set-as-masse "90" as-seite)
|
||||
(vf-set-es-masse "90" es-seite)
|
||||
ent)
|
||||
|
||||
;; Gefaellestrecke (Modus 1) bauen - Felder wie mubea:build-gf, ohne dessen
|
||||
;; anzahl/delta-Vervielfaeltigung (jede GF steht einzeln in der Datei).
|
||||
;; Mit "hoehe_ende_mm" (Hoehe des Kreisels am Ende) wird der Winkel daraus
|
||||
;; gerechnet, sonst gilt "winkel_grad" (Default 3.0).
|
||||
(defun dematic_arvato:bau-gf (obj / tid start deltaL hz winkel z-ende geo
|
||||
as-seite es-seite as-winkel es-winkel rec)
|
||||
(setq tid (ssg-val obj "test_id")
|
||||
start (ssg-val obj "start_mm")
|
||||
deltaL (ssg-val obj "deltaL_mm")
|
||||
hz (ssg-val obj "hz_grad")
|
||||
winkel (ssg-val obj "winkel_grad")
|
||||
z-ende (ssg-val obj "hoehe_ende_mm")
|
||||
as-seite (cond ((ssg-val obj "as_seite")) ("links"))
|
||||
es-seite (cond ((ssg-val obj "es_seite")) ("links"))
|
||||
as-winkel (cond ((ssg-val obj "as_winkel")) ("90"))
|
||||
es-winkel (cond ((ssg-val obj "es_winkel")) ("90")))
|
||||
(setq rec (vsp-rec-neu (if tid tid "(ohne id)")))
|
||||
(setq rec (vsp-set rec "kind" "gefaellestrecke"))
|
||||
(setq rec (vsp-set rec "dimension" (vsp-dim-text)))
|
||||
(cond
|
||||
((not (and (= (type start) 'LIST) (= (length start) 3)
|
||||
(numberp deltaL) (numberp hz)))
|
||||
(princ (strcat "\n [GF] " (if tid tid "?")
|
||||
" - FEHLER: start_mm, deltaL_mm und hz_grad muessen gesetzt sein"))
|
||||
(vsp-set (vsp-set rec "status" "spec-fehler") "fehler_text"
|
||||
"start_mm, deltaL_mm oder hz_grad fehlt bzw. ist ungueltig"))
|
||||
((and (numberp z-ende) (>= z-ende (caddr start)))
|
||||
(princ (strcat "\n [GF] " (if tid tid "?")
|
||||
" - FEHLER: hoehe_ende_mm liegt nicht unter der Starthoehe"))
|
||||
(vsp-set (vsp-set rec "status" "spec-fehler") "fehler_text"
|
||||
"hoehe_ende_mm >= start_mm.z - kein Gefaelle"))
|
||||
(T
|
||||
;; Mit Endhoehe: Winkel + Staustreckenlaenge exakt (gf-geometrie),
|
||||
;; sonst fester Winkel ueber mubea:gf-bauen.
|
||||
(setq geo (if (numberp z-ende)
|
||||
(dematic_arvato:gf-geometrie (float deltaL) (float hz)
|
||||
as-seite es-seite as-winkel es-winkel
|
||||
(float (caddr start)) (float z-ende))))
|
||||
(setq winkel
|
||||
(cond
|
||||
(geo (car geo))
|
||||
((numberp winkel) (float winkel))
|
||||
(T 3.0)))
|
||||
;; Winkel und Soll-Endhoehe als Meldung (das Record-Schema aus vf_spec
|
||||
;; kennt dafuer kein Feld); die Ist-Endhoehe steht in attribs HOEHE_BIS.
|
||||
(setq rec (vsp-set rec "meldungen"
|
||||
(list (strcat "winkel_grad " (rtos winkel 2 3)
|
||||
(if (numberp z-ende)
|
||||
(strcat " aus Hoehe " (rtos (caddr start) 2 1)
|
||||
" -> " (rtos z-ende 2 1))
|
||||
"")))))
|
||||
(setq rec
|
||||
(dematic_arvato:rec-block rec
|
||||
(if geo
|
||||
(dematic_arvato:gf-bauen-exakt tid (mapcar 'float start) (float deltaL)
|
||||
(float hz) as-seite es-seite as-winkel
|
||||
es-winkel winkel (cadr geo))
|
||||
(mubea:gf-bauen tid (mapcar 'float start) (float deltaL) (float hz)
|
||||
as-seite es-seite as-winkel es-winkel winkel))
|
||||
"gefaellestrecke-einfuegen lieferte keinen GF-Block"))
|
||||
;; Ist-Endhoehe gegen den Kreisel am Ende pruefen
|
||||
(dematic_arvato:gf-endhoehe-pruefen rec z-ende))))
|
||||
|
||||
;; HOEHE_BIS_mm des gebauten GF-Blocks mit der Soll-Endhoehe vergleichen;
|
||||
;; mehr als 5 mm daneben -> status "warnung" + Meldung (die GF trifft den
|
||||
;; unteren Kreisel nicht).
|
||||
(defun dematic_arvato:gf-endhoehe-pruefen (rec z-ende / ist diff)
|
||||
(setq ist (cdr (assoc "HOEHE_BIS_mm" (ssg-val rec "attribs"))))
|
||||
(cond
|
||||
((not (and (numberp z-ende) ist (= (ssg-val rec "status") "executed"))) rec)
|
||||
(T
|
||||
(setq diff (- (atof ist) z-ende))
|
||||
(setq rec (vsp-set rec "meldungen"
|
||||
(append (ssg-val rec "meldungen")
|
||||
(list (strcat "HOEHE_BIS " ist " (Soll "
|
||||
(rtos z-ende 2 0) ", Abweichung "
|
||||
(rtos diff 2 0) " mm)")))))
|
||||
(if (> (abs diff) 5.0)
|
||||
(progn
|
||||
(princ (strcat "\n WARNUNG: GF endet bei " ist " statt "
|
||||
(rtos z-ende 2 0)))
|
||||
(vsp-set rec "status" "warnung"))
|
||||
rec))))
|
||||
|
||||
;; VarioFoerderer "standard"/"etage" - mubea-Schema, Bau ueber
|
||||
;; mubea:vario-bauen. "motorseite" wirkt wie im Edit-Dialog ueber den
|
||||
;; Override *vf-motorseite* (vf-block-erstellen liest ihn).
|
||||
(defun dematic_arvato:bau-vf (obj / tid typ rec ent)
|
||||
(setq tid (ssg-val obj "test_id")
|
||||
typ (cond ((ssg-val obj "typ")) ("standard")))
|
||||
(setq rec (vsp-rec-neu (if tid tid "(ohne id)")))
|
||||
(setq rec (vsp-set rec "kind" "vario"))
|
||||
(setq rec (vsp-set rec "dimension" (vsp-dim-text)))
|
||||
(setq *vf-motorseite* (ssg-val obj "motorseite"))
|
||||
(setq ent
|
||||
(vl-catch-all-apply 'mubea:vario-bauen
|
||||
(list tid typ (ssg-val obj "richtung")
|
||||
(float (ssg-val obj "deltaL")) (float (ssg-val obj "deltaH"))
|
||||
(ssg-val obj "winkel") (float (cond ((ssg-val obj "L_GF1")) (0.0)))
|
||||
(ssg-val obj "seite") (ssg-val obj "hz")
|
||||
(list (float (ssg-val obj "x")) (float (ssg-val obj "y"))
|
||||
(float (ssg-val obj "z"))))))
|
||||
(setq *vf-motorseite* nil)
|
||||
(if (vl-catch-all-error-p ent)
|
||||
(vsp-set (vsp-set rec "status" "abbruch") "fehler_text"
|
||||
(vl-catch-all-error-message ent))
|
||||
(dematic_arvato:rec-block rec ent
|
||||
"kein VF-Block (deltaL beim gewuenschten Winkel nicht loesbar?)")))
|
||||
|
||||
;; Linienzug-Kette: aufgezeichnetes Journal ("ART:wert"-Tokens, wie in der
|
||||
;; SSG_VF_EDIT-XDATA) 1:1 abspielen. Headless-Rahmen wie vsp-bau-datei; er
|
||||
;; MUSS auch nach einem Fehler zurueck, sonst bleiben getstring/getpoint der
|
||||
;; Sitzung ersetzt.
|
||||
(defun dematic_arvato:bau-journal (obj / tid journal res)
|
||||
(setq tid (cond ((ssg-val obj "test_id")) ("(ohne id)")))
|
||||
(setq journal (mapcar 'vfl-string->entry (ssg-val obj "journal")))
|
||||
(vsp-headless-an)
|
||||
(setq res (vl-catch-all-apply 'vsp-bau-journal
|
||||
(list tid journal nil
|
||||
(if journal nil (list "Feld \"journal\" fehlt oder ist leer")))))
|
||||
(vsp-headless-aus)
|
||||
(if (vl-catch-all-error-p res)
|
||||
(vsp-set (vsp-set (vsp-rec-neu tid) "status" "abbruch") "fehler_text"
|
||||
(vl-catch-all-error-message res))
|
||||
res))
|
||||
|
||||
(defun dematic_arvato:bau-eintrag (obj / kind res typ)
|
||||
(setq typ (ssg-val obj "typ"))
|
||||
(cond
|
||||
((ssg-val obj "modus")
|
||||
(setq kind "gefaellestrecke")
|
||||
(setq res (vl-catch-all-apply 'dematic_arvato:bau-gf (list obj))))
|
||||
((= typ "linienzug_journal")
|
||||
(setq kind "linienzug")
|
||||
(setq res (dematic_arvato:bau-journal obj)))
|
||||
((and (member typ '("standard" "etage")) (ssg-val obj "test_id"))
|
||||
(setq kind "vario")
|
||||
(setq res (dematic_arvato:bau-vf obj)))
|
||||
((and (= (ssg-val obj "function") "insert") (ssg-val obj "block"))
|
||||
(setq kind "sensor")
|
||||
(setq res (vl-catch-all-apply 'hundm05:bau-sensor (list obj))))
|
||||
((= (ssg-val obj "function") "insert")
|
||||
(setq kind "kreisel")
|
||||
(setq res (vl-catch-all-apply 'hundm05:bau-kreisel (list obj))))
|
||||
((= typ "gerade")
|
||||
(setq kind "gerade")
|
||||
(setq res (dematic_arvato:gerade-melden obj)))
|
||||
(T
|
||||
(setq kind "unbekannt")
|
||||
(princ "\n WARNUNG: unbekannter Eintrag uebersprungen")
|
||||
(setq res (vsp-set (vsp-rec-neu "(unbekannt)") "status" "uebersprungen"))))
|
||||
(if (vl-catch-all-error-p res)
|
||||
(progn
|
||||
(princ (strcat "\n [" (strcase kind) "] Ausnahme: "
|
||||
(vl-catch-all-error-message res)))
|
||||
(vsp-set (vsp-set (vsp-set (vsp-rec-neu (cond ((ssg-val obj "id"))
|
||||
((ssg-val obj "test_id"))
|
||||
((ssg-val obj "block"))
|
||||
("?")))
|
||||
"kind" kind) "status" "abbruch")
|
||||
"fehler_text" (vl-catch-all-error-message res)))
|
||||
res))
|
||||
|
||||
;; 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 (strcat "\n " befehl " - " titel))
|
||||
(princ (strcat "\n " datei))
|
||||
(princ "\n================================================================")
|
||||
(cond
|
||||
((null (car (atoms-family 1 '("VSP-BAU-JOURNAL"))))
|
||||
(princ (strcat "\n[" befehl "] FEHLER: vf_spec.lsp nicht geladen"
|
||||
" (VarioFoerderer laden)."))
|
||||
nil)
|
||||
((null (findfile datei))
|
||||
(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 befehl '(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA")))
|
||||
(setvar "OSMODE" 0)
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
;; Vario-Bibliothek (Bogen-/AS-/ES-Masse) wie C:TEST_MUBEA, und die
|
||||
;; GF-Elementmasse in jeder Zeichnung neu ermitteln.
|
||||
(if (vsp-lib-noetig-p) (init-bibliothek))
|
||||
(setq *mubea-gf-init-done* nil)
|
||||
(setq out '())
|
||||
(foreach obj daten
|
||||
(setq out (cons (dematic_arvato:bau-eintrag obj) out)))
|
||||
(ssg-end)
|
||||
(setq records (reverse out))
|
||||
;; Zusammenfassung je Status
|
||||
(setq zaehler '())
|
||||
(foreach r records
|
||||
(setq st (cond ((ssg-val r "status")) ("?")))
|
||||
(if (assoc st zaehler)
|
||||
(setq zaehler (subst (cons st (1+ (cdr (assoc st zaehler))))
|
||||
(assoc st zaehler) zaehler))
|
||||
(setq zaehler (cons (cons st 1) zaehler))))
|
||||
(princ "\n================================================================")
|
||||
(foreach z (reverse zaehler)
|
||||
(princ (strcat "\n " (car z) ": " (itoa (cdr z)))))
|
||||
(princ "\n================================================================")
|
||||
(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)
|
||||
(defun dematic_arvato:export-results (out-dir / pfad)
|
||||
(if (null *dematic-arvato-records*)
|
||||
(princ "\n Keine Dematic/Arvato-Ergebnisse vorhanden.")
|
||||
(progn
|
||||
(vl-mkdir out-dir)
|
||||
(setq pfad (strcat out-dir "/dematic_arvato_results.json"))
|
||||
(vsp-results-schreiben *dematic-arvato-records* pfad)))
|
||||
(princ))
|
||||
|
||||
(princ "\nTEST_DEMATIC_ARVATO geladen. Aufruf: TEST_DEMATIC_ARVATO")
|
||||
(princ)
|
||||
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
test_dxf_anlage_export.py - Gebaute Anlage -> Nachbau-Testdaten
|
||||
(lib/dxf_anlage_export.py). Laeuft ohne BricsCAD und ohne DXF: die
|
||||
Wrapper-Daten sind die Werte aus Dematic_TST.dxf, von Hand nachgestellt
|
||||
(Form wie lese_zeichnung sie liefert).
|
||||
|
||||
1. Kreisel: abstand exakt aus der Blockdefinition (AN8 -> SP8), nicht aus
|
||||
dem ganzzahligen ABSTAND-Attribut.
|
||||
2. GF auf zwei Kreiselketten: Endhoehe = Hoehe des Kreisels am Ende,
|
||||
der (falsch) gebaute Winkel wird NICHT uebernommen.
|
||||
3. GF ohne Kreisel am Ende: gebauter Winkel bleibt.
|
||||
4. VF "standard": Parameter wie vfs-edit-basis-lesen, L_GF1 aus L_GF_m.
|
||||
5. VF "linienzug": Journal unveraendert als Token-Liste.
|
||||
6. Einzelblock: _2D/_3D-Suffix entfaellt.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
"..", "lib"))
|
||||
import dxf_anlage_export as dae # noqa: E402
|
||||
|
||||
|
||||
def _insert(name, p, rot=0.0, attribs=None, xdata=None):
|
||||
return {"name": name, "handle": "1", "p": list(p), "rot": rot,
|
||||
"attribs": attribs or {}, "xdata": xdata or {}, "ps": 0}
|
||||
|
||||
|
||||
KREISEL_OBEN = _insert("KREISEL_2_STANDARD_33044", (35860.37, 12519.72, 2437.0),
|
||||
180.0, {"ID": "0002", "NUMMER": "2", "ABSTAND": "33044",
|
||||
"KREISELART": "STANDARD"})
|
||||
KREISEL_UNTEN = _insert("KREISEL_3_STANDARD_33470", (36661.24, 24878.8, 1826.0),
|
||||
180.0, {"ID": "0003", "NUMMER": "3", "ABSTAND": "33470",
|
||||
"KREISELART": "STANDARD"})
|
||||
BLOCK_INHALT = {
|
||||
"KREISEL_2_STANDARD_33044": [{"name": "AN8_3D", "p": [400.0, 0.0, 0.0]},
|
||||
{"name": "SP8_3D", "p": [33444.28, 0.0, 0.0]}],
|
||||
"KREISEL_3_STANDARD_33470": [{"name": "AN8_3D", "p": [400.0, 0.0, 0.0]},
|
||||
{"name": "SP8_3D", "p": [33870.18, 0.0, 0.0]}],
|
||||
}
|
||||
|
||||
|
||||
def _geo():
|
||||
return [dae.kreisel_geo(dae.kreisel_eintrag(k, BLOCK_INHALT, "T"))
|
||||
for k in (KREISEL_OBEN, KREISEL_UNTEN)]
|
||||
|
||||
|
||||
def test_kreisel_abstand_aus_blockdefinition():
|
||||
k = dae.kreisel_eintrag(KREISEL_OBEN, BLOCK_INHALT, "T")
|
||||
assert k["id"] == "Kreisel_T_02"
|
||||
assert k["abstand"] == pytest.approx(33044.28, abs=0.01)
|
||||
assert (k["x"], k["y"], k["z"], k["rotation"]) == (35860.37, 12519.72, 2437.0, 180.0)
|
||||
ohne_block = dae.kreisel_eintrag(KREISEL_OBEN, {}, "T")
|
||||
assert ohne_block["abstand"] == 33044.0
|
||||
assert k["drehrichtung"] == "UZS" # Attribut fehlt -> Vorgabe
|
||||
|
||||
|
||||
def test_kreisel_drehrichtung_aus_attribut():
|
||||
guz = _insert("KREISEL_4_STANDARD_3619", (42563.78, 1703.66, 2177.0), 90.0,
|
||||
{"NUMMER": "4", "DREHRICHTUNG": "GUZ"})
|
||||
assert dae.kreisel_eintrag(guz, {}, "T")["drehrichtung"] == "GUZ"
|
||||
|
||||
|
||||
def test_gf_zwischen_zwei_kreiseln_bekommt_endhoehe():
|
||||
gf = _insert("GF_1", (5833.56, 12919.72, 2437.0), 0.0,
|
||||
{"ID": "0005", "SEITE_AS": "links", "SEITE_ES": "links",
|
||||
"HOEHE_BIS_mm": "1568"},
|
||||
{"SSG_GF_EDIT": ["90", "3.7929", "90", "90", "2437", "11559.08"]})
|
||||
hinweise = []
|
||||
e = dae.gf_eintrag(gf, _geo(), "T", hinweise)
|
||||
assert e["test_id"] == "GF_T_01"
|
||||
assert e["start_mm"] == [5833.56, 12919.72, 2437.0]
|
||||
assert e["deltaL_mm"] == 11559.08 and e["hz_grad"] == 90.0
|
||||
assert (e["kreisel_start"], e["kreisel_ende"]) == ("Kreisel_T_02", "Kreisel_T_03")
|
||||
assert e["hoehe_ende_mm"] == 1826.0
|
||||
assert "winkel_grad" not in e
|
||||
assert hinweise == []
|
||||
|
||||
|
||||
def test_gf_ohne_kreisel_behaelt_gebauten_winkel():
|
||||
gf = _insert("GF_7", (0.0, 0.0, 1000.0), 0.0, {},
|
||||
{"SSG_GF_EDIT": ["0", "3", "90", "30", "1000", "5000"]})
|
||||
e = dae.gf_eintrag(gf, _geo(), "T", [])
|
||||
assert e["winkel_grad"] == 3.0
|
||||
assert "hoehe_ende_mm" not in e and "kreisel_ende" not in e
|
||||
assert e["es_winkel"] == "30"
|
||||
|
||||
|
||||
def test_gf_ohne_xdata_wird_gemeldet():
|
||||
hinweise = []
|
||||
assert dae.gf_eintrag(_insert("GF_9", (0, 0, 0)), [], "T", hinweise) is None
|
||||
assert "SSG_GF_EDIT" in hinweise[0]
|
||||
|
||||
|
||||
def test_vf_standard():
|
||||
vf = _insert("VF_2", (3314.07, 24478.8, 1826.0), 0.0,
|
||||
{"ID": "0082", "DELTA_L_mm": "11559", "DELTA_H_mm": "611",
|
||||
"ANTRIEBFAHRTRICHTUNG": "Auf", "SEITE_AS": "links",
|
||||
"MOTORSEITE": "rechts", "VF_WINKEL": "15",
|
||||
"L_GF_m": "1.907,1.907"},
|
||||
{"SSG_VF_EDIT": ["standard", "270"]})
|
||||
e = dae.vf_standard_eintrag(vf, "T", "standard")
|
||||
assert e["test_id"] == "VF_T_02"
|
||||
assert (e["richtung"], e["deltaL"], e["deltaH"], e["winkel"]) == ("Auf", 11559.0, 611.0, 15)
|
||||
assert e["L_GF1"] == 1907.0 and e["hz"] == 270.0
|
||||
assert (e["seite"], e["motorseite"]) == ("links", "rechts")
|
||||
assert (e["x"], e["y"], e["z"]) == (3314.07, 24478.8, 1826.0)
|
||||
|
||||
|
||||
def test_vf_linienzug_journal_unveraendert():
|
||||
roh = ["linienzug", "PT:42161.679193,2448.319538,0^JREAL:2177^JSTR:1^JSTR:9",
|
||||
"0^JSTEP:Linie-VF^JDL:9370.410886"]
|
||||
vf = _insert("VF_26", (42161.68, 2448.32, 2177.0), 0.0, {"ID": "0184"},
|
||||
{"SSG_VF_EDIT": roh})
|
||||
e = dae.vf_journal_eintrag(vf, "T", 1)
|
||||
assert e["typ"] == "linienzug_journal" and e["test_id"] == "VF_T_LZ_01"
|
||||
# Chunk-Grenze mitten im Token ("STR:9" + "0") wird korrekt zusammengesetzt
|
||||
assert e["journal"] == ["PT:42161.679193,2448.319538,0", "REAL:2177", "STR:1",
|
||||
"STR:90", "STEP:Linie-VF", "DL:9370.410886"]
|
||||
|
||||
|
||||
def test_einzelblock_ohne_dimensionssuffix():
|
||||
e = dae.einzel_eintrag(_insert("Separator_SP_3D", (3038.72, 12119.73, 2473.0),
|
||||
0.0, {"ID": "0043", "ZUORDNUNG": "0002"}))
|
||||
assert e["block"] == "Separator_SP"
|
||||
assert e["function"] == "insert" and e["z"] == 2473.0
|
||||
assert "ID 0043" in e["comment"]
|
||||
|
||||
|
||||
def test_reihenfolge_vf_vor_gf():
|
||||
inserts = [
|
||||
_insert("GF_1", (5833.56, 12919.72, 2437.0), 0.0, {},
|
||||
{"SSG_GF_EDIT": ["90", "3", "90", "90", "2437", "11559.08"]}),
|
||||
_insert("Scanner_3D", (1, 2, 3)),
|
||||
_insert("VF_2", (0, 0, 0), 0.0, {}, {"SSG_VF_EDIT": ["standard", "0"]}),
|
||||
KREISEL_OBEN, KREISEL_UNTEN,
|
||||
_insert("*U12", (0, 0, 0)),
|
||||
]
|
||||
eintraege, _ = dae.baue_eintraege(inserts, BLOCK_INHALT, "T")
|
||||
art = ["K" if "abstand" in e else "GF" if "modus" in e else
|
||||
"VF" if "typ" in e else e["block"] for e in eintraege]
|
||||
assert art == ["K", "K", "VF", "GF", "Scanner"]
|
||||
@@ -0,0 +1,288 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
test_dxf_scan_gf.py - Gefaellestrecken aus Staustrecken-Linien
|
||||
(gf_eintraege_aus_linien in lib/dxf_scan_components.py). Laeuft ohne
|
||||
BricsCAD und ohne DXF: die Linien und Ausschleuselemente sind die
|
||||
gemessenen Werte aus Dematic_arvato_reduced.dxf, von Hand nachgestellt.
|
||||
|
||||
1. Fallende Linie mit AS am oberen Ende -> GF, AS wird verbraucht.
|
||||
2. Der Nachbar-AS der Linie daneben (800 mm Raster, auf der anderen Seite
|
||||
naeher dran) wird NICHT gegriffen - die Seite aus dem Blocknamen
|
||||
entscheidet, nicht der kleinste Abstand.
|
||||
3. Rueckwaerts gezeichnete GF (tiefes Ende zuerst) -> Start bleibt oben.
|
||||
4. AS am UNTEREN Ende -> Steigfoerderer, keine GF, AS bleibt unverbraucht.
|
||||
5. Waagrechte Linie -> keine GF.
|
||||
6. Anschluss an die Kreisel: Start/Ende werden auf die Ketten geschoben,
|
||||
deltaL reicht von Kette zu Kette; Hoehen kommen von den Kreiseln.
|
||||
7. Separator auf der Achse wird verbraucht, einer daneben nicht.
|
||||
8. hoehen_entfernen laesst nur Anwender-Hoehen stehen.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
"..", "lib"))
|
||||
import dxf_scan_components as dsc # noqa: E402
|
||||
|
||||
AS_LINKS = "Ausschleuselement links 200000217 Draufsicht"
|
||||
|
||||
|
||||
def _as(x, y, z=3191.63, block=AS_LINKS):
|
||||
return {"familie": "schleuselement", "block": block,
|
||||
"x": x, "y": y, "z": z, "rot": 270.0}
|
||||
|
||||
|
||||
def _linie(a, b, layer="6-SP"):
|
||||
return {"layer": layer, "a": list(a), "b": list(b)}
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _projekt(monkeypatch):
|
||||
monkeypatch.setattr(dsc, "PROJEKT", "Test")
|
||||
|
||||
|
||||
# Die beiden Kreisel am GF-Feld (Radmitten AN8 -> SP8, r = 400), wie
|
||||
# baue_eintraege sie als kreisel_geo anlegt. Ketten: oben y = 12919.72,
|
||||
# unten y = 24478.8.
|
||||
def _kreisel_oben(z=2437.0):
|
||||
return {"id": "K_oben", "a": (35460.37, 12519.72), "u": (-1.0, 0.0),
|
||||
"laenge": 33044.28, "r": 400.0, "z_anwender": z}
|
||||
|
||||
|
||||
def _kreisel_unten(z=1826.0):
|
||||
return {"id": "K_unten", "a": (36261.24, 24878.8), "u": (-1.0, 0.0),
|
||||
"laenge": 33470.18, "r": 400.0, "z_anwender": z}
|
||||
|
||||
|
||||
def test_gf_mit_as_am_oberen_ende():
|
||||
linie = _linie((5833.56, 13348.38, 3191.63), (5833.44, 24002.54, 2821.63))
|
||||
as_eigen = _as(5367.10, 14505.61)
|
||||
eintraege, belegt, hinweise = dsc.gf_eintraege_aus_linien([linie], [as_eigen])
|
||||
assert len(eintraege) == 1
|
||||
gf = eintraege[0]
|
||||
assert gf["test_id"] == "GF_Test_01"
|
||||
assert gf["modus"] == 1
|
||||
# ohne Kreisel: Linienende bleibt stehen, Hoehe unbekannt -> Platzhalter
|
||||
assert gf["start_mm"] == [5833.56, 13348.38, 0.0]
|
||||
assert gf["deltaL_mm"] == pytest.approx(10654.16, abs=0.01)
|
||||
assert gf["hz_grad"] == 90.0
|
||||
assert gf["winkel_grad"] == 3.0
|
||||
assert gf["hoehe_unbekannt"] is True
|
||||
assert (gf["as_seite"], gf["as_winkel"]) == ("links", "90")
|
||||
assert belegt == {id(as_eigen)}
|
||||
assert len(hinweise) == 2 and all("kein Kreisel" in h for h in hinweise)
|
||||
|
||||
|
||||
def test_anschluss_an_beide_kreisel_mit_hoehen():
|
||||
linie = _linie((5833.56, 13348.38, 3191.63), (5833.44, 24002.54, 2821.63))
|
||||
eintraege, _, hinweise = dsc.gf_eintraege_aus_linien(
|
||||
[linie], [_as(5367.10, 14505.61)], [_kreisel_oben(), _kreisel_unten()])
|
||||
gf = eintraege[0]
|
||||
assert gf["start_mm"][1] == pytest.approx(12919.72, abs=0.01)
|
||||
assert gf["start_mm"][2] == 2437.0
|
||||
assert gf["hoehe_ende_mm"] == 1826.0
|
||||
assert gf["hoehe_quelle"] == "Anwender"
|
||||
assert "winkel_grad" not in gf # rechnet der LISP-Treiber
|
||||
assert gf["deltaL_mm"] == pytest.approx(24478.8 - 12919.72, abs=0.05)
|
||||
assert (gf["kreisel_start"], gf["kreisel_ende"]) == ("K_oben", "K_unten")
|
||||
assert hinweise == []
|
||||
|
||||
|
||||
def test_kreisel_ohne_hoehe_gibt_platzhalter():
|
||||
linie = _linie((5833.56, 13348.38, 3191.63), (5833.44, 24002.54, 2821.63))
|
||||
eintraege, _, _ = dsc.gf_eintraege_aus_linien(
|
||||
[linie], [], [_kreisel_oben(z=None), _kreisel_unten()])
|
||||
assert eintraege[0]["kreisel_start"] == "K_oben"
|
||||
assert "hoehe_ende_mm" not in eintraege[0]
|
||||
assert eintraege[0]["winkel_grad"] == 3.0
|
||||
|
||||
|
||||
def test_separator_auf_achse_wird_verbraucht():
|
||||
linie = _linie((5833.56, 13348.38, 3191.63), (5833.44, 24002.54, 2821.63))
|
||||
sep_achse = {"familie": "sensor", "block": "S-SP", "x": 5834.0, "y": 23810.0}
|
||||
sep_daneben = {"familie": "sensor", "block": "S-SP", "x": 6734.0, "y": 23810.0}
|
||||
scanner = {"familie": "sensor", "block": "Scanner", "x": 5834.0, "y": 20000.0}
|
||||
_, belegt, _ = dsc.gf_eintraege_aus_linien(
|
||||
[linie], [], [_kreisel_oben(), _kreisel_unten()],
|
||||
[sep_achse, sep_daneben, scanner])
|
||||
assert belegt == {id(sep_achse)}
|
||||
|
||||
|
||||
def test_hoehen_entfernen_laesst_anwender_hoehen_stehen():
|
||||
eintraege = [
|
||||
{"id": "K1", "x": 0, "y": 0, "z": 2437.0, "hoehe_quelle": "Anwender"},
|
||||
{"block": "S-SP", "x": 0, "y": 0, "z": 2821.63, "comment": ""},
|
||||
{"test_id": "G", "typ": "gerade", "startpunkt": [0, 0, 5.0],
|
||||
"endpunkt": [1, 0, 5.0]},
|
||||
]
|
||||
assert dsc.hoehen_entfernen(eintraege) == 2
|
||||
assert eintraege[0]["z"] == 2437.0
|
||||
assert eintraege[1]["z"] == 0.0 and eintraege[1]["hoehe_unbekannt"] is True
|
||||
assert eintraege[2]["startpunkt"][2] == 0.0 and eintraege[2]["endpunkt"][2] == 0.0
|
||||
|
||||
|
||||
def test_nachbar_as_auf_falscher_seite_wird_nicht_gegriffen():
|
||||
# Linie bei x=5834; ihr AS 467 mm links, der AS der Nachbarlinie
|
||||
# (x=6734) 433 mm RECHTS - also naeher, aber auf der falschen Seite.
|
||||
linie = _linie((5833.56, 13348.38, 3191.63), (5833.44, 24002.54, 2821.63))
|
||||
as_eigen = _as(5367.10, 14505.61)
|
||||
as_nachbar = _as(6267.10, 14505.61)
|
||||
_, belegt, _ = dsc.gf_eintraege_aus_linien([linie], [as_nachbar, as_eigen])
|
||||
assert belegt == {id(as_eigen)}
|
||||
|
||||
|
||||
def test_rueckwaerts_gezeichnete_gf_startet_oben():
|
||||
linie = _linie((5833.44, 24002.54, 2821.63), (5833.56, 13348.38, 3191.63))
|
||||
eintraege, _, _ = dsc.gf_eintraege_aus_linien([linie], [_as(5367.10, 14505.61)])
|
||||
assert eintraege[0]["start_mm"][:2] == [5833.56, 13348.38]
|
||||
assert eintraege[0]["hz_grad"] == 90.0
|
||||
|
||||
|
||||
def test_as_am_unteren_ende_ist_steigfoerderer():
|
||||
# Gemessen: Linie x=2801 von 2822 hinauf auf 3192, AS am tiefen Ende.
|
||||
linie = _linie((2801.42, 24043.0, 2821.63), (2801.42, 13389.0, 3191.63))
|
||||
as_unten = _as(3267.48, 22892.92, z=2821.63)
|
||||
eintraege, belegt, hinweise = dsc.gf_eintraege_aus_linien([linie], [as_unten])
|
||||
assert eintraege == []
|
||||
assert belegt == set()
|
||||
assert len(hinweise) == 1 and "Steigfoerderer" in hinweise[0]
|
||||
|
||||
|
||||
def test_waagrechte_linie_ist_keine_gf():
|
||||
linie = _linie((36661.0, 10279.0, 2821.63), (36661.0, 24879.0, 2821.63))
|
||||
eintraege, belegt, hinweise = dsc.gf_eintraege_aus_linien([linie], [])
|
||||
assert eintraege == []
|
||||
assert belegt == set()
|
||||
assert any("waagrechte" in h for h in hinweise)
|
||||
|
||||
|
||||
def test_ohne_as_defaults_und_hinweis():
|
||||
linie = _linie((0.0, 0.0, 1000.0), (5000.0, 0.0, 800.0))
|
||||
eintraege, _, hinweise = dsc.gf_eintraege_aus_linien([linie], [])
|
||||
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_")
|
||||
|
||||
|
||||
def test_sensor_bekommt_hoehe_des_kreisels():
|
||||
# Kreisel_Showroom_03: Einfuegepunkt (37105.93, 9888.9), rotation 180,
|
||||
# Ketten y=9488.9/10288.9. Separator auf der Kette, Scanner 280 mm
|
||||
# innerhalb, ein Teil 1000 mm daneben bleibt unberuehrt.
|
||||
kreisel = {"id": "K3", "x": 37105.93, "y": 9888.9, "z": 1700.0,
|
||||
"abstand": 7200.0, "rotation": 180.0, "hoehe_quelle": "Anwender"}
|
||||
sep = {"function": "insert", "block": "S-LP", "x": 30343.39, "y": 9488.9,
|
||||
"z": 0.0, "hoehe_unbekannt": True, "comment": ""}
|
||||
scan = {"function": "insert", "block": "Scanner", "x": 35905.93,
|
||||
"y": 10008.9, "z": 0.0, "comment": ""}
|
||||
weit = {"function": "insert", "block": "S-LP", "x": 33000.0, "y": 11300.0,
|
||||
"z": 0.0, "comment": ""}
|
||||
assert dsc.sensor_hoehen_von_kreiseln([kreisel, sep, scan, weit]) == 2
|
||||
assert sep["z"] == 1700.0 and "hoehe_unbekannt" not in sep
|
||||
assert scan["z"] == 1700.0
|
||||
assert weit["z"] == 0.0
|
||||
|
||||
|
||||
def test_sensor_ohne_anwender_hoehe_bleibt():
|
||||
kreisel = {"id": "K", "x": 0.0, "y": 0.0, "z": 0.0, "abstand": 5000.0,
|
||||
"rotation": 0.0}
|
||||
sep = {"function": "insert", "block": "S-LP", "x": 1000.0, "y": 400.0,
|
||||
"z": 0.0, "comment": ""}
|
||||
assert dsc.sensor_hoehen_von_kreiseln([kreisel, sep]) == 0
|
||||
@@ -485,3 +485,56 @@ class TestAsEsImKreiselUmlauf:
|
||||
keys = [p[0] for p in umlauf["0001"]]
|
||||
assert "0057" not in keys, (
|
||||
"ES-Item weit ausserhalb der Kreiselbox wurde faelschlich erkannt")
|
||||
|
||||
|
||||
def _trans(x, y, z=0.0):
|
||||
"""Gegenstueck zu _decode_trans_xy (csv:trans-encode in export.lsp): drei
|
||||
vorzeichenbehaftete 24-Bit-Fixed-Point-Werte (Faktor 10), je 4 Zeichen."""
|
||||
from export_neighbors import _B64_CHARS
|
||||
text = ""
|
||||
for v in (x, y, z):
|
||||
n = int(round(v * 10.0)) & 0xFFFFFF
|
||||
text += "".join(_B64_CHARS[(n >> s) & 63] for s in (18, 12, 6, 0))
|
||||
return text
|
||||
|
||||
|
||||
def _strecke(teileid, k1_xy, k2_xy):
|
||||
return {"teileart": "ILS 2.0 Strecke", "teileid": teileid,
|
||||
"k1": _trans(*k1_xy), "k2": _trans(*k2_xy)}
|
||||
|
||||
|
||||
class TestAsEsUeberEinlaufpunkt:
|
||||
"""Dematic/Arvato VF_5 an Kreisel1 (Review 2026-10-08): die Strecke laeuft
|
||||
PARALLEL zum Kreisel, der 90-Grad-Einlauf (KS_EIN) liegt darum quer zur
|
||||
Kette - Marker (Einfuegepunkt) 557 mm neben der Kette, Einlauf nur 52 mm
|
||||
davor. Kreisel entlang +Y, rechte Kette bei x = +400."""
|
||||
|
||||
def _kreisel_y(self):
|
||||
return _kreisel("0001", 0.0, 0.0, 90.0, abstand=3619.0)
|
||||
|
||||
def test_marker_daneben_einlauf_auf_der_kette(self):
|
||||
items = [self._kreisel_y(),
|
||||
_separator("0043", 400.0, 1500.0),
|
||||
_ases("ILS Ausschleuselement", "0071", 957.0, 2283.0, "0009"),
|
||||
_strecke("0009", (348.0, 2283.0), (348.0, 9000.0))]
|
||||
umlauf = compute_kreisel_umlauf(
|
||||
items, tolerance_mm=200.0, durchmesser_mm=DURCHMESSER_MM)
|
||||
punkte = {p[0]: p for p in umlauf["0001"]}
|
||||
assert "0071" in punkte, "AS ueber den Einlaufpunkt nicht im Umlauf"
|
||||
# nach dem Einlauf einsortiert, nicht nach dem Marker
|
||||
assert len(umlauf["0001"]) == 2
|
||||
|
||||
def test_ohne_einlaufpunkt_bleibt_es_bei_der_marker_box(self):
|
||||
items = [self._kreisel_y(),
|
||||
_ases("ILS Ausschleuselement", "0071", 957.0, 2283.0, "0009")]
|
||||
umlauf = compute_kreisel_umlauf(
|
||||
items, tolerance_mm=200.0, durchmesser_mm=DURCHMESSER_MM)
|
||||
assert "0071" not in [p[0] for p in umlauf["0001"]]
|
||||
|
||||
def test_einlauf_weit_weg_wird_nicht_zugeordnet(self):
|
||||
items = [self._kreisel_y(),
|
||||
_ases("ILS Ausschleuselement", "0071", 957.0, 2283.0, "0009"),
|
||||
_strecke("0009", (5000.0, 2283.0), (9000.0, 2283.0))]
|
||||
umlauf = compute_kreisel_umlauf(
|
||||
items, tolerance_mm=200.0, durchmesser_mm=DURCHMESSER_MM)
|
||||
assert "0071" not in [p[0] for p in umlauf["0001"]]
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
;; roh aus der XDATA einer echten Zeichnung. Damit ist dies der einzige Test,
|
||||
;; der belegt, dass ein BESTEHENDER VF_n-Block weiter abspielbar bleibt -
|
||||
;; also dass Doppelklick-Editieren und 2D/3D-Konvertierung an Altbestand
|
||||
;; funktionieren (Invariante I1 in doc/TODO-plan-vf-interactive.md). Ein
|
||||
;; funktionieren (Invariante I1 in doc/todo/plan-vf-interactive.md). Ein
|
||||
;; spec-gebautes Journal kann das nicht zeigen, es kommt aus dem Uebersetzer.
|
||||
;;
|
||||
;; Darum in tests/alltests.json auf "disabled": true - er baut dieselbe
|
||||
|
||||
@@ -78,14 +78,15 @@
|
||||
;; Rueckgabe: Ergebnis-Record in derselben Form wie die Ketten, damit
|
||||
;; vsp-results-schreiben beide in EINE Datei schreibt (unterschieden ueber
|
||||
;; das Feld "kind").
|
||||
(defun hundm05:bau-kreisel (obj / id x y z abstand rotation typ pt ent ed rec)
|
||||
(defun hundm05:bau-kreisel (obj / id x y z abstand rotation typ drehrichtung pt ent ed rec)
|
||||
(setq id (ssg-val obj "id"))
|
||||
(setq x (ssg-val obj "x")
|
||||
y (ssg-val obj "y")
|
||||
z (ssg-val obj "z")
|
||||
abstand (ssg-val obj "abstand")
|
||||
rotation (ssg-val obj "rotation")
|
||||
typ (ssg-val obj "typ"))
|
||||
typ (ssg-val obj "typ")
|
||||
drehrichtung (ssg-val obj "drehrichtung"))
|
||||
(if (numberp x) (setq x (float x)))
|
||||
(if (numberp y) (setq y (float y)))
|
||||
(if (numberp z) (setq z (float z)))
|
||||
@@ -106,9 +107,9 @@
|
||||
(princ (strcat "\n [KREISEL] " id " -> (" (rtos x 2 0) ", "
|
||||
(rtos y 2 0) ", " (rtos (if z z 0.0) 2 0) ") A="
|
||||
(rtos abstand 2 0) " R=" (rtos (if rotation rotation 0.0) 2 1)
|
||||
" " typ))
|
||||
" " typ (if drehrichtung (strcat " " drehrichtung) "")))
|
||||
(setq ent (kreisel-insert-script pt abstand
|
||||
(if rotation rotation 0.0) typ z))
|
||||
(if rotation rotation 0.0) typ z drehrichtung))
|
||||
(if ent
|
||||
(progn
|
||||
(setq ed (entget ent))
|
||||
@@ -138,6 +139,10 @@
|
||||
(defun hundm05:bau-sensor (obj / id blockname x y z rotation pt eff n vorher ent ed attribs rec)
|
||||
(setq id (ssg-val obj "id"))
|
||||
(setq blockname (ssg-val obj "block"))
|
||||
;; Eintraege aus lib/dxf_scan_components.py haben kein "id" - die
|
||||
;; Meldungen unten setzen id per strcat zusammen und brachen dann mit
|
||||
;; "bad argument type <NIL>" ab.
|
||||
(if (null id) (setq id (cond (blockname) ("(ohne id)"))))
|
||||
(setq x (ssg-val obj "x")
|
||||
y (ssg-val obj "y")
|
||||
z (ssg-val obj "z")
|
||||
|
||||
@@ -52,8 +52,8 @@
|
||||
|
||||
;; --- Einzelnen Insert-Testfall ausfuehren ---
|
||||
(defun kreisel:run-insert-test (eintrag / id x y z abstand rotation typ
|
||||
pt blockEnt ed attribs block-name
|
||||
block-handle insert-point)
|
||||
drehrichtung pt blockEnt ed attribs
|
||||
block-name block-handle insert-point)
|
||||
(setq id (ssg-val eintrag "id"))
|
||||
(setq x (ssg-val eintrag "x"))
|
||||
(setq y (ssg-val eintrag "y"))
|
||||
@@ -61,6 +61,7 @@
|
||||
(setq abstand (ssg-val eintrag "abstand"))
|
||||
(setq rotation (ssg-val eintrag "rotation"))
|
||||
(setq typ (ssg-val eintrag "typ"))
|
||||
(setq drehrichtung (ssg-val eintrag "drehrichtung"))
|
||||
|
||||
(if (numberp x) (setq x (float x)))
|
||||
(if (numberp y) (setq y (float y)))
|
||||
@@ -71,9 +72,10 @@
|
||||
(setq pt (list x y z))
|
||||
(princ (strcat "\n [INSERT] " id " -> (" (rtos x 2 0) ", " (rtos y 2 0)
|
||||
", " (rtos z 2 0) ") A=" (rtos abstand 2 0)
|
||||
" R=" (rtos rotation 2 1) " " typ))
|
||||
" R=" (rtos rotation 2 1) " " typ
|
||||
(if drehrichtung (strcat " " drehrichtung) "")))
|
||||
|
||||
(setq blockEnt (kreisel-insert-script pt abstand rotation typ z))
|
||||
(setq blockEnt (kreisel-insert-script pt abstand rotation typ z drehrichtung))
|
||||
|
||||
(if blockEnt
|
||||
(progn
|
||||
|
||||
+34
-16
@@ -119,19 +119,20 @@
|
||||
;; ============================================================
|
||||
|
||||
;; --- Kreisel (wie test_kreisel: kreisel-insert-script) ---
|
||||
(defun mubea:build-kreisel (e / id x y z abstand rotation typ pt ent)
|
||||
(setq id (ssg-val e "id")
|
||||
x (float (ssg-val e "x"))
|
||||
y (float (ssg-val e "y"))
|
||||
z (float (ssg-val e "z"))
|
||||
abstand (float (ssg-val e "abstand"))
|
||||
rotation (float (ssg-val e "rotation"))
|
||||
typ (ssg-val e "typ"))
|
||||
(defun mubea:build-kreisel (e / id x y z abstand rotation typ drehrichtung pt ent)
|
||||
(setq id (ssg-val e "id")
|
||||
x (float (ssg-val e "x"))
|
||||
y (float (ssg-val e "y"))
|
||||
z (float (ssg-val e "z"))
|
||||
abstand (float (ssg-val e "abstand"))
|
||||
rotation (float (ssg-val e "rotation"))
|
||||
typ (ssg-val e "typ")
|
||||
drehrichtung (ssg-val e "drehrichtung"))
|
||||
(if (null typ) (setq typ "STANDARD"))
|
||||
(setq pt (list x y z))
|
||||
(princ (strcat "\n [KREISEL] " id " -> (" (rtos x 2 0) "," (rtos y 2 0)
|
||||
"," (rtos z 2 0) ") A=" (rtos abstand 2 0) " R=" (rtos rotation 2 1)))
|
||||
(setq ent (kreisel-insert-script pt abstand rotation typ z))
|
||||
(setq ent (kreisel-insert-script pt abstand rotation typ z drehrichtung))
|
||||
(mubea:ent-json id "kreisel" ent)
|
||||
)
|
||||
|
||||
@@ -146,8 +147,18 @@
|
||||
;; gueltigen Winkel zu nehmen. L_GF1 aus JSON ist der Vorlauf-Zielwert;
|
||||
;; L_GF2 (Nachlauf) ist der Rest (L_GF_gesamt - L_GF1).
|
||||
(defun mubea:build-vario-one (tid typ richtung deltaL deltaH winkel-soll gf1-ziel seite hz
|
||||
startpunkt / ergebnis winkel-treffer best-winkel L_GF L_VF
|
||||
gf1 gf2 hoehe-bis lastEnt ent vf-nummer)
|
||||
startpunkt)
|
||||
(mubea:ent-json tid "vario"
|
||||
(mubea:vario-bauen tid typ richtung deltaL deltaH winkel-soll gf1-ziel seite hz
|
||||
startpunkt)))
|
||||
|
||||
;; Der eigentliche Bau ohne Ergebnis-Format - auch von
|
||||
;; tests/test_dematic_arvato.lsp genutzt (dort mit vsp-Records).
|
||||
;; Rueckgabe: Entity des VF_n-Blocks oder nil (auch, wenn deltaL beim
|
||||
;; gewuenschten Winkel nicht loesbar ist).
|
||||
(defun mubea:vario-bauen (tid typ richtung deltaL deltaH winkel-soll gf1-ziel seite hz
|
||||
startpunkt / ergebnis winkel-treffer best-winkel L_GF L_VF
|
||||
gf1 gf2 hoehe-bis lastEnt ent vf-nummer)
|
||||
(if (or (null seite) (= seite "")) (setq seite "links"))
|
||||
(if (or (null typ) (= typ "")) (setq typ "standard"))
|
||||
(if (null hz) (setq hz 0.0) (setq hz (float hz)))
|
||||
@@ -207,12 +218,12 @@
|
||||
;; Linienzug/Altbestand bleiben unmarkiert.
|
||||
(if (and ent (= (type ent) 'ENAME) (member typ '("standard" "etage")))
|
||||
(vf-edit-xdata-schreiben ent typ hz))
|
||||
(mubea:ent-json tid "vario" ent))
|
||||
(if (and ent (= (type ent) 'ENAME)) ent nil))
|
||||
(progn
|
||||
(princ (strcat "\n FEHLER: deltaL=" (rtos deltaL 2 0)
|
||||
" bei Winkel " (if winkel-soll (rtos winkel-soll 2 0) "auto")
|
||||
" nicht loesbar (kein gueltiges L_GF/L_VF)."))
|
||||
(mubea:result-json tid "vario" "failed" nil nil nil nil)))
|
||||
nil))
|
||||
)
|
||||
|
||||
;; --- Vario(s) aus einem Template-Eintrag bauen ---
|
||||
@@ -290,8 +301,15 @@
|
||||
;; sep_x = 300 * cos(v), v = Element-Winkel (winkel_grad, Default 3 Grad)
|
||||
;; Die Zielhoehe ergibt sich aus L_stau/Winkel (kein Ziel-Hoehen-Parameter).
|
||||
;; Rueckgabe: Ergebnis-JSON-String.
|
||||
(defun mubea:build-gf-one (tid start-mm deltaL hz as-seite es-seite as-winkel es-winkel winkel /
|
||||
rad sep-x test-L_stau ent)
|
||||
(defun mubea:build-gf-one (tid start-mm deltaL hz as-seite es-seite as-winkel es-winkel winkel)
|
||||
(mubea:ent-json tid "gefaellestrecke"
|
||||
(mubea:gf-bauen tid start-mm deltaL hz as-seite es-seite as-winkel es-winkel winkel)))
|
||||
|
||||
;; Der eigentliche Bau ohne Ergebnis-Format - auch von
|
||||
;; tests/test_dematic_arvato.lsp genutzt (dort mit vsp-Records).
|
||||
;; Rueckgabe: Entity des GF_n-Blocks oder nil.
|
||||
(defun mubea:gf-bauen (tid start-mm deltaL hz as-seite es-seite as-winkel es-winkel winkel /
|
||||
rad sep-x test-L_stau ent)
|
||||
(mubea:ensure-gf-init)
|
||||
;; Element-Masse fuer die gewaehlte AS/ES-Variante setzen, damit aus-dx/ein-dx
|
||||
;; zur Variante (90/30 Grad) passen. Danach wieder auf 90 zuruecksetzen.
|
||||
@@ -312,7 +330,7 @@
|
||||
deltaL as-winkel es-winkel "0" "Schoenenberger Geruest")))
|
||||
(vf-set-as-masse "90" as-seite)
|
||||
(vf-set-es-masse "90" es-seite)
|
||||
(mubea:ent-json tid "gefaellestrecke" ent)
|
||||
ent
|
||||
)
|
||||
|
||||
;; --- Gefaellestrecke(n) aus einem Template-Eintrag bauen ---
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
;; ============================================================
|
||||
;; test_showroom_ils.lsp - Nachbau des ILS-3.0-Showrooms.
|
||||
;;
|
||||
;; Datenquelle: tests/testdata/showroom_ils.json. Entstehung in zwei Stufen:
|
||||
;; 1. Scanner auf der Fremdzeichnung (flacher 2D-Plan, Hoehen vom Anwender):
|
||||
;; 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 35305.93 13093.90 28772.93 13093.90 \
|
||||
;; --kreisel-hoehe 26997.93 3066.4 2226.4 \
|
||||
;; --kreisel-hoehe 26997.93 12898.9 2226.4 \
|
||||
;; --kreisel-hoehe 37105.93 9888.9 1700 \
|
||||
;; --kreisel-hoehe 27397.93 16298.9 2226.4 \
|
||||
;; --kreisel-hoehe 35705.93 13093.9 1970
|
||||
;; 2. VON HAND (geht bei Stufe 1 verloren - danach neu eintragen):
|
||||
;; Kreisel_Showroom_04 (vertikal, rechts) samt Separator/Scanner bei
|
||||
;; y=14979 entfernt, dafuer VF_Showroom_01 (VarioFoerderer standard,
|
||||
;; Auf von Kreisel_Showroom_03 zu Kreisel_Showroom_05) eingetragen.
|
||||
;; Showroom_BTMT_BEL_01 (Kreisel_Showroom_03) und Showroom_BTMT_ENT_01
|
||||
;; (Kreisel_Showroom_01) aus der gebauten Zeichnung uebernommen
|
||||
;; (results/export_raw.json, EXPORTCSV vom 2026-10-07).
|
||||
;;
|
||||
;; Inhalt: 5 Kreisel, 1 VarioFoerderer, 11 Gefaellestrecken (Modus 1),
|
||||
;; Separatoren/Scanner, BTMT Be- und Entladung.
|
||||
;; - Ebenen: oben 2226.4 (Kreisel 01/02/05), Mitte 1970 (06), unten 1700 (03)
|
||||
;; - in der gebauten Zeichnung KREISEL_1/2/4, KREISEL_5, KREISEL_3.
|
||||
;; - 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). Die AN8-Seite
|
||||
;; ist NICHT beliebig: der Export legt Bahn L links von AN8->SP8, der
|
||||
;; Materialfluss setzt den Bahnwechsel ans AN8-Ende. Kreisel_Showroom_06
|
||||
;; (UZS) hat AN8 darum im OSTEN, sonst wird Bahn L zur Sackgasse.
|
||||
;; - Weichen (WB-*/WM-*/WL-*/WR-*) werden bewusst NICHT nachgebaut.
|
||||
;; - GF: den Winkel
|
||||
;; und die Staustreckenlaenge rechnet dematic_arvato:gf-geometrie aus
|
||||
;; hoehe_ende_mm (ES-Masse bei der Neigung gemessen), und
|
||||
;; dematic_arvato:gf-endhoehe-pruefen meldet "warnung", wenn eine GF
|
||||
;; den unteren Kreisel um mehr als 5 mm verfehlt.
|
||||
;;
|
||||
;; 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)
|
||||
+73
-1
@@ -1601,6 +1601,77 @@
|
||||
(strcat "harter Fehler: " (vl-catch-all-error-message res))))
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; TESTS: ssg_input / ssg_blocktools / ssg_texttools - reine Funktionen
|
||||
;; (die interaktiven Befehle SSG_BLOCK_*, SSG_ATTR_ERSETZEN, SSG_TEXT_*
|
||||
;; brauchen eine Zeichnung und sind hier NICHT abgedeckt)
|
||||
;; ------------------------------------------------------------
|
||||
|
||||
(defun tu-tests-werkzeuge ( / _e)
|
||||
(princ "\n[ssg_input / ssg_blocktools / ssg_texttools]")
|
||||
(if (not (and (car (atoms-family 1 '("SSG-IN-DEFAULT")))
|
||||
(car (atoms-family 1 '("SSG-BT-WERT-NEU")))
|
||||
(car (atoms-family 1 '("SSG-TT-LESBARER-WINKEL")))))
|
||||
(tu-record nil "werkzeuge/geladen"
|
||||
"ssg_input/ssg_blocktools/ssg_texttools nicht geladen (ssg_load.lsp)")
|
||||
(progn
|
||||
;; --- ssg_input ---
|
||||
(tu-eqf "ssg-in-default/vorgabe" 5.0 (ssg-in-default nil 5.0))
|
||||
(tu-eqf "ssg-in-default/eingabe" 3.0 (ssg-in-default 3.0 5.0))
|
||||
(tu-nil "ssg-in-default/beides-nil" (ssg-in-default nil nil))
|
||||
(tu-eq "ssg-in-fmt-real/ganz" "5" (ssg-in-fmt-real 5.0))
|
||||
(tu-eq "ssg-in-fmt-real/halb" "2.5" (ssg-in-fmt-real 2.5))
|
||||
(tu-eq "ssg-in-fmt-real/null" "0" (ssg-in-fmt-real 0.0))
|
||||
(tu-eq "ssg-in-fmt-real/hundert" "100" (ssg-in-fmt-real 100.0))
|
||||
(tu-eq "ssg-in-fmt-real/bruch" "0.125" (ssg-in-fmt-real 0.125))
|
||||
(tu-eq "ssg-in-fmt-real/negativ" "-1.5" (ssg-in-fmt-real -1.5))
|
||||
(tu-eq "ssg-in-fmt-pt/3d" "1,2.5,0" (ssg-in-fmt-pt '(1.0 2.5 0.0)))
|
||||
(tu-eq "ssg-in-fmt-pt/2d" "1,2,0" (ssg-in-fmt-pt '(1.0 2.0)))
|
||||
(tu-eq "ssg-in-prompt/mit-vorgabe" "\nHoehe <5>: " (ssg-in-prompt "\nHoehe" "5"))
|
||||
(tu-eq "ssg-in-prompt/ohne" "\nHoehe: " (ssg-in-prompt "\nHoehe" nil))
|
||||
(tu-eq "ssg-in-first-word" "Ja" (ssg-in-first-word "Ja Nein"))
|
||||
(tu-eq "ssg-in-first-word/ein-wort" "Ja" (ssg-in-first-word "Ja"))
|
||||
(tu-eq "ssg-in-second-word" "Nein" (ssg-in-second-word "Ja Nein"))
|
||||
(tu-eq "ssg-in-second-word/ein-wort" "" (ssg-in-second-word "Ja"))
|
||||
|
||||
;; --- ssg_blocktools ---
|
||||
(tu-true "ssg-bt-name-passt-p/muster" (ssg-bt-name-passt-p "GR_TR_1" "gr_*"))
|
||||
(tu-nil "ssg-bt-name-passt-p/kein" (ssg-bt-name-passt-p "GR_TR_1" "XX*"))
|
||||
(tu-true "ssg-bt-name-passt-p/nil" (ssg-bt-name-passt-p "ABC" nil))
|
||||
(tu-true "ssg-bt-name-passt-p/leer" (ssg-bt-name-passt-p "ABC" ""))
|
||||
(tu-true "ssg-bt-name-passt-p/escape-ja" (ssg-bt-name-passt-p "A.B" "A`.B"))
|
||||
(tu-nil "ssg-bt-name-passt-p/escape-nein" (ssg-bt-name-passt-p "AxB" "A`.B"))
|
||||
(tu-eq "ssg-bt-muster-escape" "A`.B`#1" (ssg-bt-muster-escape "A.B#1"))
|
||||
(tu-eq "ssg-bt-muster-anzeige" "A.B#1" (ssg-bt-muster-anzeige "A`.B`#1"))
|
||||
(tu-eq "ssg-bt-zaehle-namen"
|
||||
'(("Alpha" . 1) ("Beta" . 1) ("Zeta" . 3))
|
||||
(ssg-bt-zaehle-namen '("Zeta" "Alpha" "Zeta" "Beta" "Zeta")))
|
||||
(tu-nil "ssg-bt-zaehle-namen/leer" (ssg-bt-zaehle-namen nil))
|
||||
(tu-eq "ssg-bt-wert-neu/teil" "ABC_1" (ssg-bt-wert-neu "ABC-1" "-" "_" T))
|
||||
(tu-eq "ssg-bt-wert-neu/mehrfach" "a.b.c" (ssg-bt-wert-neu "a-b-c" "-" "." T))
|
||||
(tu-eq "ssg-bt-wert-neu/loeschen" "AC" (ssg-bt-wert-neu "ABC" "B" "" T))
|
||||
(tu-nil "ssg-bt-wert-neu/kein-treffer" (ssg-bt-wert-neu "ABC" "X" "y" T))
|
||||
(tu-eq "ssg-bt-wert-neu/gesamt-ja" "X" (ssg-bt-wert-neu "ABC" "ABC" "X" nil))
|
||||
(tu-nil "ssg-bt-wert-neu/gesamt-nein" (ssg-bt-wert-neu "ABCD" "ABC" "X" nil))
|
||||
(tu-nil "ssg-bt-wert-neu/leere-suche" (ssg-bt-wert-neu "ABC" "" "X" T))
|
||||
(tu-nil "ssg-bt-wert-neu/gross-klein" (ssg-bt-wert-neu "abc" "ABC" "X" T))
|
||||
|
||||
;; --- ssg_texttools ---
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/0" 0.0 (ssg-tt-lesbarer-winkel 0.0))
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/45" (/ pi 4.0) (ssg-tt-lesbarer-winkel (/ pi 4.0)))
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/90" (/ pi 2.0) (ssg-tt-lesbarer-winkel (/ pi 2.0)))
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/135" (* 1.75 pi) (ssg-tt-lesbarer-winkel (* 0.75 pi)))
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/180" 0.0 (ssg-tt-lesbarer-winkel pi))
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/270" (/ pi 2.0) (ssg-tt-lesbarer-winkel (* 1.5 pi)))
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/-45" (* 1.75 pi) (ssg-tt-lesbarer-winkel (- (/ pi 4.0))))
|
||||
(tu-eqf "ssg-tt-lesbarer-winkel/360" 0.0 (ssg-tt-lesbarer-winkel (* 2.0 pi)))
|
||||
(tu-eqf "ssg-tt-versetzt/x" '(5.0 0.0 0.0) (ssg-tt-versetzt '(0.0 0.0 0.0) 0.0 5.0))
|
||||
(tu-eqf "ssg-tt-versetzt/y" '(0.0 2.0 0.0) (ssg-tt-versetzt '(0.0 0.0 0.0) (/ pi 2.0) 2.0))
|
||||
(tu-eqf "ssg-tt-versetzt/2d" '(1.0 4.0 0.0) (ssg-tt-versetzt '(1.0 1.0) (/ pi 2.0) 3.0))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defun c:TEST_UNIT ( / out-dir report)
|
||||
(tu-reset)
|
||||
(princ "\n================================================================")
|
||||
@@ -1610,7 +1681,8 @@
|
||||
(foreach fn '("tu-tests-core" "tu-tests-lang" "tu-tests-id" "tu-tests-vfcore"
|
||||
"tu-tests-export" "tu-tests-gf" "tu-tests-omni" "tu-tests-kreisel"
|
||||
"tu-tests-sepliste" "tu-tests-json" "tu-tests-geruest"
|
||||
"tu-tests-sepscan" "tu-tests-vfl-segs" "tu-tests-vfl-abbruch")
|
||||
"tu-tests-sepscan" "tu-tests-vfl-segs" "tu-tests-vfl-abbruch"
|
||||
"tu-tests-werkzeuge")
|
||||
(tu-run-block fn))
|
||||
|
||||
(princ "\n\n----------------------------------------------------------------")
|
||||
|
||||
@@ -7,7 +7,7 @@ HundM-Ketten.
|
||||
Warum zusaetzlich zu tests/test_hundm05.py: der Ergebnis-Record sagt
|
||||
"executed, kein Prompt, Journal aufgegangen" - er sagt NICHT, ob dieselbe
|
||||
Geometrie herauskam wie vorher. Genau das ist bei der Funktionstrennung in
|
||||
Stufe 2 (doc/TODO-plan-vf-interactive.md) das Risiko: die Reihenfolge der
|
||||
Stufe 2 (doc/todo/plan-vf-interactive.md) das Risiko: die Reihenfolge der
|
||||
dL-Subtraktionen und der vfl-acc-*-Aufrufe IST Geometrie, und eine falsche
|
||||
Reihenfolge faellt in der Zeichnung nicht auf - nur im Sivas-Export.
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ einem selten erreichten Zweig ein neues (alert ...) oder ein rohes
|
||||
(getreal ...) hinzufuegt. Genau das haelt dieser Test fest: die Fundstellen
|
||||
sind eingecheckt, jede neue muss hier bewusst eingetragen werden.
|
||||
|
||||
Hintergrund und Fahrplan: doc/TODO-plan-vf-interactive.md,
|
||||
Hintergrund und Fahrplan: doc/todo/plan-vf-interactive.md,
|
||||
Mechanik: doc/variofoerderer.md Abschnitt 8b.
|
||||
"""
|
||||
|
||||
|
||||
Vendored
+774
@@ -0,0 +1,774 @@
|
||||
[
|
||||
{
|
||||
"id": "Kreisel_Arvato_01",
|
||||
"function": "insert",
|
||||
"x": 19204.0,
|
||||
"y": 1703.66,
|
||||
"z": 2177.0,
|
||||
"abstand": 3619.14,
|
||||
"rotation": 90.0,
|
||||
"typ": "STANDARD",
|
||||
"drehrichtung": "GUZ",
|
||||
"comment": "aus Zeichnung: KREISEL_1_STANDARD_3619 (ID 0056), abstand aus Blockdefinition (AN8 -> SP8)"
|
||||
},
|
||||
{
|
||||
"id": "Kreisel_Arvato_02",
|
||||
"function": "insert",
|
||||
"x": 35860.37,
|
||||
"y": 12519.72,
|
||||
"z": 2437.0,
|
||||
"abstand": 33044.28,
|
||||
"rotation": 180.0,
|
||||
"typ": "STANDARD",
|
||||
"drehrichtung": "UZS",
|
||||
"comment": "aus Zeichnung: KREISEL_2_STANDARD_33044 (ID 0002), abstand aus Blockdefinition (AN8 -> SP8)"
|
||||
},
|
||||
{
|
||||
"id": "Kreisel_Arvato_03",
|
||||
"function": "insert",
|
||||
"x": 36661.24,
|
||||
"y": 24878.8,
|
||||
"z": 1826.0,
|
||||
"abstand": 33470.18,
|
||||
"rotation": 180.0,
|
||||
"typ": "STANDARD",
|
||||
"drehrichtung": "UZS",
|
||||
"comment": "aus Zeichnung: KREISEL_3_STANDARD_33470 (ID 0003), abstand aus Blockdefinition (AN8 -> SP8)"
|
||||
},
|
||||
{
|
||||
"id": "Kreisel_Arvato_04",
|
||||
"function": "insert",
|
||||
"x": 42563.78,
|
||||
"y": 1703.66,
|
||||
"z": 2177.0,
|
||||
"abstand": 3619.14,
|
||||
"rotation": 90.0,
|
||||
"typ": "STANDARD",
|
||||
"drehrichtung": "GUZ",
|
||||
"comment": "aus Zeichnung: KREISEL_4_STANDARD_3619 (ID 0055), abstand aus Blockdefinition (AN8 -> SP8)"
|
||||
},
|
||||
{
|
||||
"test_id": "VF_Arvato_01",
|
||||
"typ": "standard",
|
||||
"richtung": "Auf",
|
||||
"deltaL": 11559.0,
|
||||
"deltaH": 611.0,
|
||||
"winkel": 15,
|
||||
"L_GF1": 1907.0,
|
||||
"seite": "links",
|
||||
"motorseite": "rechts",
|
||||
"hz": 270.0,
|
||||
"x": 3314.07,
|
||||
"y": 24478.8,
|
||||
"z": 1826.0,
|
||||
"comment": "aus Zeichnung: VF_1 (ID 0005), Hoehe 0 -> 611; deltaL/deltaH aus den (ganzzahligen) Attributen"
|
||||
},
|
||||
{
|
||||
"test_id": "VF_Arvato_02",
|
||||
"typ": "standard",
|
||||
"richtung": "Auf",
|
||||
"deltaL": 11559.0,
|
||||
"deltaH": 611.0,
|
||||
"winkel": 15,
|
||||
"L_GF1": 1907.0,
|
||||
"seite": "links",
|
||||
"motorseite": "rechts",
|
||||
"hz": 270.0,
|
||||
"x": 15285.06,
|
||||
"y": 24478.8,
|
||||
"z": 1826.0,
|
||||
"comment": "aus Zeichnung: VF_2 (ID 0006), Hoehe 0 -> 611; deltaL/deltaH aus den (ganzzahligen) Attributen"
|
||||
},
|
||||
{
|
||||
"test_id": "VF_Arvato_03",
|
||||
"typ": "standard",
|
||||
"richtung": "Auf",
|
||||
"deltaL": 11559.0,
|
||||
"deltaH": 611.0,
|
||||
"winkel": 15,
|
||||
"L_GF1": 1907.0,
|
||||
"seite": "links",
|
||||
"motorseite": "rechts",
|
||||
"hz": 270.0,
|
||||
"x": 23843.05,
|
||||
"y": 24478.8,
|
||||
"z": 1826.0,
|
||||
"comment": "aus Zeichnung: VF_3 (ID 0007), Hoehe 0 -> 611; deltaL/deltaH aus den (ganzzahligen) Attributen"
|
||||
},
|
||||
{
|
||||
"test_id": "VF_Arvato_04",
|
||||
"typ": "standard",
|
||||
"richtung": "Auf",
|
||||
"deltaL": 22559.0,
|
||||
"deltaH": 0.0,
|
||||
"winkel": 12,
|
||||
"L_GF1": 6852.0,
|
||||
"seite": "rechts",
|
||||
"motorseite": "rechts",
|
||||
"hz": 180.0,
|
||||
"x": 42163.78,
|
||||
"y": 4017.06,
|
||||
"z": 2177.0,
|
||||
"comment": "aus Zeichnung: VF_4 (ID 0008), Hoehe 0 -> 0; deltaL/deltaH aus den (ganzzahligen) Attributen"
|
||||
},
|
||||
{
|
||||
"test_id": "VF_Arvato_05",
|
||||
"typ": "standard",
|
||||
"richtung": "Auf",
|
||||
"deltaL": 6852.0,
|
||||
"deltaH": 260.0,
|
||||
"winkel": 18,
|
||||
"L_GF1": 767.0,
|
||||
"seite": "links",
|
||||
"motorseite": "rechts",
|
||||
"hz": 90.0,
|
||||
"x": 19551.49,
|
||||
"y": 5265.19,
|
||||
"z": 2177.0,
|
||||
"comment": "aus Zeichnung: VF_5 (ID 0009), Hoehe 0 -> 260; deltaL/deltaH aus den (ganzzahligen) Attributen"
|
||||
},
|
||||
{
|
||||
"test_id": "VF_Arvato_LZ_01",
|
||||
"typ": "linienzug_journal",
|
||||
"journal": [
|
||||
"PT:42161.679193,2448.319538,0",
|
||||
"REAL:2177",
|
||||
"STR:1",
|
||||
"STR:90",
|
||||
"STR:2",
|
||||
"STEP:Linie-VF",
|
||||
"STR:4",
|
||||
"DL:9370.410886",
|
||||
"REAL:-180",
|
||||
"STR:1",
|
||||
"REAL:2800",
|
||||
"INT:1",
|
||||
"STR:2",
|
||||
"STR:2",
|
||||
"STR:2",
|
||||
"STEP:Linie-GF",
|
||||
"STR:2",
|
||||
"STR:1",
|
||||
"STR:3",
|
||||
"DL:6187.72996",
|
||||
"STR:1",
|
||||
"STR:2",
|
||||
"STR:2",
|
||||
"REAL:3",
|
||||
"STEP:Linie-VF",
|
||||
"STR:3",
|
||||
"DL:4572.938729",
|
||||
"STR:2",
|
||||
"INT:1",
|
||||
"STR:3",
|
||||
"STR:1",
|
||||
"STEP:ES",
|
||||
"STR:90",
|
||||
"STR:1",
|
||||
"DL:2872.479403",
|
||||
"REAL:2100",
|
||||
"STR:3",
|
||||
"STR:1",
|
||||
"STEP:ES",
|
||||
"STR:90",
|
||||
"STR:2",
|
||||
"DL:2857.418974",
|
||||
"REAL:2000",
|
||||
"STR:3",
|
||||
"STR:1",
|
||||
"STEP:ES",
|
||||
"STR:90",
|
||||
"STR:2",
|
||||
"DL:2850.93244",
|
||||
"REAL:2177",
|
||||
"INT:2",
|
||||
"STR:2"
|
||||
],
|
||||
"comment": "aus Zeichnung: VF_6 (ID 0010), 52 Eingaben, Hoehe 2177 -> 2174; wird 1:1 abgespielt (vsp-bau-journal)"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_01",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [5833.56, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_1 (ID 0011); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_02",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [6733.56, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_2 (ID 0012); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_03",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [7533.56, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_3 (ID 0013); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_04",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [8333.56, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_4 (ID 0014); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_05",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [9383.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_5 (ID 0015); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_06",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [10183.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_6 (ID 0016); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_07",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [10983.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_7 (ID 0017); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_08",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [12323.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_8 (ID 0018); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_09",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [13123.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_9 (ID 0019); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_10",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [13923.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_10 (ID 0020); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_11",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [16733.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_11 (ID 0021); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_12",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [17533.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_12 (ID 0022); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_13",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [18333.57, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_13 (ID 0023); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_14",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [19381.07, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_14 (ID 0024); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_15",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [20281.07, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_15 (ID 0025); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_16",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [21081.07, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_16 (ID 0026); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_17",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [21881.07, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_17 (ID 0027); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_18",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [25541.07, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_18 (ID 0028); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_19",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [26341.07, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_19 (ID 0029); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_20",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [27841.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_20 (ID 0030); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_21",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [28741.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_21 (ID 0031); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_22",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [29541.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_22 (ID 0032); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_23",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [30341.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_23 (ID 0033); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_24",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [31891.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_24 (ID 0034); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_25",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [32791.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_25 (ID 0035); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_26",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [33591.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_26 (ID 0036); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Arvato_27",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 11559.08,
|
||||
"hz_grad": 90.0,
|
||||
"start_mm": [34391.06, 12919.72, 2437.0],
|
||||
"as_seite": "links",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Arvato_02",
|
||||
"kreisel_ende": "Kreisel_Arvato_03",
|
||||
"hoehe_ende_mm": 1826.0,
|
||||
"comment": "aus Zeichnung: GF_27 (ID 0037); Endhoehe = Hoehe von Kreisel_Arvato_03 (1826.0), Winkel rechnet der Treiber neu; gebaut war 2.4700 Grad -> HOEHE_BIS 1825"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 3038.72,
|
||||
"y": 12119.73,
|
||||
"z": 2473.0,
|
||||
"rotation": 0.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0038, ZUORDNUNG 0002, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 3482.38,
|
||||
"y": 24478.8,
|
||||
"z": 1826.0,
|
||||
"rotation": 0.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0039, ZUORDNUNG 0003, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 5094.1,
|
||||
"y": 12919.72,
|
||||
"z": 2473.0,
|
||||
"rotation": 180.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0040, ZUORDNUNG 0002, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 15412.41,
|
||||
"y": 24478.8,
|
||||
"z": 1826.0,
|
||||
"rotation": 0.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0041, ZUORDNUNG 0003, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 15994.1,
|
||||
"y": 12919.78,
|
||||
"z": 2473.0,
|
||||
"rotation": 180.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0042, ZUORDNUNG 0002, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 19604.0,
|
||||
"y": 5042.22,
|
||||
"z": 2177.0,
|
||||
"rotation": 270.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0043, ZUORDNUNG 0056, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 24002.04,
|
||||
"y": 24478.8,
|
||||
"z": 1826.0,
|
||||
"rotation": 0.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0044, ZUORDNUNG 0003, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 24794.1,
|
||||
"y": 12919.82,
|
||||
"z": 2473.0,
|
||||
"rotation": 180.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0045, ZUORDNUNG 0002, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 35050.37,
|
||||
"y": 12919.72,
|
||||
"z": 2437.0,
|
||||
"rotation": 180.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0046, ZUORDNUNG 0002, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 35182.77,
|
||||
"y": 25278.8,
|
||||
"z": 1826.0,
|
||||
"rotation": 180.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0047, ZUORDNUNG 0003, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Separator_SP",
|
||||
"x": 42163.99,
|
||||
"y": 4269.52,
|
||||
"z": 2177.0,
|
||||
"rotation": 90.0,
|
||||
"comment": "aus Zeichnung: Separator_SP_3D (ID 0048, ZUORDNUNG 0055, ARTINR 200000077)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 3632.63,
|
||||
"y": 24865.38,
|
||||
"z": 1826.0,
|
||||
"rotation": 90.0,
|
||||
"comment": "aus Zeichnung: Scanner_3D (ID 0049, ZUORDNUNG 0003, ARTINR 829534306)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 4943.86,
|
||||
"y": 13306.31,
|
||||
"z": 2473.0,
|
||||
"rotation": 90.0,
|
||||
"comment": "aus Zeichnung: Scanner_3D (ID 0050, ZUORDNUNG 0011, ARTINR 829534306)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 15562.65,
|
||||
"y": 24865.38,
|
||||
"z": 1826.0,
|
||||
"rotation": 90.0,
|
||||
"comment": "aus Zeichnung: Scanner_3D (ID 0051, ZUORDNUNG 0003, ARTINR 829534306)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 15843.86,
|
||||
"y": 13306.36,
|
||||
"z": 2473.0,
|
||||
"rotation": 90.0,
|
||||
"comment": "aus Zeichnung: Scanner_3D (ID 0052, ZUORDNUNG 0002, ARTINR 829534306)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 24152.28,
|
||||
"y": 24865.38,
|
||||
"z": 1826.0,
|
||||
"rotation": 90.0,
|
||||
"comment": "aus Zeichnung: Scanner_3D (ID 0059, ZUORDNUNG 0003, ARTINR 829534306)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 24643.86,
|
||||
"y": 13306.4,
|
||||
"z": 2473.0,
|
||||
"rotation": 90.0,
|
||||
"comment": "aus Zeichnung: Scanner_3D (ID 0054, ZUORDNUNG 0028, ARTINR 829534306)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "BTMT-Beladung",
|
||||
"x": 42163.78,
|
||||
"y": 4978.68,
|
||||
"z": 2177.0,
|
||||
"rotation": 270.0,
|
||||
"comment": "aus Zeichnung: BTMT-Beladung_3D (ID 0057, ARTINR 829662012)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "SC_Entladung",
|
||||
"x": 35609.45,
|
||||
"y": 25278.8,
|
||||
"z": 1826.0,
|
||||
"rotation": 0.0,
|
||||
"comment": "aus Zeichnung: SC_Entladung_3D (ID 0058, ARTINR 400100156)"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 42163.78,
|
||||
"y": 4224.88,
|
||||
"z": 2177.0,
|
||||
"rotation": 180.0,
|
||||
"comment": "aus Zeichnung: Scanner_3D (ID 0053, ZUORDNUNG 0055, ARTINR 829534306)"
|
||||
}
|
||||
]
|
||||
Vendored
+413
@@ -0,0 +1,413 @@
|
||||
[
|
||||
{
|
||||
"id": "Kreisel_Showroom_01",
|
||||
"function": "insert",
|
||||
"x": 26997.93,
|
||||
"y": 3066.4,
|
||||
"z": 2226.4,
|
||||
"abstand": 9032.5,
|
||||
"rotation": 90.0,
|
||||
"typ": "STANDARD",
|
||||
"darstellung": "2D",
|
||||
"drehrichtung": "GUZ",
|
||||
"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 2226.4 vom Anwender.",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"id": "Kreisel_Showroom_02",
|
||||
"function": "insert",
|
||||
"x": 26997.93,
|
||||
"y": 12898.9,
|
||||
"z": 2226.4,
|
||||
"abstand": 3000.0,
|
||||
"rotation": 90.0,
|
||||
"typ": "STANDARD",
|
||||
"darstellung": "2D",
|
||||
"drehrichtung": "UZS",
|
||||
"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 2226.4 vom Anwender.",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"id": "Kreisel_Showroom_03",
|
||||
"function": "insert",
|
||||
"x": 37105.93,
|
||||
"y": 9888.9,
|
||||
"z": 1700.0,
|
||||
"abstand": 7200.0,
|
||||
"rotation": 180.0,
|
||||
"typ": "STANDARD",
|
||||
"darstellung": "2D",
|
||||
"drehrichtung": "GUZ",
|
||||
"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 1700.0 vom Anwender.",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"id": "Kreisel_Showroom_05",
|
||||
"function": "insert",
|
||||
"x": 27397.93,
|
||||
"y": 16298.9,
|
||||
"z": 2226.4,
|
||||
"abstand": 8908.0,
|
||||
"rotation": 0.0,
|
||||
"typ": "STANDARD",
|
||||
"darstellung": "2D",
|
||||
"drehrichtung": "GUZ",
|
||||
"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 2226.4 vom Anwender.",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"id": "Kreisel_Showroom_06",
|
||||
"function": "insert",
|
||||
"x": 35705.93,
|
||||
"y": 13093.9,
|
||||
"z": 1970.0,
|
||||
"abstand": 6533.0,
|
||||
"rotation": 180.0,
|
||||
"typ": "STANDARD",
|
||||
"darstellung": "2D",
|
||||
"drehrichtung": "UZS",
|
||||
"comment": "aus DXF: Schleife ohne AN8/SP8, Radmitten der Enden (35305.93, 13093.90) -> (28772.93, 13093.90) aus den PIN-Kreisen (--kreisel-achse), Mittenabstand 6533.00, rotation 180 - AN8-Seite bewusst OSTEN: der Export (export_neighbors.kreisel_half_bboxes) legt Bahn L links von AN8->SP8, und material_flow/tro_flow setzen den Bahnwechsel R->L (UZS) ans AN8-Ende. Mit AN8 im Westen lagen die Zulaeufe von Kreisel_Showroom_05 auf L und die Ablaeufe nach Kreisel_Showroom_03 auf R - Bahn 0005-L wurde zur Sackgasse. Hoehe 1970 vom Anwender.",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"test_id": "VF_Showroom_01",
|
||||
"typ": "standard",
|
||||
"richtung": "Auf",
|
||||
"deltaL": 5610.0,
|
||||
"deltaH": 526.4,
|
||||
"seite": "links",
|
||||
"hz": 90.0,
|
||||
"x": 36305.93,
|
||||
"y": 10288.9,
|
||||
"z": 1700.0,
|
||||
"comment": "von Hand: ersetzt Kreisel_Showroom_04 (vertikaler Kreisel AN8 (36706, 10689) -> SP8 (36706, 15499)) samt dessen Separator/Scanner bei y=14979. AS auf der oberen Kette von Kreisel_Showroom_03 (y=10288.9, Hoehe 1700) auf dem linken Strang des alten Kreisels (x=36306), Steigung +Y bis zur unteren Kette von Kreisel_Showroom_05 (y=15898.9, Hoehe 2226.4): deltaL 15898.9 - 10288.9 = 5610, deltaH 2226.4 - 1700 = 526.4. seite noch offen (links als Vorgabe), winkel waehlt der Solver."
|
||||
},
|
||||
{
|
||||
"test_id": "GF_Showroom_01",
|
||||
"modus": 1,
|
||||
"deltaL_mm": 2405.0,
|
||||
"hz_grad": 270.0,
|
||||
"start_mm": [30455.93, 15898.9, 2226.4],
|
||||
"as_seite": "links",
|
||||
"es_seite": "rechts",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_05",
|
||||
"kreisel_ende": "Kreisel_Showroom_06",
|
||||
"hoehe_ende_mm": 1970.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_05 / Kreisel_Showroom_06), den Winkel rechnet der Treiber; 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, 1970.0],
|
||||
"as_seite": "rechts",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_06",
|
||||
"kreisel_ende": "Kreisel_Showroom_03",
|
||||
"hoehe_ende_mm": 1700.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_06 / Kreisel_Showroom_03), den Winkel rechnet der Treiber; 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, 2226.4],
|
||||
"as_seite": "links",
|
||||
"es_seite": "rechts",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_05",
|
||||
"kreisel_ende": "Kreisel_Showroom_06",
|
||||
"hoehe_ende_mm": 1970.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_05 / Kreisel_Showroom_06), den Winkel rechnet der Treiber; 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, 1970.0],
|
||||
"as_seite": "rechts",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_06",
|
||||
"kreisel_ende": "Kreisel_Showroom_03",
|
||||
"hoehe_ende_mm": 1700.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_06 / Kreisel_Showroom_03), den Winkel rechnet der Treiber; 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, 2226.4],
|
||||
"as_seite": "links",
|
||||
"es_seite": "rechts",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_05",
|
||||
"kreisel_ende": "Kreisel_Showroom_06",
|
||||
"hoehe_ende_mm": 1970.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_05 / Kreisel_Showroom_06), den Winkel rechnet der Treiber; 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, 1970.0],
|
||||
"as_seite": "rechts",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_06",
|
||||
"kreisel_ende": "Kreisel_Showroom_03",
|
||||
"hoehe_ende_mm": 1700.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_06 / Kreisel_Showroom_03), den Winkel rechnet der Treiber; 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, 2226.4],
|
||||
"as_seite": "links",
|
||||
"es_seite": "rechts",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_05",
|
||||
"kreisel_ende": "Kreisel_Showroom_06",
|
||||
"hoehe_ende_mm": 1970.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_05 / Kreisel_Showroom_06), den Winkel rechnet der Treiber; 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, 1970.0],
|
||||
"as_seite": "rechts",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_06",
|
||||
"kreisel_ende": "Kreisel_Showroom_03",
|
||||
"hoehe_ende_mm": 1700.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_06 / Kreisel_Showroom_03), den Winkel rechnet der Treiber; 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, 2226.4],
|
||||
"as_seite": "links",
|
||||
"es_seite": "rechts",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_05",
|
||||
"kreisel_ende": "Kreisel_Showroom_06",
|
||||
"hoehe_ende_mm": 1970.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_05 / Kreisel_Showroom_06), den Winkel rechnet der Treiber; 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, 1970.0],
|
||||
"as_seite": "rechts",
|
||||
"es_seite": "links",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_06",
|
||||
"kreisel_ende": "Kreisel_Showroom_03",
|
||||
"hoehe_ende_mm": 1700.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_06 / Kreisel_Showroom_03), den Winkel rechnet der Treiber; 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, 2226.4],
|
||||
"as_seite": "links",
|
||||
"es_seite": "rechts",
|
||||
"as_winkel": "90",
|
||||
"es_winkel": "90",
|
||||
"kreisel_start": "Kreisel_Showroom_05",
|
||||
"kreisel_ende": "Kreisel_Showroom_06",
|
||||
"hoehe_ende_mm": 1970.0,
|
||||
"hoehe_quelle": "Anwender",
|
||||
"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 vom Anwender (Kreisel Kreisel_Showroom_05 / Kreisel_Showroom_06), den Winkel rechnet der Treiber; 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": 2226.4,
|
||||
"rotation": 270.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 2226.4 von Kreisel_Showroom_01 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "S-LP",
|
||||
"x": 26597.93,
|
||||
"y": 13982.92,
|
||||
"z": 2226.4,
|
||||
"rotation": 90.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 2226.4 von Kreisel_Showroom_02 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "S-LP",
|
||||
"x": 27397.93,
|
||||
"y": 5450.07,
|
||||
"z": 2226.4,
|
||||
"rotation": 90.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 2226.4 von Kreisel_Showroom_01 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "S-LP",
|
||||
"x": 27397.93,
|
||||
"y": 15773.9,
|
||||
"z": 2226.4,
|
||||
"rotation": 270.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 2226.4 von Kreisel_Showroom_02 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "S-LP",
|
||||
"x": 29397.93,
|
||||
"y": 13493.9,
|
||||
"z": 1970.0,
|
||||
"rotation": 0.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1970 von Kreisel_Showroom_06 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "S-LP",
|
||||
"x": 30343.39,
|
||||
"y": 9488.9,
|
||||
"z": 1700.0,
|
||||
"rotation": 0.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1700.0 von Kreisel_Showroom_03 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "S-LP",
|
||||
"x": 32083.74,
|
||||
"y": 9488.9,
|
||||
"z": 1700.0,
|
||||
"rotation": 0.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1700.0 von Kreisel_Showroom_03 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "S-LP",
|
||||
"x": 35905.93,
|
||||
"y": 10288.9,
|
||||
"z": 1700.0,
|
||||
"rotation": 180.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1700.0 von Kreisel_Showroom_03 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 29398.73,
|
||||
"y": 13176.71,
|
||||
"z": 1970.0,
|
||||
"rotation": 270.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1970 von Kreisel_Showroom_06 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 30343.39,
|
||||
"y": 9208.9,
|
||||
"z": 1700.0,
|
||||
"rotation": 270.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1700.0 von Kreisel_Showroom_03 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 32083.74,
|
||||
"y": 9208.9,
|
||||
"z": 1700.0,
|
||||
"rotation": 270.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1700.0 von Kreisel_Showroom_03 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"function": "insert",
|
||||
"block": "Scanner",
|
||||
"x": 35905.93,
|
||||
"y": 10008.9,
|
||||
"z": 1700.0,
|
||||
"rotation": 270.0,
|
||||
"darstellung": "2D",
|
||||
"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] Hoehe 1700.0 von Kreisel_Showroom_03 (liegt auf dessen Kette).",
|
||||
"hoehe_quelle": "Anwender"
|
||||
},
|
||||
{
|
||||
"id": "Showroom_BTMT_BEL_01",
|
||||
"comment": "BTMT Beladung auf Kreisel_Showroom_03 (Hoehe 1700) - von Hand in der gebauten Showroom-Zeichnung ergaenzt, Einfuegepunkt/Drehung aus results/export_raw.json (EXPORTCSV vom 2026-10-07, Block BTMT-Beladung_3D, ID 0040)",
|
||||
"function": "insert",
|
||||
"block": "BTMT-Beladung",
|
||||
"x": 29877.99,
|
||||
"y": 9478.98,
|
||||
"z": 1690.08,
|
||||
"rotation": 180.0
|
||||
},
|
||||
{
|
||||
"id": "Showroom_BTMT_ENT_01",
|
||||
"comment": "BTMT Entladung auf Kreisel_Showroom_01 (Hoehe 2226.4) - von Hand in der gebauten Showroom-Zeichnung ergaenzt, Einfuegepunkt/Drehung aus results/export_raw.json (EXPORTCSV vom 2026-10-07, Block SC_Entladung_3D, ID 0041)",
|
||||
"function": "insert",
|
||||
"block": "SC_Entladung",
|
||||
"x": 27397.93,
|
||||
"y": 4555.45,
|
||||
"z": 2226.4,
|
||||
"rotation": 270.0
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user