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)
|
;; Verschachteltes JSON-Objekt parsen (1 Ebene tief)
|
||||||
;; {"section": {"key": val, ...}, ...}
|
;; {"section": {"key": val, ...}, ...}
|
||||||
;; -> (("section" ("key" . val) ...) ...)
|
;; -> (("section" ("key" . val) ...) ...)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
;; Erzeugt 12 Variofoerderer (6x Auf, 6x Ab) mit deltaL=7000
|
;; Erzeugt 12 Variofoerderer (6x Auf, 6x Ab) mit deltaL=7000
|
||||||
;; und verschiedenen Hoehenstufen. Speichert:
|
;; und verschiedenen Hoehenstufen. Speichert:
|
||||||
;; - tests/output/foerderer_results.json (Ergebnisse)
|
;; - tests/output/foerderer_results.json (Ergebnisse)
|
||||||
;; - tests/output/foerderer_tests.dxf (Zeichnung)
|
;; - tests/output/foerderer_tests.dwg (Zeichnung)
|
||||||
;;
|
;;
|
||||||
;; Voraussetzungen:
|
;; Voraussetzungen:
|
||||||
;; - SSG_LIB geladen (VarioFoerderer.lsp, ssg_core.lsp)
|
;; - 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
|
(defun kreisel:run-insert-test (eintrag / id x y z abstand rotation typ
|
||||||
pt blockEnt ed attribs block-name
|
pt blockEnt ed attribs block-name
|
||||||
block-handle insert-point)
|
block-handle insert-point)
|
||||||
(setq id (omni:val eintrag "id"))
|
(setq id (ssg-val eintrag "id"))
|
||||||
(setq x (omni:val eintrag "x"))
|
(setq x (ssg-val eintrag "x"))
|
||||||
(setq y (omni:val eintrag "y"))
|
(setq y (ssg-val eintrag "y"))
|
||||||
(setq z (omni:val eintrag "z"))
|
(setq z (ssg-val eintrag "z"))
|
||||||
(setq abstand (omni:val eintrag "abstand"))
|
(setq abstand (ssg-val eintrag "abstand"))
|
||||||
(setq rotation (omni:val eintrag "rotation"))
|
(setq rotation (ssg-val eintrag "rotation"))
|
||||||
(setq typ (omni:val eintrag "typ"))
|
(setq typ (ssg-val eintrag "typ"))
|
||||||
|
|
||||||
(if (numberp x) (setq x (float x)))
|
(if (numberp x) (setq x (float x)))
|
||||||
(if (numberp y) (setq y (float y)))
|
(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
|
(defun kreisel:run-connect-test (eintrag / id sx sy sz ex ey ez typ
|
||||||
ptStart ptEnd blockEnt ed attribs
|
ptStart ptEnd blockEnt ed attribs
|
||||||
block-name block-handle insert-point)
|
block-name block-handle insert-point)
|
||||||
(setq id (omni:val eintrag "id"))
|
(setq id (ssg-val eintrag "id"))
|
||||||
(setq sx (omni:val eintrag "start_x"))
|
(setq sx (ssg-val eintrag "start_x"))
|
||||||
(setq sy (omni:val eintrag "start_y"))
|
(setq sy (ssg-val eintrag "start_y"))
|
||||||
(setq sz (omni:val eintrag "start_z"))
|
(setq sz (ssg-val eintrag "start_z"))
|
||||||
(setq ex (omni:val eintrag "end_x"))
|
(setq ex (ssg-val eintrag "end_x"))
|
||||||
(setq ey (omni:val eintrag "end_y"))
|
(setq ey (ssg-val eintrag "end_y"))
|
||||||
(setq ez (omni:val eintrag "end_z"))
|
(setq ez (ssg-val eintrag "end_z"))
|
||||||
(setq typ (omni:val eintrag "typ"))
|
(setq typ (ssg-val eintrag "typ"))
|
||||||
|
|
||||||
(if (numberp sx) (setq sx (float sx)))
|
(if (numberp sx) (setq sx (float sx)))
|
||||||
(if (numberp sy) (setq sy (float sy)))
|
(if (numberp sy) (setq sy (float sy)))
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq testfaelle (omni:load-json tests-json-pfad))
|
(setq testfaelle (ssg-load-json tests-json-pfad))
|
||||||
(if (null testfaelle)
|
(if (null testfaelle)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n[TEST_KREISEL] FEHLER: Testdaten konnten nicht geladen werden.")
|
(princ "\n[TEST_KREISEL] FEHLER: Testdaten konnten nicht geladen werden.")
|
||||||
@@ -213,7 +213,7 @@
|
|||||||
|
|
||||||
;; Testfaelle ausfuehren
|
;; Testfaelle ausfuehren
|
||||||
(foreach eintrag testfaelle
|
(foreach eintrag testfaelle
|
||||||
(setq func (omni:val eintrag "function"))
|
(setq func (ssg-val eintrag "function"))
|
||||||
(setq result-json
|
(setq result-json
|
||||||
(cond
|
(cond
|
||||||
((= func "insert")
|
((= 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
|
;; C:TEST_OMNIFLO
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -146,6 +146,9 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
;; Zeichnung leeren fuer sauberen Testlauf
|
;; 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")
|
(if (ssget "_X")
|
||||||
(command "_.ERASE" "_ALL" "")
|
(command "_.ERASE" "_ALL" "")
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user