Eigene Routine um flache json kv Files zu parsen.
This commit is contained in:
@@ -620,6 +620,41 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; --- JSON-Array von flachen Objekten parsen ---
|
||||
;; Verwendet ssg-cfg-trim und ssg-cfg-parse-kv aus ssg_core.
|
||||
;; Rueckgabe: Liste von Alists (("key" . wert) ...)
|
||||
(defun ssg-parse-json-array (zeilen / in-obj obj ergebnis zeile kv trimmed)
|
||||
(setq in-obj nil obj nil ergebnis nil)
|
||||
(foreach zeile zeilen
|
||||
(setq trimmed (ssg-cfg-trim zeile))
|
||||
(cond
|
||||
((= trimmed "{")
|
||||
(setq in-obj T obj nil))
|
||||
((or (= trimmed "}") (= trimmed "},"))
|
||||
(if (and in-obj obj)
|
||||
(setq ergebnis (cons (reverse obj) ergebnis)))
|
||||
(setq in-obj nil))
|
||||
(in-obj
|
||||
(setq kv (ssg-cfg-parse-kv trimmed))
|
||||
(if kv (setq obj (cons kv obj))))
|
||||
)
|
||||
)
|
||||
(reverse ergebnis)
|
||||
)
|
||||
|
||||
;; JSON-Datei als flaches Array laden
|
||||
;; Rueckgabe: Liste von Alists oder nil bei Fehler
|
||||
(defun ssg-load-json (datei / zeilen)
|
||||
(setq zeilen (ssg-read-file-lines datei))
|
||||
(if zeilen (ssg-parse-json-array zeilen))
|
||||
)
|
||||
|
||||
;; Wert aus Alist lesen: (ssg-val alist "key")
|
||||
(defun ssg-val (alist key)
|
||||
(cdr (assoc key alist))
|
||||
)
|
||||
|
||||
|
||||
;; Verschachteltes JSON-Objekt parsen (1 Ebene tief)
|
||||
;; {"section": {"key": val, ...}, ...}
|
||||
;; -> (("section" ("key" . val) ...) ...)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
;; Erzeugt 12 Variofoerderer (6x Auf, 6x Ab) mit deltaL=7000
|
||||
;; und verschiedenen Hoehenstufen. Speichert:
|
||||
;; - tests/output/foerderer_results.json (Ergebnisse)
|
||||
;; - tests/output/foerderer_tests.dxf (Zeichnung)
|
||||
;; - tests/output/foerderer_tests.dwg (Zeichnung)
|
||||
;;
|
||||
;; Voraussetzungen:
|
||||
;; - SSG_LIB geladen (VarioFoerderer.lsp, ssg_core.lsp)
|
||||
|
||||
+17
-17
@@ -54,13 +54,13 @@
|
||||
(defun kreisel:run-insert-test (eintrag / id x y z abstand rotation typ
|
||||
pt blockEnt ed attribs block-name
|
||||
block-handle insert-point)
|
||||
(setq id (omni:val eintrag "id"))
|
||||
(setq x (omni:val eintrag "x"))
|
||||
(setq y (omni:val eintrag "y"))
|
||||
(setq z (omni:val eintrag "z"))
|
||||
(setq abstand (omni:val eintrag "abstand"))
|
||||
(setq rotation (omni:val eintrag "rotation"))
|
||||
(setq typ (omni:val eintrag "typ"))
|
||||
(setq id (ssg-val eintrag "id"))
|
||||
(setq x (ssg-val eintrag "x"))
|
||||
(setq y (ssg-val eintrag "y"))
|
||||
(setq z (ssg-val eintrag "z"))
|
||||
(setq abstand (ssg-val eintrag "abstand"))
|
||||
(setq rotation (ssg-val eintrag "rotation"))
|
||||
(setq typ (ssg-val eintrag "typ"))
|
||||
|
||||
(if (numberp x) (setq x (float x)))
|
||||
(if (numberp y) (setq y (float y)))
|
||||
@@ -98,14 +98,14 @@
|
||||
(defun kreisel:run-connect-test (eintrag / id sx sy sz ex ey ez typ
|
||||
ptStart ptEnd blockEnt ed attribs
|
||||
block-name block-handle insert-point)
|
||||
(setq id (omni:val eintrag "id"))
|
||||
(setq sx (omni:val eintrag "start_x"))
|
||||
(setq sy (omni:val eintrag "start_y"))
|
||||
(setq sz (omni:val eintrag "start_z"))
|
||||
(setq ex (omni:val eintrag "end_x"))
|
||||
(setq ey (omni:val eintrag "end_y"))
|
||||
(setq ez (omni:val eintrag "end_z"))
|
||||
(setq typ (omni:val eintrag "typ"))
|
||||
(setq id (ssg-val eintrag "id"))
|
||||
(setq sx (ssg-val eintrag "start_x"))
|
||||
(setq sy (ssg-val eintrag "start_y"))
|
||||
(setq sz (ssg-val eintrag "start_z"))
|
||||
(setq ex (ssg-val eintrag "end_x"))
|
||||
(setq ey (ssg-val eintrag "end_y"))
|
||||
(setq ez (ssg-val eintrag "end_z"))
|
||||
(setq typ (ssg-val eintrag "typ"))
|
||||
|
||||
(if (numberp sx) (setq sx (float sx)))
|
||||
(if (numberp sy) (setq sy (float sy)))
|
||||
@@ -194,7 +194,7 @@
|
||||
(princ)
|
||||
)
|
||||
(progn
|
||||
(setq testfaelle (omni:load-json tests-json-pfad))
|
||||
(setq testfaelle (ssg-load-json tests-json-pfad))
|
||||
(if (null testfaelle)
|
||||
(progn
|
||||
(princ "\n[TEST_KREISEL] FEHLER: Testdaten konnten nicht geladen werden.")
|
||||
@@ -213,7 +213,7 @@
|
||||
|
||||
;; Testfaelle ausfuehren
|
||||
(foreach eintrag testfaelle
|
||||
(setq func (omni:val eintrag "function"))
|
||||
(setq func (ssg-val eintrag "function"))
|
||||
(setq result-json
|
||||
(cond
|
||||
((= func "insert")
|
||||
|
||||
@@ -100,6 +100,47 @@
|
||||
)
|
||||
|
||||
|
||||
;; --- Post-Clean: Omniflo-Testbloecke aus der Zeichnung loeschen ---
|
||||
;; Entfernt alle INSERT-Entities mit rein numerischen Blocknamen (Omniflo SivasNr)
|
||||
;; sowie AP110-Geraden. Wird vom Test-Runner nach dem Export aufgerufen.
|
||||
;; Rueckgabe: Anzahl geloeschter Bloecke
|
||||
(defun omniflo:post-clean ( / ss-all i ename ed bname count)
|
||||
(setq count 0)
|
||||
(setq ss-all (ssget "X" (list (cons 0 "INSERT"))))
|
||||
(if ss-all
|
||||
(progn
|
||||
(setq i 0)
|
||||
(while (setq ename (ssname ss-all i))
|
||||
(setq ed (entget ename))
|
||||
(setq bname (cdr (assoc 2 ed)))
|
||||
(if (or
|
||||
;; Omniflo SivasNr: rein numerisch (beginnt mit Ziffer, kein Unterstrich)
|
||||
(and (wcmatch bname "#*") (null (vl-string-search "_" bname)))
|
||||
;; Omniflo Geraden
|
||||
(wcmatch (strcase bname) "AP110*,AP_110*")
|
||||
)
|
||||
(progn
|
||||
(entdel ename)
|
||||
(setq count (1+ count))
|
||||
)
|
||||
)
|
||||
(setq i (1+ i))
|
||||
)
|
||||
)
|
||||
)
|
||||
(princ (strcat "\n[OMNIFLO] Post-Clean: " (itoa count) " Bloecke entfernt."))
|
||||
count
|
||||
)
|
||||
|
||||
|
||||
;; --- BricsCAD-Befehl: Omniflo-Ergebnisse exportieren ---
|
||||
(defun c:TEST_OMNIFLO_EXPORT ( / tests-out-dir)
|
||||
(setq tests-out-dir (strcat (getenv "DXFMAKRO") "/tests/output"))
|
||||
(omniflo:export-results tests-out-dir)
|
||||
(princ)
|
||||
)
|
||||
|
||||
|
||||
;; ============================================================
|
||||
;; C:TEST_OMNIFLO
|
||||
;;
|
||||
|
||||
@@ -146,6 +146,9 @@
|
||||
)
|
||||
|
||||
;; Zeichnung leeren fuer sauberen Testlauf
|
||||
;; Frozen Layer werden von _.ERASE _ALL ignoriert - deshalb
|
||||
;; erst alle Layer auftauen, entsperren und einschalten.
|
||||
(command "_.LAYER" "_Thaw" "*" "_Unlock" "*" "_On" "*" "")
|
||||
(if (ssget "_X")
|
||||
(command "_.ERASE" "_ALL" "")
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user