;; ============================================================ ;; test_hundm05.lsp - Integrationstest: baut die 5 VarioFoerderer-Linienzuege ;; der Anlage HundM (Kreisel mit fuenf daran haengenden Ketten) aus ihrer ;; SPEC nach. ;; ;; Datenquelle: tests/testdata/hundm05.json - die Ketten im Spec-Format ;; (Domaenenwerte statt Menue-Codes, siehe Lisp/vf_spec.lsp und ;; doc/variofoerderer.md Abschnitt 8b). Erzeugt aus den echten ;; Aufzeichnungen mit ;; python lib/vf_spec_export.py tests/testdata/hm_recformat.json \ ;; tests/testdata/hundm05.json ;; und damit nachweislich dasselbe Journal wie die Vorlage ;; (Rundlauf-Beweis in tests/test_vf_spec.py). Die Datei ist die Stelle, an ;; der weitere Ketten der Anlage nachgetragen werden. ;; ;; Dieser Test hat KEINE eigene Bau-Logik: er ruft vsp-bau-datei aus ;; Lisp/vf_spec.lsp - denselben Weg, den auch der Befehl VF_SPEC_BAU nimmt. ;; Es gibt also genau einen Code-Pfad, der aus einer Spec Geometrie erzeugt. ;; ;; ABGRENZUNG zu TEST_HM_RECFORMAT (tests/test_hm_recformat.lsp): dort werden ;; dieselben Ketten aus dem ROHEN Journal der Kundenzeichnung gebaut. Das ist ;; der Regressionstest fuer das Aufzeichnungsformat (bleibt ein bestehender ;; VF_n-Block abspielbar - Doppelklick-Edit, 2D/3D-Konvertierung?) und ;; deshalb dort auf "disabled": true, um nicht zweimal dieselbe Geometrie zu ;; bauen. ;; ;; Voraussetzung: ;; - SSG_LIB geladen (VarioFoerderer inkl. vf_linienzug + vf_spec, ;; Gefaellestrecke, ssg_core, ssg_dbg) ;; - Umgebungsvariable DXFMAKRO gesetzt ;; ;; Speichert (via SSG_RUN_ALL_TESTS bei "save":"dxf"): ;; tests/output/hundm05_tests.dxf ;; tests/output/hundm05_results.json (via hundm05:export-results) ;; ;; Aufruf in BricsCAD: ;; (load (strcat (getenv "DXFMAKRO") "/tests/test_hundm05.lsp")) ;; TEST_HUNDM05 ; in der aktuellen Dimension (ssg-ils-dim-aktuell) ;; TEST_HUNDM05_2D ; erzwungen 2D ;; TEST_HUNDM05_3D ; erzwungen 3D ;; ============================================================ (if (not (boundp '*hundm05-records*)) (setq *hundm05-records* nil)) (defun hundm05:spec-datei () (strcat (getenv "DXFMAKRO") "/tests/testdata/hundm05.json")) ;; ============================================================ ;; Testlauf ;; ============================================================ (defun c:TEST_HUNDM05 ( / datei) (setq datei (hundm05:spec-datei)) (princ "\n\n================================================================") (princ "\n TEST_HUNDM05 - 5 Linienzuege der Anlage HundM (aus der Spec)") (princ (strcat "\n " datei)) (princ "\n================================================================") (cond ((null (car (atoms-family 1 '("VSP-BAU-DATEI")))) (princ "\n[TEST_HUNDM05] FEHLER: vf_spec.lsp nicht geladen" " (VarioFoerderer laden).") (setq *hundm05-records* nil)) ((null (findfile datei)) (princ (strcat "\n[TEST_HUNDM05] FEHLER: " datei " nicht gefunden!")) (setq *hundm05-records* nil)) (T (setq *hundm05-records* (vsp-bau-datei datei)))) (princ)) ;; ============================================================ ;; Dieselbe Anlage in einer bestimmten Dimension bauen ;; ============================================================ ;; Die Spec ist dimensionsfrei - sie beschreibt die Eingaben, mit denen die ;; Ketten gebaut wurden. Ob daraus flache 2D-Symbole oder 3D-Modelle werden, ;; entscheidet allein die Blockvariante (_2D/_3D), die ssg-ils-dim-aktuell ;; aufloest. Unsere Bibliothek hat beide, also laesst sich dieselbe Anlage ;; ohne Datenaenderung in 2D ODER 3D aufbauen. ;; *vsp-dim-override* wird von vsp-bau-aus-spec JE KETTE angewandt (der ;; Abbruch-Handler in vf-linienzug-modus setzt *ssg-ils-dim* zurueck). (defun hundm05:mit-dimension (dim / alt) (setq alt (if (boundp '*vsp-dim-override*) *vsp-dim-override*)) (setq *vsp-dim-override* dim) (vl-catch-all-apply 'c:TEST_HUNDM05 '()) (setq *vsp-dim-override* alt) (princ)) (defun c:TEST_HUNDM05_2D () (hundm05:mit-dimension "2D")) (defun c:TEST_HUNDM05_3D () (hundm05:mit-dimension "3D")) ;; ============================================================ ;; Ergebnis-Export (Konvention :export-results fuer test_run_all.lsp) ;; ============================================================ ;; Geschrieben wird hier und nicht in c:TEST_HUNDM05, damit der Testrunner ;; das Zielverzeichnis bestimmt (er uebergibt tests/output). (defun hundm05:export-results (out-dir / pfad) (if (null *hundm05-records*) (princ "\n Keine HundM05-Ergebnisse vorhanden.") (progn (vl-mkdir out-dir) (setq pfad (strcat out-dir "/hundm05_results.json")) (vsp-results-schreiben *hundm05-records* pfad))) (princ)) (princ "\nTEST_HUNDM05 geladen. Aufruf: TEST_HUNDM05 (bzw. _2D / _3D)") (princ)