diff --git a/Lisp/tests.lsp b/Lisp/tests.lsp index 8ca70fe..f477324 100644 --- a/Lisp/tests.lsp +++ b/Lisp/tests.lsp @@ -480,3 +480,163 @@ (princ "\n\n>>> FOERDERTEST abgeschlossen (12 Foerderer)! <<<") (princ) ) + +;; ============================================================ +;; TEST_KSEINAUS - KS_EIN/KS_AUS Ausrichtungstest +;; +;; Fuegt alle Vario-Bloecke in 3 Gruppen ein, jeweils 2 Reihen: +;; Gruppe 1: Stationaere Elemente (AUS, EIN, Separator, Umlenk, Motor) +;; Gruppe 2: Alle Boegen aufwaerts (in Z verschoben) +;; Gruppe 3: Alle Boegen abwaerts (in Z verschoben) +;; +;; Pro Gruppe: +;; Reihe A: nach KS_EIN ausgerichtet (KS_EIN X/Y = Referenz-X/Y) +;; Reihe B: nach KS_AUS ausgerichtet (KS_AUS X/Y = Referenz-X/Y) +;; Luecke von 400mm zwischen den Reihen +;; ============================================================ + +;; Hilfsfunktion: Eine Liste von Bloecken in 2 Reihen aufreihen +;; x-start: X-Position der Gruppe +;; y-start: Y-Startposition (wird zurueckgegeben als naechster freier Y) +;; z-offset: Z-Verschiebung (fuer Boegen) +;; Rueckgabe: naechste freie Y-Position +(defun ks-test-reihe (namen x-start y-start z-offset y-abstand y-luecke / + bname block-obj ks-data ks-ein ks-aus + insert-pt offset-vec y-pos idx) + + ;; --- Reihe A: nach KS_EIN --- + (princ "\n Reihe KS_EIN:") + (setq y-pos y-start) + (setq idx 0) + + (foreach bname namen + (setq idx (1+ idx)) + (setq insert-pt (list x-start y-pos z-offset)) + (setq block-obj (vla-InsertBlock modelspace + (vlax-3D-point insert-pt) + bname 1.0 1.0 1.0 0)) + (setq ks-data (extract-ks-from-block block-obj)) + (setq ks-ein (cadr (assoc "KS_EIN" ks-data))) + + (if ks-ein + (progn + (setq offset-vec (list (- x-start (car (car ks-ein))) + (- y-pos (cadr (car ks-ein))) + (- z-offset (caddr (car ks-ein))))) + (vla-Move block-obj + (vlax-3D-point '(0 0 0)) + (vlax-3D-point offset-vec)) + (princ (strcat "\n " (itoa idx) ". " bname " OK")) + ) + (princ (strcat "\n " (itoa idx) ". " bname " WARNUNG: KS_EIN fehlt!")) + ) + (setq y-pos (- y-pos y-abstand)) + ) + + ;; --- Luecke --- + (setq y-pos (- y-pos y-luecke)) + + ;; --- Reihe B: nach KS_AUS --- + (princ "\n Reihe KS_AUS:") + (setq idx 0) + + (foreach bname namen + (setq idx (1+ idx)) + (setq insert-pt (list x-start y-pos z-offset)) + (setq block-obj (vla-InsertBlock modelspace + (vlax-3D-point insert-pt) + bname 1.0 1.0 1.0 0)) + (setq ks-data (extract-ks-from-block block-obj)) + (setq ks-aus (cadr (assoc "KS_AUS" ks-data))) + + (if ks-aus + (progn + (setq offset-vec (list (- x-start (car (car ks-aus))) + (- y-pos (cadr (car ks-aus))) + (- z-offset (caddr (car ks-aus))))) + (vla-Move block-obj + (vlax-3D-point '(0 0 0)) + (vlax-3D-point offset-vec)) + (princ (strcat "\n " (itoa idx) ". " bname " OK")) + ) + (princ (strcat "\n " (itoa idx) ". " bname " WARNUNG: KS_AUS fehlt!")) + ) + (setq y-pos (- y-pos y-abstand)) + ) + + ;; Naechste freie Y-Position zurueckgeben + y-pos +) + +(defun c:TEST_KSEINAUS ( / stationen boegen-auf-liste boegen-ab-liste + bname y-pos y-abstand y-luecke z-bogen) + + ;; Bibliothek initialisieren + (if (not *lib-initialized*) + (init-bibliothek) + ) + + (ssg-start "TEST_KSEINAUS" '(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA"))) + (setvar "OSMODE" 0) + (setvar "ATTREQ" 0) + (setvar "ATTDIA" 0) + + (setq y-abstand 200) + (setq y-luecke 400) + (setq z-bogen 2500) + + ;; Gruppe 1: Stationaere Elemente + (setq stationen (list + "_3D_AS_90_links" + "Staustrecke_Separator_SP_300_mm" + "Vario_Umlenkstation_500mm" + "Vario_Motorstation_500mm" + "_3D_ES_90_links" + )) + + ;; Gruppe 2+3: Boegen sammeln + (setq boegen-auf-liste '()) + (setq boegen-ab-liste '()) + (foreach w '(3 6 9 12 15 18 21 27 33 39 45 51) + (setq bname (strcat "Vario_Bogen_auf_" (itoa w) grad-zeichen)) + (if (tblsearch "BLOCK" bname) + (setq boegen-auf-liste (append boegen-auf-liste (list bname))) + ) + (setq bname (strcat "Vario_Bogen_ab_" (itoa w) grad-zeichen)) + (if (tblsearch "BLOCK" bname) + (setq boegen-ab-liste (append boegen-ab-liste (list bname))) + ) + ) + + (princ "\n================================================================") + (princ "\n TEST_KSEINAUS - KS-Ausrichtungstest") + (princ (strcat "\n Stationen: " (itoa (length stationen)))) + (princ (strcat "\n Boegen auf: " (itoa (length boegen-auf-liste)))) + (princ (strcat "\n Boegen ab: " (itoa (length boegen-ab-liste)))) + (princ (strcat "\n Z-Offset Boegen: " (rtos z-bogen 2 0) " mm")) + (princ "\n================================================================") + + ;; Gruppe 1: Stationaere Elemente bei X=0, Z=0 + (princ "\n\n GRUPPE 1: Stationaere Elemente (Z=0)") + (setq y-pos (ks-test-reihe stationen 0 0 0 y-abstand y-luecke)) + + ;; Gruppe 2: Boegen aufwaerts bei X=3000, Z=z-bogen + (princ "\n\n GRUPPE 2: Boegen aufwaerts (Z=" ) + (princ (strcat (rtos z-bogen 2 0) ")")) + (setq y-pos (ks-test-reihe boegen-auf-liste 3000 0 z-bogen y-abstand y-luecke)) + + ;; Gruppe 3: Boegen abwaerts bei X=6000, Z=z-bogen + (princ "\n\n GRUPPE 3: Boegen abwaerts (Z=") + (princ (strcat (rtos z-bogen 2 0) ")")) + (setq y-pos (ks-test-reihe boegen-ab-liste 6000 0 z-bogen y-abstand y-luecke)) + + (ssg-end) + + (princ "\n\n================================================================") + (princ "\n TEST_KSEINAUS abgeschlossen") + (princ "\n X=0: Stationen (KS_EIN + KS_AUS)") + (princ "\n X=3000: Boegen auf (KS_EIN + KS_AUS)") + (princ "\n X=6000: Boegen ab (KS_EIN + KS_AUS)") + (princ "\n================================================================") + (princ) +)