diff --git a/Lisp/ssg_core.lsp b/Lisp/ssg_core.lsp index 63af5d1..b3e2132 100644 --- a/Lisp/ssg_core.lsp +++ b/Lisp/ssg_core.lsp @@ -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) ...) ...) diff --git a/tests/test_foerderer.lsp b/tests/test_foerderer.lsp index 7b489e1..0b554a9 100644 --- a/tests/test_foerderer.lsp +++ b/tests/test_foerderer.lsp @@ -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) diff --git a/tests/test_kreisel.lsp b/tests/test_kreisel.lsp index cb6f7d2..531fdb9 100644 --- a/tests/test_kreisel.lsp +++ b/tests/test_kreisel.lsp @@ -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") diff --git a/tests/test_omniflo.lsp b/tests/test_omniflo.lsp index eb2f25f..1e02de0 100644 --- a/tests/test_omniflo.lsp +++ b/tests/test_omniflo.lsp @@ -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 ;; diff --git a/tests/test_run_all.lsp b/tests/test_run_all.lsp index a7da176..cf39936 100644 --- a/tests/test_run_all.lsp +++ b/tests/test_run_all.lsp @@ -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" "") )