This commit is contained in:
2026-09-08 12:38:05 +02:00
5 changed files with 573 additions and 353 deletions
+305 -305
View File
File diff suppressed because it is too large Load Diff
+91 -11
View File
@@ -58,7 +58,10 @@
;; lib/vf_spec_export.py uebernimmt sie beim Neuerzeugen der Spec-Daten ;; lib/vf_spec_export.py uebernimmt sie beim Neuerzeugen der Spec-Daten
;; unveraendert ans Dateiende (sonst waeren sie beim naechsten Lauf weg). ;; unveraendert ans Dateiende (sonst waeren sie beim naechsten Lauf weg).
;; ;;
;; Bisher unterstuetzt: Kreisel (function "insert", wie test_kreisel.lsp). ;; Unterstuetzt: Kreisel (function "insert", wie test_kreisel.lsp) und
;; Separator/Scanner (zusaetzlich "block", wie in mubea.json - Schema
;; tests/testdata/object_data.md Abschnitt 5). Unterscheidung ueber das
;; Feld "block": nur Separator/Scanner-Eintraege haben es.
;; Weitere Arten kommen als eigener cond-Zweig dazu. ;; Weitere Arten kommen als eigener cond-Zweig dazu.
(defun hundm05:zusatz-objekt-p (obj) (defun hundm05:zusatz-objekt-p (obj)
@@ -116,10 +119,80 @@
(vsp-set (vsp-set rec "status" "abbruch") "fehler_text" (vsp-set (vsp-set rec "status" "abbruch") "fehler_text"
"kreisel-insert-script lieferte nil")))))) "kreisel-insert-script lieferte nil"))))))
;; Separator/Scanner bauen ("block"-Eintraege, siehe object_data.md
;; Abschnitt 5). ils-insert-sensor (SSG_LIB_Commands.lsp) ist dafuer NICHT
;; scriptbar (fragt Punkt/Rotation per getpoint/pause in einer Schleife) -
;; wir bauen den _.INSERT darum direkt selbst nach, wie
;; mubea:build-separator-one in tests/test_mubea.lsp es fuer die
;; Mubea-Anlage schon vorgemacht hat (dieselbe Vorlage, hier auf das
;; hundm05:bau-*/vsp-rec-neu-Record-Format dieser Datei uebertragen statt
;; mubeas eigenes result-json). "sensor" als Sammelbegriff fuer den "kind"-
;; Wert, weil dieselbe Routine Separator UND Scanner einfuegt - genau wie
;; ils-insert-sensor selbst.
(defun hundm05:bau-sensor (obj / id blockname x y z rotation pt eff n ent ed rec)
(setq id (ssg-val obj "id"))
(setq blockname (ssg-val obj "block"))
(setq x (ssg-val obj "x")
y (ssg-val obj "y")
z (ssg-val obj "z")
rotation (ssg-val obj "rotation"))
(if (numberp x) (setq x (float x)))
(if (numberp y) (setq y (float y)))
(if (numberp z) (setq z (float z)))
(setq rotation (if (numberp rotation) (float rotation) 0.0))
(setq rec (vsp-rec-neu (cond (id) (blockname) ("(ohne id)"))))
(setq rec (vsp-set rec "kind" "sensor"))
(setq rec (vsp-set rec "dimension" (vsp-dim-text)))
(cond
((not (and (numberp x) (numberp y) (numberp z)))
(princ (strcat "\n [SENSOR] " (if id id "?")
" - FEHLER: x, y und z muessen Zahlen sein"))
(vsp-set (vsp-set rec "status" "spec-fehler") "fehler_text"
"x, y oder z fehlt bzw. ist keine Zahl"))
(T
(setq pt (list x y z))
;; NICHT (and blockname (ssg-ils-block-laden blockname)) - and liefert
;; T/nil statt des Blocknamen-Strings (siehe CLAUDE.md, and/or-Falle).
(setq eff (if blockname (ssg-ils-block-laden blockname)))
(if (null eff) (setq eff (ssg-ils-block-laden "Separator_SP")))
(cond
((null eff)
(princ (strcat "\n [SENSOR] " (if id id "?")
" - FEHLER: weder '" blockname
"' noch Fallback 'Separator_SP' als Blockdatei gefunden"))
(vsp-set (vsp-set rec "status" "abbruch") "fehler_text"
"kein Block gefunden"))
(T
(princ (strcat "\n [SENSOR] " id " '" blockname "' -> ("
(rtos x 2 0) ", " (rtos y 2 0) ", " (rtos z 2 0)
") R=" (rtos rotation 2 1)))
(command "_.INSERT" eff pt "" "" rotation)
;; Verbleibende Prompts mit Enter abfangen, aber GEZAEHLT - siehe
;; mubea:build-separator-one (ein Prompt, der Leer-Antworten
;; ablehnt, haelt CMDACTIVE sonst dauerhaft > 0).
(setq n 0)
(while (and (> (getvar "CMDACTIVE") 0) (< n 5))
(command "")
(setq n (1+ n)))
(if (> (getvar "CMDACTIVE") 0)
(progn
(command)
(princ (strcat "\n WARNUNG: INSERT von '" eff
"' nicht sauber beendet - abgebrochen."))))
(setq ent (entlast))
(if (atoms-family 1 '("ssg-id-generate")) (ssg-id-generate ent))
(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"))))))
;; Alle Zusatzobjekte der Datei bauen. Eigener ssg-start-Rahmen, weil ;; Alle Zusatzobjekte der Datei bauen. Eigener ssg-start-Rahmen, weil
;; vsp-bau-datei seinen schon geschlossen hat; ATTREQ/ATTDIA 0 ist Pflicht - ;; vsp-bau-datei seinen schon geschlossen hat; ATTREQ/ATTDIA 0 ist Pflicht -
;; sonst fragt (command "_.INSERT" ...) nach Attributwerten. ;; sonst fragt (command "_.INSERT" ...) nach Attributwerten.
(defun hundm05:bau-zusatzobjekte (datei / daten objekte out rec) (defun hundm05:bau-zusatzobjekte (datei / daten objekte out rec builder kind)
(setq daten (ssg-load-json datei)) (setq daten (ssg-load-json datei))
(setq objekte '()) (setq objekte '())
(foreach obj daten (foreach obj daten
@@ -127,11 +200,6 @@
(setq objekte (reverse objekte)) (setq objekte (reverse objekte))
(cond (cond
((null objekte) nil) ((null objekte) nil)
((null (car (atoms-family 1 '("KREISEL-INSERT-SCRIPT"))))
(princ (strcat "\n[TEST_HUNDM05] WARNUNG: " (itoa (length objekte))
" Zusatzobjekt(e) uebersprungen - KreiselInsert nicht"
" geladen."))
nil)
(T (T
(princ (strcat "\n " (itoa (length objekte)) (princ (strcat "\n " (itoa (length objekte))
" weitere(s) Objekt(e) der Anlage")) " weitere(s) Objekt(e) der Anlage"))
@@ -142,16 +210,28 @@
(setvar "ATTDIA" 0) (setvar "ATTDIA" 0)
(setq out '()) (setq out '())
(foreach obj objekte (foreach obj objekte
(setq rec (vl-catch-all-apply 'hundm05:bau-kreisel (list obj))) ;; Unterscheidung Kreisel/Sensor ueber "block" (nur Separator/
;; Scanner-Eintraege haben es), je eigener Builder + "kind"-Wert.
(setq kind (if (ssg-val obj "block") "sensor" "kreisel"))
(setq builder (if (ssg-val obj "block") 'hundm05:bau-sensor 'hundm05:bau-kreisel))
(cond
((and (= kind "kreisel")
(null (car (atoms-family 1 '("KREISEL-INSERT-SCRIPT")))))
(princ (strcat "\n [KREISEL] " (ssg-val obj "id")
" uebersprungen - KreiselInsert nicht geladen."))
(setq rec (vsp-set (vsp-set (vsp-rec-neu (ssg-val obj "id"))
"kind" kind) "status" "spec-fehler")))
(T
(setq rec (vl-catch-all-apply builder (list obj)))
(if (vl-catch-all-error-p rec) (if (vl-catch-all-error-p rec)
(progn (progn
(princ (strcat "\n [KREISEL] Ausnahme: " (princ (strcat "\n [" (strcase kind) "] Ausnahme: "
(vl-catch-all-error-message rec))) (vl-catch-all-error-message rec)))
(setq rec (vsp-set (vsp-set (vsp-set (setq rec (vsp-set (vsp-set (vsp-set
(vsp-rec-neu (ssg-val obj "id")) (vsp-rec-neu (ssg-val obj "id"))
"kind" "kreisel") "status" "abbruch") "kind" kind) "status" "abbruch")
"fehler_text" "fehler_text"
(vl-catch-all-error-message rec))))) (vl-catch-all-error-message rec)))))))
(setq out (cons rec out))) (setq out (cons rec out)))
(ssg-end) (ssg-end)
(reverse out)))) (reverse out))))
+18 -18
View File
@@ -348,24 +348,24 @@
"anzahl_eingaben": 54, "anzahl_eingaben": 54,
"block": "VF_46", "block": "VF_46",
"dxf_handle": "EFD4", "dxf_handle": "EFD4",
"startpunkt_mm": [8571.95068, 1276.061424, 2494.930831], "startpunkt_mm": [8572.181, 1226.825, 2154.0],
"rotation_grad": 0.0, "rotation_grad": 0.0,
"beschreibung": "Linienzug (Modus 1), Start Z2495: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links",
"sivas_id": "0019", "sivas_id": "0019",
"sivas_bezeichnung": "VarioFoerderer :5", "sivas_bezeichnung": "VarioFoerderer :5",
"planquadrat": "D/1", "planquadrat": "D/1",
"erwartung_hinweis": "Sivas-Export (EXPORTSIVAS), Strecke 0019: DeltaL_mm=1788, DeltaH_mm=220, Hoehe_Von_mm=2154, Hoehe_Bis_mm=2374, L_GF_m=2.727,0.4,0.418, L_VF_m=0.177,0.339,0.356,0.548, VF_Winkel=0,0,39,0, Anzahl_Separator=3", "erwartung_hinweis": "Sivas-Export (EXPORTSIVAS), Strecke 0019: DeltaL_mm=1788, DeltaH_mm=220, Hoehe_Von_mm=2154, Hoehe_Bis_mm=2374, L_GF_m=2.727,0.4,0.418, L_VF_m=0.177,0.339,0.356,0.548, VF_Winkel=0,0,39,0, Anzahl_Separator=3",
"quelle": "INSERT EFD4 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]" "quelle": "INSERT EFD4 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [8571.95068, 1276.061424, 2494.930831] aufgezeichnet (Anschluss an Kreisel hatte Luecke)"
}, },
{ {
"typ": "point_abs", "typ": "point_abs",
"wert": [8571.95068, 1276.061424, 2494.930831], "wert": [8572.181, 1226.825, 2154.0],
"kommentar": "getpoint Startpunkt der Kette (absoluter Weltpunkt, einziger Anker der ganzen Kette)" "kommentar": "getpoint Startpunkt der Kette (absoluter Weltpunkt, einziger Anker der ganzen Kette)"
}, },
{ {
"typ": "real", "typ": "real",
"wert": 2494.930831, "wert": 2154.0,
"kommentar": "getreal Hoehe (Z) Startpunkt -> 2494.9 mm" "kommentar": "getreal Hoehe (Z) Startpunkt -> 2154.0 mm"
}, },
{ {
"typ": "string", "typ": "string",
@@ -635,24 +635,24 @@
"anzahl_eingaben": 54, "anzahl_eingaben": 54,
"block": "VF_46", "block": "VF_46",
"dxf_handle": "FA5A", "dxf_handle": "FA5A",
"startpunkt_mm": [12916.465798, 1276.061424, 2494.930831], "startpunkt_mm": [12916.988, 1237.971, 2154.0],
"rotation_grad": 0.0, "rotation_grad": 0.0,
"beschreibung": "Linienzug (Modus 1), Start Z2495: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links",
"sivas_id": "0018", "sivas_id": "0018",
"sivas_bezeichnung": "VarioFoerderer :4", "sivas_bezeichnung": "VarioFoerderer :4",
"planquadrat": "F/1", "planquadrat": "F/1",
"erwartung_hinweis": "Sivas-Export (EXPORTSIVAS), Strecke 0018: DeltaL_mm=1788, DeltaH_mm=220, Hoehe_Von_mm=2154, Hoehe_Bis_mm=2374, L_GF_m=2.727,0.4,0.418, L_VF_m=0.177,0.339,0.356,0.548, VF_Winkel=0,0,39,0, Anzahl_Separator=3", "erwartung_hinweis": "Sivas-Export (EXPORTSIVAS), Strecke 0018: DeltaL_mm=1788, DeltaH_mm=220, Hoehe_Von_mm=2154, Hoehe_Bis_mm=2374, L_GF_m=2.727,0.4,0.418, L_VF_m=0.177,0.339,0.356,0.548, VF_Winkel=0,0,39,0, Anzahl_Separator=3",
"quelle": "INSERT FA5A (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]" "quelle": "INSERT FA5A (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [12916.465798, 1276.061424, 2494.930831] aufgezeichnet (Anschluss an Kreisel hatte Luecke)"
}, },
{ {
"typ": "point_abs", "typ": "point_abs",
"wert": [12916.465798, 1276.061424, 2494.930831], "wert": [12916.988, 1237.971, 2154.0],
"kommentar": "getpoint Startpunkt der Kette (absoluter Weltpunkt, einziger Anker der ganzen Kette)" "kommentar": "getpoint Startpunkt der Kette (absoluter Weltpunkt, einziger Anker der ganzen Kette)"
}, },
{ {
"typ": "real", "typ": "real",
"wert": 2494.930831, "wert": 2154.0,
"kommentar": "getreal Hoehe (Z) Startpunkt -> 2494.9 mm" "kommentar": "getreal Hoehe (Z) Startpunkt -> 2154.0 mm"
}, },
{ {
"typ": "string", "typ": "string",
@@ -1209,24 +1209,24 @@
"anzahl_eingaben": 54, "anzahl_eingaben": 54,
"block": "VF_46", "block": "VF_46",
"dxf_handle": "104E0", "dxf_handle": "104E0",
"startpunkt_mm": [21490.273781, 1195.739767, 2494.930831], "startpunkt_mm": [21491.319, 1213.582, 2154.0],
"rotation_grad": 0.0, "rotation_grad": 0.0,
"beschreibung": "Linienzug (Modus 1), Start Z2495: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links",
"sivas_id": "0008", "sivas_id": "0008",
"sivas_bezeichnung": "VarioFoerderer :3", "sivas_bezeichnung": "VarioFoerderer :3",
"planquadrat": "J/1", "planquadrat": "J/1",
"erwartung_hinweis": "Sivas-Export (EXPORTSIVAS), Strecke 0008: DeltaL_mm=1788, DeltaH_mm=220, Hoehe_Von_mm=2154, Hoehe_Bis_mm=2374, L_GF_m=2.727,0.4,0.418, L_VF_m=0.177,0.339,0.356,0.548, VF_Winkel=0,0,39,0, Anzahl_Separator=3", "erwartung_hinweis": "Sivas-Export (EXPORTSIVAS), Strecke 0008: DeltaL_mm=1788, DeltaH_mm=220, Hoehe_Von_mm=2154, Hoehe_Bis_mm=2374, L_GF_m=2.727,0.4,0.418, L_VF_m=0.177,0.339,0.356,0.548, VF_Winkel=0,0,39,0, Anzahl_Separator=3",
"quelle": "INSERT 104E0 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]" "quelle": "INSERT 104E0 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [21490.273781, 1195.739767, 2494.930831] aufgezeichnet"
}, },
{ {
"typ": "point_abs", "typ": "point_abs",
"wert": [21490.273781, 1195.739767, 2494.930831], "wert": [21491.319, 1213.582, 2154.0],
"kommentar": "getpoint Startpunkt der Kette (absoluter Weltpunkt, einziger Anker der ganzen Kette)" "kommentar": "getpoint Startpunkt der Kette (absoluter Weltpunkt, einziger Anker der ganzen Kette)"
}, },
{ {
"typ": "real", "typ": "real",
"wert": 2494.930831, "wert": 2154.0,
"kommentar": "getreal Hoehe (Z) Startpunkt -> 2494.9 mm" "kommentar": "getreal Hoehe (Z) Startpunkt -> 2154.0 mm"
}, },
{ {
"typ": "string", "typ": "string",
+152 -12
View File
@@ -94,18 +94,18 @@
{ {
"spec_id": "VF_hundm05_LZ_02", "spec_id": "VF_hundm05_LZ_02",
"modus": 1, "modus": 1,
"start_punkt": [8571.95068, 1276.061424, 2494.930831], "start_punkt": [8572.181, 1226.825, 2154.0],
"start_hoehe": 2494.930831, "start_hoehe": 2154.0,
"as": 1, "as": 1,
"as_winkel": "90", "as_winkel": "90",
"as_seite": "links", "as_seite": "links",
"beschreibung": "Linienzug (Modus 1), Start Z2495: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links",
"sivas_id": "0019", "sivas_id": "0019",
"sivas_bezeichnung": "VarioFoerderer :5", "sivas_bezeichnung": "VarioFoerderer :5",
"planquadrat": "D/1", "planquadrat": "D/1",
"block": "VF_46", "block": "VF_46",
"dxf_handle": "EFD4", "dxf_handle": "EFD4",
"quelle": "INSERT EFD4 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]" "quelle": "INSERT EFD4 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [8571.95068, 1276.061424, 2494.930831] aufgezeichnet (Anschluss an Kreisel hatte Luecke)"
}, },
{ {
"glied": "Linie-GF", "glied": "Linie-GF",
@@ -175,18 +175,18 @@
{ {
"spec_id": "VF_hundm05_LZ_03", "spec_id": "VF_hundm05_LZ_03",
"modus": 1, "modus": 1,
"start_punkt": [12916.465798, 1276.061424, 2494.930831], "start_punkt": [12916.988, 1237.971, 2154.0],
"start_hoehe": 2494.930831, "start_hoehe": 2154.0,
"as": 1, "as": 1,
"as_winkel": "90", "as_winkel": "90",
"as_seite": "links", "as_seite": "links",
"beschreibung": "Linienzug (Modus 1), Start Z2495: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links",
"sivas_id": "0018", "sivas_id": "0018",
"sivas_bezeichnung": "VarioFoerderer :4", "sivas_bezeichnung": "VarioFoerderer :4",
"planquadrat": "F/1", "planquadrat": "F/1",
"block": "VF_46", "block": "VF_46",
"dxf_handle": "FA5A", "dxf_handle": "FA5A",
"quelle": "INSERT FA5A (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]" "quelle": "INSERT FA5A (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [12916.465798, 1276.061424, 2494.930831] aufgezeichnet (Anschluss an Kreisel hatte Luecke)"
}, },
{ {
"glied": "Linie-GF", "glied": "Linie-GF",
@@ -337,18 +337,18 @@
{ {
"spec_id": "VF_hundm05_LZ_05", "spec_id": "VF_hundm05_LZ_05",
"modus": 1, "modus": 1,
"start_punkt": [21490.273781, 1195.739767, 2494.930831], "start_punkt": [21491.319, 1213.582, 2154.0],
"start_hoehe": 2494.930831, "start_hoehe": 2154.0,
"as": 1, "as": 1,
"as_winkel": "90", "as_winkel": "90",
"as_seite": "links", "as_seite": "links",
"beschreibung": "Linienzug (Modus 1), Start Z2495: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links",
"sivas_id": "0008", "sivas_id": "0008",
"sivas_bezeichnung": "VarioFoerderer :3", "sivas_bezeichnung": "VarioFoerderer :3",
"planquadrat": "J/1", "planquadrat": "J/1",
"block": "VF_46", "block": "VF_46",
"dxf_handle": "104E0", "dxf_handle": "104E0",
"quelle": "INSERT 104E0 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]" "quelle": "INSERT 104E0 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [21490.273781, 1195.739767, 2494.930831] aufgezeichnet"
}, },
{ {
"glied": "Linie-GF", "glied": "Linie-GF",
@@ -427,5 +427,145 @@
"expect_block_prefix": "KREISEL_", "expect_block_prefix": "KREISEL_",
"expect_hoehe": "2154", "expect_hoehe": "2154",
"expect_kreiselart": "STANDARD" "expect_kreiselart": "STANDARD"
},
{
"id": "HundM05_SEP_01",
"comment": "Separator 1 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "S-LP",
"x": 2355,
"y": 365,
"z": 2154,
"rotation": 0
},
{
"id": "HundM05_SEP_02",
"comment": "Separator 2 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "S-LP",
"x": 4052.79,
"y": 1165.94,
"z": 2154,
"rotation": 180
},
{
"id": "HundM05_SCANNER_02",
"comment": "Scanner zu Separator 2 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "Scanner",
"x": 4095.51,
"y": 1164.08,
"z": 2154,
"rotation": 270
},
{
"id": "HundM05_SEP_03",
"comment": "Separator 3 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "S-LP",
"x": 7831.77,
"y": 1169.53,
"z": 2154,
"rotation": 180
},
{
"id": "HundM05_SCANNER_03",
"comment": "Scanner zu Separator 3 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "Scanner",
"x": 7874.49,
"y": 1167.67,
"z": 2154,
"rotation": 270
},
{
"id": "HundM05_SEP_04",
"comment": "Separator 4 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "S-LP",
"x": 12191.01,
"y": 1168.25,
"z": 2154,
"rotation": 180
},
{
"id": "HundM05_SCANNER_04",
"comment": "Scanner zu Separator 4 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "Scanner",
"x": 12233.73,
"y": 1166.39,
"z": 2154,
"rotation": 270
},
{
"id": "HundM05_SEP_05",
"comment": "Separator 5 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "S-LP",
"x": 16488.38,
"y": 1171.7,
"z": 2154,
"rotation": 180
},
{
"id": "HundM05_SCANNER_05",
"comment": "Scanner zu Separator 5 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "Scanner",
"x": 16531.1,
"y": 1169.84,
"z": 2154,
"rotation": 270
},
{
"id": "HundM05_SEP_06",
"comment": "Separator 6 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "S-LP",
"x": 20764.96,
"y": 1166.18,
"z": 2154,
"rotation": 180
},
{
"id": "HundM05_SCANNER_06",
"comment": "Scanner zu Separator 6 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "Scanner",
"x": 20807.68,
"y": 1164.32,
"z": 2154,
"rotation": 270
},
{
"id": "HundM05_SEP_07",
"comment": "Separator 7 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "S-LP",
"x": 23738.03,
"y": 1170.63,
"z": 2154,
"rotation": 180
},
{
"id": "HundM05_SCANNER_07",
"comment": "Scanner zu Separator 7 (Nachtrag HundM05, reale Koordinate laut Anwender)",
"function": "insert",
"block": "Scanner",
"x": 23780.75,
"y": 1168.77,
"z": 2154,
"rotation": 270
},
{
"id": "HundM05_SEP_08",
"comment": "Separator 8 (Nachtrag HundM05, reale Koordinate laut Anwender, ohne zugehoerigen Scanner)",
"function": "insert",
"block": "S-LP",
"x": 24630.12,
"y": 1167.22,
"z": 2154,
"rotation": 180
} }
] ]
+1 -1
View File
@@ -649,7 +649,7 @@ Zwei Dateien beschreiben dieselben 5 Ketten, in zwei Formaten:
| `tests/testdata/hm_recformat.json` | die **Aufzeichnung**: rohes Eingabe-Journal aus der XDATA der Kundenzeichnung, als Frage-Antwort-Protokoll | `TEST_HM_RECFORMAT` (in `alltests.json` abgeschaltet) | | `tests/testdata/hm_recformat.json` | die **Aufzeichnung**: rohes Eingabe-Journal aus der XDATA der Kundenzeichnung, als Frage-Antwort-Protokoll | `TEST_HM_RECFORMAT` (in `alltests.json` abgeschaltet) |
| `tests/testdata/hundm05.json` | die daraus abgeleitete **Spec** (Domaenenwerte statt Menue-Codes, 52 statt 281 Objekte) - hier werden weitere Teile der Anlage nachgetragen | `TEST_HUNDM05` | | `tests/testdata/hundm05.json` | die daraus abgeleitete **Spec** (Domaenenwerte statt Menue-Codes, 52 statt 281 Objekte) - hier werden weitere Teile der Anlage nachgetragen | `TEST_HUNDM05` |
In `hundm05.json` stehen neben den Ketten auch **andere Objekte der Anlage**, erkennbar am Feld `function` - Format wie in den jeweiligen Einzel-Testdaten (ein Kreisel also wie in `kreisel_tests.json`, Schema in Abschnitt 1). Damit beschreibt EINE Datei die ganze Anlage. Der Ketten-Uebersetzer ueberspringt diese Objekte (`vsp-gruppieren`), `hundm05:bau-zusatzobjekte` in `tests/test_hundm05.lsp` baut sie, und `lib/vf_spec_export.py` uebernimmt sie beim Neuerzeugen der Spec-Daten. Im Ergebnis-JSON unterscheidet das Feld `kind` die Objektarten (`linienzug` / `kreisel`). In `hundm05.json` stehen neben den Ketten auch **andere Objekte der Anlage**, erkennbar am Feld `function` - Format wie in den jeweiligen Einzel-Testdaten (ein Kreisel also wie in `kreisel_tests.json`, Schema in Abschnitt 1). Damit beschreibt EINE Datei die ganze Anlage. Der Ketten-Uebersetzer ueberspringt diese Objekte (`vsp-gruppieren`), `hundm05:bau-zusatzobjekte` in `tests/test_hundm05.lsp` baut sie, und `lib/vf_spec_export.py` uebernimmt sie beim Neuerzeugen der Spec-Daten. Im Ergebnis-JSON unterscheidet das Feld `kind` die Objektarten (`linienzug` / `kreisel` / `sensor`). `sensor` sind Separator/Scanner-Eintraege (erkennbar an `block`, Schema wie Abschnitt 5/`mubea.json`) - `hundm05:bau-sensor` baut sie per direktem `_.INSERT` nach, analog zu `mubea:build-separator-one` in `tests/test_mubea.lsp` (`ils-insert-sensor` selbst ist nicht scriptbar).
Die Spec ist das Eingabeformat, die Aufzeichnung die Vorlage, an der sie gemessen wird (Rundlauf-Beweis in `tests/test_vf_spec.py`). Warum beide bleiben: die Aufzeichnung ist die einzige eingecheckte Kopie der Originaldaten (`data/polylines.dxf` ist zu gross fuer das Repo) UND der einzige Test dafuer, dass ein BESTEHENDER `VF_n`-Block weiter abspielbar ist - also dass Doppelklick-Edit und 2D/3D-Konvertierung an Altbestand funktionieren. Gebaut wird routinemaessig nur noch aus der Spec, damit nicht zweimal dieselbe Geometrie entsteht. Die Spec ist das Eingabeformat, die Aufzeichnung die Vorlage, an der sie gemessen wird (Rundlauf-Beweis in `tests/test_vf_spec.py`). Warum beide bleiben: die Aufzeichnung ist die einzige eingecheckte Kopie der Originaldaten (`data/polylines.dxf` ist zu gross fuer das Repo) UND der einzige Test dafuer, dass ein BESTEHENDER `VF_n`-Block weiter abspielbar ist - also dass Doppelklick-Edit und 2D/3D-Konvertierung an Altbestand funktionieren. Gebaut wird routinemaessig nur noch aus der Spec, damit nicht zweimal dieselbe Geometrie entsteht.