174 lines
6.1 KiB
Common Lisp
174 lines
6.1 KiB
Common Lisp
;; ============================================================
|
|
;; test_omniflo.lsp - Automatischer Integrationstest fuer Omniflo
|
|
;;
|
|
;; Laedt Testfaelle aus tests/testdata/omniflo_tests.json,
|
|
;; fuegt je einen Bogen und Weiche jeden Typs in verschiedenen
|
|
;; Hoehen ein (Versatz in x-Richtung je 200mm) und exportiert
|
|
;; die CSV-Datei nach tests/output/omniflo_export.csv.
|
|
;;
|
|
;; Voraussetzungen:
|
|
;; - SSG_LIB geladen (OmniModulInsert.lsp, export.lsp)
|
|
;; - Umgebungsvariablen DXFMAKRO, DXFM_DATA gesetzt
|
|
;;
|
|
;; Aufruf in BricsCAD:
|
|
;; (load "tests/test_omniflo.lsp")
|
|
;; TEST_OMNIFLO_EXPORT
|
|
;; ============================================================
|
|
|
|
|
|
;; --- Omniflo Block non-interaktiv an gegebenem Punkt einfuegen ---
|
|
;; sivasnr-str : String der SivasNr (= Dateiname ohne .dxf)
|
|
;; insert-pt : Einfuegepunkt als Liste (x y z)
|
|
;; hoehe-str : Hoehe als String (fuer HOEHE-Attribut)
|
|
;; drehung-str : Drehung als String (fuer DREHUNG-Attribut)
|
|
(defun omni:test-insert (sivasnr-str insert-pt hoehe-str drehung-str /
|
|
dxf-pfad omniflo-pfad blockEnt angleDeg)
|
|
(setq omniflo-pfad (getenv "DXFM_OMNIFLO"))
|
|
(if (null omniflo-pfad)
|
|
(progn
|
|
(princ "\n[TEST_OMNIFLO] FEHLER: DXFM_OMNIFLO nicht gesetzt!")
|
|
nil
|
|
)
|
|
(progn
|
|
(setq dxf-pfad (strcat omniflo-pfad "/" sivasnr-str ".dxf"))
|
|
(if (not (findfile dxf-pfad))
|
|
(progn
|
|
(princ (strcat "\n[TEST_OMNIFLO] WARNUNG: DXF nicht gefunden: " dxf-pfad))
|
|
nil
|
|
)
|
|
(progn
|
|
(setq angleDeg (if drehung-str (atof drehung-str) 0.0))
|
|
(setvar "ATTREQ" 0)
|
|
(setvar "ATTDIA" 0)
|
|
(command "_.INSERT" dxf-pfad insert-pt "" "" angleDeg)
|
|
(setq blockEnt (entlast))
|
|
(if (and blockEnt
|
|
(= (cdr (assoc 0 (entget blockEnt))) "INSERT"))
|
|
(ssg-attrib-set-on blockEnt
|
|
(list (cons "HOEHE" (if hoehe-str hoehe-str "2000"))
|
|
(cons "DREHUNG" (if drehung-str drehung-str "0"))))
|
|
)
|
|
(princ (strcat "\n[TEST_OMNIFLO] OK: " sivasnr-str
|
|
" H=" (if hoehe-str hoehe-str "2000")))
|
|
blockEnt
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
;; ============================================================
|
|
;; C:TEST_OMNIFLO_EXPORT
|
|
;;
|
|
;; Liest omniflo_tests.json, fuegt alle Testbloecke ein,
|
|
;; exportiert CSV nach tests/output/.
|
|
;; ============================================================
|
|
(defun c:TEST_OMNIFLO_EXPORT (/ tests-json-pfad testfaelle
|
|
x-pos x-schritt
|
|
idx eintrag sivasnr hoehe-str drehung-str
|
|
insert-pt anzahl-ok anzahl-fehler
|
|
tests-out-dir old-results)
|
|
|
|
(if (not *lib-initialized*)
|
|
(init-bibliothek)
|
|
)
|
|
|
|
(ssg-start "TEST_OMNIFLO_EXPORT"
|
|
'(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
|
(setvar "OSMODE" 0)
|
|
(setvar "ATTREQ" 0)
|
|
(setvar "ATTDIA" 0)
|
|
|
|
;; Testdaten laden
|
|
(setq tests-json-pfad
|
|
(strcat (getenv "DXFMAKRO") "/tests/testdata/omniflo_tests.json"))
|
|
|
|
(if (not (findfile tests-json-pfad))
|
|
(progn
|
|
(princ (strcat "\n[TEST_OMNIFLO] FEHLER: Testdaten nicht gefunden: "
|
|
tests-json-pfad))
|
|
(ssg-end)
|
|
(princ)
|
|
)
|
|
(progn
|
|
(setq testfaelle (omni:load-json tests-json-pfad))
|
|
(if (null testfaelle)
|
|
(progn
|
|
(princ "\n[TEST_OMNIFLO] FEHLER: Testdaten konnten nicht geladen werden.")
|
|
(ssg-end)
|
|
(princ)
|
|
)
|
|
(progn
|
|
(princ "\n================================================================")
|
|
(princ "\n TEST_OMNIFLO_EXPORT")
|
|
(princ (strcat "\n " (itoa (length testfaelle)) " Testfaelle geladen"))
|
|
(princ "\n================================================================")
|
|
|
|
;; Alle Bloecke einfuegen
|
|
(setq x-pos 0.0)
|
|
(setq x-schritt 200.0)
|
|
(setq anzahl-ok 0)
|
|
(setq anzahl-fehler 0)
|
|
(setq idx 0)
|
|
|
|
(foreach eintrag testfaelle
|
|
(setq idx (1+ idx))
|
|
(setq sivasnr (omni:val eintrag "sivasnr"))
|
|
(setq hoehe-str (omni:val eintrag "hoehe"))
|
|
(if (null hoehe-str) (setq hoehe-str "2000"))
|
|
(if (numberp hoehe-str)
|
|
(setq hoehe-str (rtos hoehe-str 2 0))
|
|
)
|
|
(setq drehung-str (omni:val eintrag "drehung"))
|
|
(if (null drehung-str) (setq drehung-str "0"))
|
|
(if (numberp drehung-str)
|
|
(setq drehung-str (rtos drehung-str 2 1))
|
|
)
|
|
|
|
(setq insert-pt (list x-pos 0.0 (atof hoehe-str)))
|
|
|
|
(princ (strcat "\n " (itoa idx) ". "
|
|
(or (omni:val eintrag "description") sivasnr)
|
|
" -> (" (rtos x-pos 2 0) ", 0, " hoehe-str ")"))
|
|
|
|
(if (omni:test-insert sivasnr insert-pt hoehe-str drehung-str)
|
|
(setq anzahl-ok (1+ anzahl-ok))
|
|
(setq anzahl-fehler (1+ anzahl-fehler))
|
|
)
|
|
|
|
(setq x-pos (+ x-pos x-schritt))
|
|
)
|
|
|
|
;; Zusammenfassung
|
|
(princ "\n================================================================")
|
|
(princ (strcat "\n Eingefuegt: " (itoa anzahl-ok)
|
|
" OK, " (itoa anzahl-fehler) " Fehler"))
|
|
(princ "\n================================================================")
|
|
|
|
;; CSV-Export nach tests/output/
|
|
(setq tests-out-dir
|
|
(strcat (getenv "DXFMAKRO") "/tests/output"))
|
|
(vl-mkdir tests-out-dir)
|
|
|
|
(setq old-results (getenv "DXFM_RESULTS"))
|
|
(setenv "DXFM_RESULTS" tests-out-dir)
|
|
|
|
(princ "\n[TEST_OMNIFLO] Starte OMNI_EXPORT -> tests/output/omniflo_export.csv")
|
|
(c:OMNI_EXPORT)
|
|
|
|
(setenv "DXFM_RESULTS" (if old-results old-results ""))
|
|
|
|
(ssg-end)
|
|
|
|
(princ "\n================================================================")
|
|
(princ "\n TEST_OMNIFLO_EXPORT abgeschlossen.")
|
|
(princ (strcat "\n CSV: " tests-out-dir "/omniflo_export.csv"))
|
|
(princ "\n================================================================")
|
|
(princ)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|