From 1d62b20b0a2a11572b05dcf579fad9a9ec160079 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Wed, 6 May 2026 15:38:05 +0200 Subject: [PATCH] =?UTF-8?q?Funktionen=20zum=20Auslesen=20von=20KS=5FAUS=20?= =?UTF-8?q?und=20KS=5FEIN=20impl.=20Die=20L=C3=A4nge=20der=20F=C3=B6rderst?= =?UTF-8?q?recke=20kann=20nun=20variabel=20eingestellt=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lisp/VarioFoerderer.lsp | 408 +++++++++++++++++++++++++++++++++++----- 1 file changed, 358 insertions(+), 50 deletions(-) diff --git a/Lisp/VarioFoerderer.lsp b/Lisp/VarioFoerderer.lsp index 28e6511..6ba50d5 100644 --- a/Lisp/VarioFoerderer.lsp +++ b/Lisp/VarioFoerderer.lsp @@ -12,8 +12,17 @@ (if (getenv "DXFM_BLOCKS") (setq modul-pfad (strcat (getenv "DXFM_BLOCKS") "/")) (progn - (alert "Umgebungsvariable DXFM_BLOCKS nicht gesetzt! Verwende Standardpfad.") - (setq modul-pfad "c:/10-Develop/gitrepos/dxfmakros/Blocks/") + (alert "Umgebungsvariable DXFM_BLOCKS nicht gesetzt!\nBitte zuerst bin\\setenv.bat ausfuehren.") + (exit) + ) +) + +;; Pfad zur Koordinaten-Bibliothek (neue Bogen-Bloecke mit KS_EIN/KS_AUS) +(if (getenv "DXFM_DATA") + (setq koordinaten-lib (strcat (getenv "DXFM_DATA") "/block_libraries/ils_vario_koordinaten.dwg")) + (progn + (alert "Umgebungsvariable DXFM_DATA nicht gesetzt!\nBitte zuerst bin\\setenv.bat ausfuehren.") + (exit) ) ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) @@ -158,6 +167,211 @@ (if (and (numberp x) (not (equal x nil))) (rtos x 2 2) "---") ) +;; ============================================================ +;; TEIL 4b: KS_EIN / KS_AUS KOORDINATEN EXTRAHIEREN +;; ============================================================ + +;; Grad-Zeichen fuer Blocknamen +(setq grad-zeichen (chr 176)) ;; ° + +;; Berechne die Laenge eines 3D-Vektors +(defun vec-length (v) + (sqrt (+ (* (car v) (car v)) (* (cadr v) (cadr v)) (* (caddr v) (caddr v)))) +) + +;; Bestimme die Achse anhand der Linienlaenge innerhalb eines KS-Blocks +;; KS_EIN: X=1, Y=2, Z=3 +;; KS_AUS: X=100, Y=2, Z=3 +(defun ks-line-axis (len) + (cond + ((< (abs (- len 1.0)) 0.5) "X") + ((< (abs (- len 100.0)) 0.5) "X") + ((< (abs (- len 2.0)) 0.5) "Y") + ((< (abs (- len 3.0)) 0.5) "Z") + (t nil) + ) +) + +;; Importiere Blockdefinitionen aus der Koordinaten-Bibliothek. +;; Fuegt die DWG temporaer ein (dadurch werden alle Blockdefs geladen) +;; und loescht die Einfuegung sofort wieder. +(defun load-koordinaten-lib ( / temp-obj) + (if (findfile koordinaten-lib) + (progn + (princ "\n Lade Blockdefinitionen aus Koordinaten-Bibliothek...") + (setq temp-obj (vla-InsertBlock modelspace + (vlax-3D-point '(0 0 0)) + koordinaten-lib + 1.0 1.0 1.0 0)) + (vla-Delete temp-obj) + (princ " OK.") + t + ) + (progn + (princ (strcat "\n FEHLER: Koordinaten-Bibliothek nicht gefunden: " koordinaten-lib)) + nil + ) + ) +) + +;; Extrahiere KS_EIN und KS_AUS Koordinaten aus einem eingefuegten Bogen-Block. +;; Der Block wird temporaer explodiert, die KS-Daten ausgelesen, +;; alle explodierten Entities wieder geloescht. Der Original-Block bleibt erhalten. +;; Gibt eine assoc-Liste zurueck: +;; (("KS_EIN" (origin x-end y-end z-end x-dir y-dir z-dir)) +;; ("KS_AUS" (origin x-end y-end z-end x-dir y-dir z-dir))) +;; origin/x-end/y-end/z-end = 3D-Punkte (Weltkoordinaten) +;; x-dir/y-dir/z-dir = normalisierte Richtungsvektoren des KOS +(defun extract-ks-from-block (block-obj / sub-entities sub-obj + ks-results ks-ref inner-entities inner-obj + line-start line-end line-vec line-len axis + origin x-end y-end z-end) + (setq ks-results '()) + + ;; Block explodieren (erzeugt neue Entities, Original bleibt) + (setq sub-entities (vlax-invoke block-obj 'Explode)) + + (foreach sub-obj sub-entities + (if (and (not (vlax-erased-p sub-obj)) + (= (vla-get-ObjectName sub-obj) "AcDbBlockReference") + (or (= (vla-get-Name sub-obj) "KS_EIN") + (= (vla-get-Name sub-obj) "KS_AUS"))) + (progn + (setq ks-ref (vla-get-Name sub-obj)) + + ;; KS-Block exploden um die Linien mit Weltkoordinaten zu lesen + (setq inner-entities (vlax-invoke sub-obj 'Explode)) + (setq origin nil x-end nil y-end nil z-end nil) + + (foreach inner-obj inner-entities + (if (and (not (vlax-erased-p inner-obj)) + (= (vla-get-ObjectName inner-obj) "AcDbLine")) + (progn + (setq line-start (vlax-safearray->list (vlax-variant-value (vla-get-StartPoint inner-obj)))) + (setq line-end (vlax-safearray->list (vlax-variant-value (vla-get-EndPoint inner-obj)))) + (setq line-vec (list (- (car line-end) (car line-start)) + (- (cadr line-end) (cadr line-start)) + (- (caddr line-end) (caddr line-start)))) + (setq line-len (vec-length line-vec)) + (setq axis (ks-line-axis line-len)) + ;; Ursprung = gemeinsamer Startpunkt aller Linien + (if (null origin) (setq origin line-start)) + (cond + ((= axis "X") (setq x-end line-end)) + ((= axis "Y") (setq y-end line-end)) + ((= axis "Z") (setq z-end line-end)) + ) + ) + ) + ;; Temporaere innere Objekte loeschen + (if (not (vlax-erased-p inner-obj)) (vla-Delete inner-obj)) + ) + + ;; Richtungsvektoren berechnen (Endpunkt - Ursprung, normalisiert) + (setq x-dir nil y-dir nil z-dir nil) + (if (and origin x-end) + (progn + (setq x-dir (list (- (car x-end) (car origin)) + (- (cadr x-end) (cadr origin)) + (- (caddr x-end) (caddr origin)))) + (setq vlen (vec-length x-dir)) + (if (> vlen 0.001) + (setq x-dir (list (/ (car x-dir) vlen) (/ (cadr x-dir) vlen) (/ (caddr x-dir) vlen))) + ) + ) + ) + (if (and origin y-end) + (progn + (setq y-dir (list (- (car y-end) (car origin)) + (- (cadr y-end) (cadr origin)) + (- (caddr y-end) (caddr origin)))) + (setq vlen (vec-length y-dir)) + (if (> vlen 0.001) + (setq y-dir (list (/ (car y-dir) vlen) (/ (cadr y-dir) vlen) (/ (caddr y-dir) vlen))) + ) + ) + ) + (if (and origin z-end) + (progn + (setq z-dir (list (- (car z-end) (car origin)) + (- (cadr z-end) (cadr origin)) + (- (caddr z-end) (caddr origin)))) + (setq vlen (vec-length z-dir)) + (if (> vlen 0.001) + (setq z-dir (list (/ (car z-dir) vlen) (/ (cadr z-dir) vlen) (/ (caddr z-dir) vlen))) + ) + ) + ) + + ;; Ergebnis: (name (origin x-end y-end z-end x-dir y-dir z-dir)) + (setq ks-results (cons + (list ks-ref (list origin x-end y-end z-end x-dir y-dir z-dir)) + ks-results)) + + (princ (strcat "\n " ks-ref " Koordinatensystem:")) + (if origin (princ (strcat "\n Ursprung: (" + (rtos (car origin) 2 4) ", " (rtos (cadr origin) 2 4) ", " (rtos (caddr origin) 2 4) ")"))) + (if x-end (princ (strcat "\n X-Ende: (" + (rtos (car x-end) 2 4) ", " (rtos (cadr x-end) 2 4) ", " (rtos (caddr x-end) 2 4) ")"))) + (if y-end (princ (strcat "\n Y-Ende: (" + (rtos (car y-end) 2 4) ", " (rtos (cadr y-end) 2 4) ", " (rtos (caddr y-end) 2 4) ")"))) + (if z-end (princ (strcat "\n Z-Ende: (" + (rtos (car z-end) 2 4) ", " (rtos (cadr z-end) 2 4) ", " (rtos (caddr z-end) 2 4) ")"))) + (if x-dir (princ (strcat "\n X-Richtung: (" + (rtos (car x-dir) 2 6) ", " (rtos (cadr x-dir) 2 6) ", " (rtos (caddr x-dir) 2 6) ")"))) + (if y-dir (princ (strcat "\n Y-Richtung: (" + (rtos (car y-dir) 2 6) ", " (rtos (cadr y-dir) 2 6) ", " (rtos (caddr y-dir) 2 6) ")"))) + (if z-dir (princ (strcat "\n Z-Richtung: (" + (rtos (car z-dir) 2 6) ", " (rtos (cadr z-dir) 2 6) ", " (rtos (caddr z-dir) 2 6) ")"))) + ) + ) + ) + + ;; Alle explodierten Objekte loeschen + (foreach sub-obj sub-entities + (if (not (vlax-erased-p sub-obj)) (vla-Delete sub-obj)) + ) + + ks-results +) + +;; Bogen-Block aus der Koordinaten-Bibliothek einfuegen und KS-Daten extrahieren. +;; bogen-name = Blockname ohne Grad-Zeichen (z.B. "Vario_Bogen_auf_3") +;; einfuege-punkt = Punkt an dem der Block eingefuegt wird +;; Gibt die KS-Ergebnisse zurueck. Der Block bleibt eingefuegt. +(defun insert-bogen-from-lib (bogen-name einfuege-punkt / full-name block-obj ks-data) + (setq full-name (strcat bogen-name grad-zeichen)) + (princ (strcat "\n Fuege Block '" full-name "' ein...")) + + ;; Blockdefinitionen laden (falls noch nicht geschehen) + (if (not (tblsearch "BLOCK" full-name)) + (load-koordinaten-lib) + ) + + ;; Block per Name einfuegen + (if (tblsearch "BLOCK" full-name) + (progn + (setq block-obj (vla-InsertBlock modelspace + (vlax-3D-point einfuege-punkt) + full-name + 1.0 1.0 1.0 0)) + (princ (strcat "\n Einfuegen bei: X=" (rtos (car einfuege-punkt) 2 2) + ", Y=" (rtos (cadr einfuege-punkt) 2 2) + ", Z=" (rtos (caddr einfuege-punkt) 2 2))) + + ;; KS-Koordinaten extrahieren + (princ "\n Extrahiere Koordinatensysteme...") + (setq ks-data (extract-ks-from-block block-obj)) + + ks-data + ) + (progn + (princ (strcat "\n FEHLER: Block '" full-name "' nicht in Bibliothek gefunden!")) + nil + ) + ) +) + ;; ============================================================ ;; ActiveX Block einfügen (返回对象) ;; ============================================================ @@ -279,11 +493,9 @@ ;; TEIL 6: MODULE EINFÜGEN (mit korrigierter Methodenzuordnung) ;; ============================================================ (defun foerderanlage-einfuegen (deltaL deltaH richtung - best-winkel L_GF L_VF startpunkt) + best-winkel L_GF1 L_GF2 L_VF startpunkt) (setq aktueller-punkt startpunkt) - (setq L_GF1 (/ L_GF 2)) - (setq L_GF2 (/ L_GF 2)) (princ "\n\n=========================================") (princ "\nBeginne mit dem Einfügen der Module...") @@ -380,35 +592,63 @@ ) ;; ========================================================== - ;; 5. 1. VERTIKALBOGEN (X und Z aus Tabelle) + ;; 5. 1. VERTIKALBOGEN (aus Koordinaten-Bibliothek oder Fallback) ;; ========================================================== (if (= richtung "Auf") (progn - (princ (strcat "\n\n5/11: Vertikalbogen_Auf_" (itoa best-winkel) "_Unten")) - (setq blockname (strcat modul-pfad "Vertikalbogen_Auf_" (itoa best-winkel) "_Unten.dwg")) + (setq bogen-lib-name (strcat "Vario_Bogen_auf_" (itoa best-winkel))) + (princ (strcat "\n\n5/11: " bogen-lib-name)) (setq bogen-mass (get-bogen-mass bogen-auf-unten best-winkel)) ) (progn - (princ (strcat "\n\n5/11: Vertikalbogen_Ab_" (itoa best-winkel) "_Oben")) - (setq blockname (strcat modul-pfad "Vertikalbogen_Ab_" (itoa best-winkel) "_Oben.dwg")) + (setq bogen-lib-name (strcat "Vario_Bogen_ab_" (itoa best-winkel))) + (princ (strcat "\n\n5/11: " bogen-lib-name)) (setq bogen-mass (get-bogen-mass bogen-ab-oben best-winkel)) ) ) - (if (findfile blockname) + ;; Versuche Block aus Koordinaten-Bibliothek zu laden + (setq ks-data-1 (insert-bogen-from-lib bogen-lib-name aktueller-punkt)) + (if ks-data-1 (progn - (princ (strcat "\n Einfuegen bei: X=" (rtos (car aktueller-punkt) 2 2) - ", Y=" (rtos (cadr aktueller-punkt) 2 2) - ", Z=" (rtos (caddr aktueller-punkt) 2 2))) - (setq block (InsertBlock blockname aktueller-punkt 1.0)) - (setq bogen-x (car bogen-mass)) - (setq bogen-dz (caddr bogen-mass)) - (princ (strcat "\n Tabelle: dx=" (rtos bogen-x 2 2) ", dz=" (rtos bogen-dz 2 2))) - (setq aktueller-punkt (get-block-endpoint-bogen aktueller-punkt bogen-x bogen-dz)) - (princ (strcat "\n Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) - ", Y=" (rtos (cadr aktueller-punkt) 2 2) - ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + ;; Endpunkt aus KS_AUS Ursprung ableiten + (setq ks-aus-1 (cadr (assoc "KS_AUS" ks-data-1))) + (if ks-aus-1 + (progn + (setq aktueller-punkt (car ks-aus-1)) + (princ (strcat "\n Endpunkt (aus KS_AUS): X=" (rtos (car aktueller-punkt) 2 2) + ", Y=" (rtos (cadr aktueller-punkt) 2 2) + ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + ) + (progn + (princ "\n WARNUNG: KS_AUS nicht gefunden, verwende Tabellenwerte") + (setq bogen-x (car bogen-mass) bogen-dz (caddr bogen-mass)) + (setq aktueller-punkt (get-block-endpoint-bogen aktueller-punkt bogen-x bogen-dz)) + ) + ) + ) + (progn + ;; Fallback: alte Einzelbloecke verwenden + (princ "\n Fallback: Verwende Einzel-DWG-Bloecke") + (if (= richtung "Auf") + (setq blockname (strcat modul-pfad "Vertikalbogen_Auf_" (itoa best-winkel) "_Unten.dwg")) + (setq blockname (strcat modul-pfad "Vertikalbogen_Ab_" (itoa best-winkel) "_Oben.dwg")) + ) + (if (findfile blockname) + (progn + (princ (strcat "\n Einfuegen bei: X=" (rtos (car aktueller-punkt) 2 2) + ", Y=" (rtos (cadr aktueller-punkt) 2 2) + ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + (setq block (InsertBlock blockname aktueller-punkt 1.0)) + (setq bogen-x (car bogen-mass) bogen-dz (caddr bogen-mass)) + (princ (strcat "\n Tabelle: dx=" (rtos bogen-x 2 2) ", dz=" (rtos bogen-dz 2 2))) + (setq aktueller-punkt (get-block-endpoint-bogen aktueller-punkt bogen-x bogen-dz)) + (princ (strcat "\n Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) + ", Y=" (rtos (cadr aktueller-punkt) 2 2) + ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + ) + (princ (strcat "\n FEHLER: Bogen-Datei nicht gefunden: " blockname)) + ) ) - (princ (strcat "\n FEHLER: Bogen-Datei nicht gefunden: " blockname)) ) ;; ========================================================== @@ -446,35 +686,63 @@ ) ;; ========================================================== - ;; 7. 2. VERTIKALBOGEN (X und Z aus Tabelle) + ;; 7. 2. VERTIKALBOGEN (aus Koordinaten-Bibliothek oder Fallback) ;; ========================================================== (if (= richtung "Auf") (progn - (princ (strcat "\n\n7/11: Vertikalbogen_Auf_" (itoa best-winkel) "_Oben")) - (setq blockname (strcat modul-pfad "Vertikalbogen_Auf_" (itoa best-winkel) "_Oben.dwg")) + (setq bogen-lib-name (strcat "Vario_Bogen_auf_" (itoa best-winkel))) + (princ (strcat "\n\n7/11: " bogen-lib-name " (2. Bogen)")) (setq bogen-mass (get-bogen-mass bogen-auf-oben best-winkel)) ) (progn - (princ (strcat "\n\n7/11: Vertikalbogen_Ab_" (itoa best-winkel) "_Unten")) - (setq blockname (strcat modul-pfad "Vertikalbogen_Ab_" (itoa best-winkel) "_Unten.dwg")) + (setq bogen-lib-name (strcat "Vario_Bogen_ab_" (itoa best-winkel))) + (princ (strcat "\n\n7/11: " bogen-lib-name " (2. Bogen)")) (setq bogen-mass (get-bogen-mass bogen-ab-unten best-winkel)) ) ) - (if (findfile blockname) + ;; Versuche Block aus Koordinaten-Bibliothek zu laden + (setq ks-data-2 (insert-bogen-from-lib bogen-lib-name aktueller-punkt)) + (if ks-data-2 (progn - (princ (strcat "\n Einfuegen bei: X=" (rtos (car aktueller-punkt) 2 2) - ", Y=" (rtos (cadr aktueller-punkt) 2 2) - ", Z=" (rtos (caddr aktueller-punkt) 2 2))) - (setq block (InsertBlock blockname aktueller-punkt 1.0)) - (setq bogen-x (car bogen-mass)) - (setq bogen-dz (caddr bogen-mass)) - (princ (strcat "\n Tabelle: dx=" (rtos bogen-x 2 2) ", dz=" (rtos bogen-dz 2 2))) - (setq aktueller-punkt (get-block-endpoint-bogen aktueller-punkt bogen-x bogen-dz)) - (princ (strcat "\n Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) - ", Y=" (rtos (cadr aktueller-punkt) 2 2) - ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + ;; Endpunkt aus KS_AUS Ursprung ableiten + (setq ks-aus-2 (cadr (assoc "KS_AUS" ks-data-2))) + (if ks-aus-2 + (progn + (setq aktueller-punkt (car ks-aus-2)) + (princ (strcat "\n Endpunkt (aus KS_AUS): X=" (rtos (car aktueller-punkt) 2 2) + ", Y=" (rtos (cadr aktueller-punkt) 2 2) + ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + ) + (progn + (princ "\n WARNUNG: KS_AUS nicht gefunden, verwende Tabellenwerte") + (setq bogen-x (car bogen-mass) bogen-dz (caddr bogen-mass)) + (setq aktueller-punkt (get-block-endpoint-bogen aktueller-punkt bogen-x bogen-dz)) + ) + ) + ) + (progn + ;; Fallback: alte Einzelbloecke verwenden + (princ "\n Fallback: Verwende Einzel-DWG-Bloecke") + (if (= richtung "Auf") + (setq blockname (strcat modul-pfad "Vertikalbogen_Auf_" (itoa best-winkel) "_Oben.dwg")) + (setq blockname (strcat modul-pfad "Vertikalbogen_Ab_" (itoa best-winkel) "_Unten.dwg")) + ) + (if (findfile blockname) + (progn + (princ (strcat "\n Einfuegen bei: X=" (rtos (car aktueller-punkt) 2 2) + ", Y=" (rtos (cadr aktueller-punkt) 2 2) + ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + (setq block (InsertBlock blockname aktueller-punkt 1.0)) + (setq bogen-x (car bogen-mass) bogen-dz (caddr bogen-mass)) + (princ (strcat "\n Tabelle: dx=" (rtos bogen-x 2 2) ", dz=" (rtos bogen-dz 2 2))) + (setq aktueller-punkt (get-block-endpoint-bogen aktueller-punkt bogen-x bogen-dz)) + (princ (strcat "\n Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) + ", Y=" (rtos (cadr aktueller-punkt) 2 2) + ", Z=" (rtos (caddr aktueller-punkt) 2 2))) + ) + (princ (strcat "\n FEHLER: Bogen-Datei nicht gefunden: " blockname)) + ) ) - (princ (strcat "\n FEHLER: Bogen-Datei nicht gefunden: " blockname)) ) ;; ========================================================== @@ -574,7 +842,8 @@ ;; ============================================================ (defun c:FOERDERANLAGE ( / eingabe-modus startpunkt endpunkt differenz deltaL deltaH deltaY richtung ergebnis - best-winkel L_GF L_VF ergebnis-liste antwort) + best-winkel L_GF L_GF1 L_GF2 L_VF + ergebnis-liste antwort verteilung-modus) (princ "\n=========================================") (princ "\n FÖRDERANLAGE GENERATOR v24.3") (princ "\n=========================================") @@ -627,13 +896,51 @@ (princ "\n\n=========================================") (princ (strcat "\n>>> Empfohlener Winkel: " (itoa best-winkel) "°")) (princ (strcat "\n>>> L_GF (gesamt): " (rtos L_GF 2 2) " mm")) - (princ (strcat "\n>>> L_GF1 = L_GF2 = " (rtos (/ L_GF 2) 2 2) " mm")) (princ (strcat "\n>>> L_VF: " (rtos L_VF 2 2) " mm")) (princ "\n=========================================") + + ;; Verteilung der Gefaellestrecken (L_GF1 vorne, L_GF2 hinten) + (princ "\n\nVerteilung der Gefaellestrecken (vorne/hinten):") + (princ "\n 1 - Gleichmaessig (L_GF1 = L_GF2 = L_GF/2)") + (princ "\n 2 - Vorne Minimum, hinten Rest") + (princ "\n 3 - Hinten Minimum, vorne Rest") + (princ "\n 4 - Eigene Werte eingeben") + (setq verteilung-modus (getstring "\nIhre Wahl (1/2/3/4) [1]: ")) + (if (= verteilung-modus "") (setq verteilung-modus "1")) + (cond + ((= verteilung-modus "1") + (setq L_GF1 (/ L_GF 2.0)) + (setq L_GF2 (/ L_GF 2.0)) + ) + ((= verteilung-modus "2") + (setq L_GF1 staustrecke-basis) + (setq L_GF2 (- L_GF staustrecke-basis)) + (if (< L_GF2 0) (setq L_GF2 0)) + ) + ((= verteilung-modus "3") + (setq L_GF2 staustrecke-basis) + (setq L_GF1 (- L_GF staustrecke-basis)) + (if (< L_GF1 0) (setq L_GF1 0)) + ) + ((= verteilung-modus "4") + (setq L_GF1 (getreal (strcat "\nL_GF1 vorne (mm) [" (rtos (/ L_GF 2.0) 2 2) "]: "))) + (if (null L_GF1) (setq L_GF1 (/ L_GF 2.0))) + (setq L_GF2 (- L_GF L_GF1)) + (if (< L_GF2 0) (setq L_GF2 0)) + (princ (strcat "\n L_GF2 hinten (berechnet): " (rtos L_GF2 2 2) " mm")) + ) + (t + (setq L_GF1 (/ L_GF 2.0)) + (setq L_GF2 (/ L_GF 2.0)) + ) + ) + (princ (strcat "\n\n>>> L_GF1 (vorne): " (rtos L_GF1 2 2) " mm")) + (princ (strcat "\n>>> L_GF2 (hinten): " (rtos L_GF2 2 2) " mm")) + (princ "\n\nMöchten Sie die Förderanlage einfügen?\n 1 - Ja, Module einfügen\n 2 - Nein, abbrechen") (setq antwort (getstring "\nIhre Wahl (1/2): ")) (if (= antwort "1") - (foerderanlage-einfuegen deltaL deltaH richtung best-winkel L_GF L_VF startpunkt-fuer-einfuegen) + (foerderanlage-einfuegen deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt-fuer-einfuegen) (princ "\nVorgang abgebrochen.") ) (princ) @@ -641,13 +948,13 @@ ;; ============================================================ ;; TEIL 8: FOERDERTEST - Automatischer Test ohne Benutzereingabe -;; Distanz=6000, Hoehe=2000, Richtung=Auf, Start=0/0/0 +;; Distanz=8000, Hoehe=3000, Richtung=Auf, Start=0/0/0 ;; Speichert als datum-HHMM.dxf ;; ============================================================ (defun c:FOERDERTEST ( / deltaL deltaH richtung ergebnis best-winkel L_GF L_VF dateiname) - (setq deltaL 6000) - (setq deltaH 2000) + (setq deltaL 8000) + (setq deltaH 3000) (setq richtung "Auf") (princ "\n=========================================") @@ -666,11 +973,12 @@ (progn (princ (strcat "\n\nGewaehlter Winkel: " (itoa best-winkel) " Grad")) (princ (strcat "\nL_GF (gesamt): " (rtos L_GF 2 2) " mm")) - (princ (strcat "\nL_GF1 = L_GF2 = " (rtos (/ L_GF 2) 2 2) " mm")) + (princ (strcat "\nL_GF1 (vorne): " (rtos (/ L_GF 2.0) 2 2) " mm")) + (princ (strcat "\nL_GF2 (hinten): " (rtos (/ L_GF 2.0) 2 2) " mm")) (princ (strcat "\nL_VF: " (rtos L_VF 2 2) " mm")) - ;; Foerderanlage einfuegen bei 0,0,0 - (foerderanlage-einfuegen deltaL deltaH richtung best-winkel L_GF L_VF '(0 0 0)) + ;; Foerderanlage einfuegen bei 0,0,0 (gleichmaessige Verteilung) + (foerderanlage-einfuegen deltaL deltaH richtung best-winkel (/ L_GF 2.0) (/ L_GF 2.0) L_VF '(0 0 0)) ;; Dateiname: datum-HHMM.dxf (if (getenv "DXFM_RESULTS")