;; ============================================================ ;; FÖRDERANLAGE GENERATOR für BricsCAD Pro ;; Version: 24.3 (Korrigierte Methodenzuordnung) ;; Befehl: FOERDERANLAGE ;; ============================================================ (vl-load-com) ;; ============================================================ ;; TEIL 1: GLOBALE EINSTELLUNGEN ;; ============================================================ (setq modul-pfad "C:/Users/y.wang/Documents/BricsCAD/Library/Blocks/") (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq modelspace (vla-get-ModelSpace doc)) ;; ============================================================ ;; TEIL 2: FESTE MODUL-MASSE ;; ============================================================ (setq aus-dx 531.85) (setq aus-dy -496.11) (setq aus-dz -12.92) (setq ein-dx 468.94) (setq ein-dy -446.42) (setq ein-dz -167.89) (setq separator-laenge 300) (setq spannstation-laenge 500) (setq motorstation-laenge 500) (setq staustrecke-basis 1000) (setq FESTE_HORIZONTAL 1600) ;; ============================================================ ;; TEIL 3: BOGEN-MASSE (für X-Werte aus Tabelle) ;; ============================================================ (setq bogen-auf-unten '((3 399.73 0 0)(9 297.95 0 15.61)(12 296.52 0 23.34) (15 593.04 0 62.33)(24 583.13 0 100.09)(36 847.53 0 234.76) (48 1063.24 0 448.91)) ) (setq bogen-auf-oben '((3 391.46 0 0)(9 281.45 0 14.75)(12 275.96 0 21.72) (15 568.46 0 59.75)(24 546.87 0 93.37)(36 796.96 0 219.78) (48 1000.4 0 422.88)) ) (setq bogen-ab-oben '((9 389.31 0 -40.92)(12 284.23 0 -37.42)(15 389.31 0 -40.92) (24 552.27 0 -124.51)(36 796.35 0 -265.43)(48 732.51 0 -349.39)) ) (setq bogen-ab-unten '((9 397.54 0 -41.78)(12 296.52 0 -39.04)(15 493.38 0 -70.19) (24 580.27 0 -131.23)(36 838.65 0 -280.41)(48 787.08 0 -375.42)) ) ;; ============================================================ ;; TEIL 4: HILFSFUNKTIONEN ;; ============================================================ (defun punkt-differenz (p1 p2) (list (- (car p2) (car p1)) (- (cadr p2) (cadr p1)) (- (caddr p2) (caddr p1))) ) (defun get-bogen-mass (tabelle winkel) (setq result nil) (foreach item tabelle (if (= (car item) winkel) (setq result (cdr item)))) (if (null result) (setq result '(800 0 0))) result ) (defun get-bogen-mass-mit-abs (tabelle winkel) (setq result nil) (foreach item tabelle (if (= (car item) winkel) (setq result (list (cadr item) (caddr item) (abs (cadddr item)))))) (if (null result) (setq result '(800 0 0))) result ) (defun fmt (x) (if (and (numberp x) (not (equal x nil))) (rtos x 2 2) "---") ) ;; ============================================================ ;; ActiveX Block einfügen (返回对象) ;; ============================================================ (defun InsertBlock (name punkt skala-x) (setq insertionPoint (vlax-3D-point punkt)) (vla-InsertBlock modelspace insertionPoint name skala-x 1.0 1.0 0) ) ;; ============================================================ ;; 🔥 METHODE 1: Für rotierte Blöcke (Staustrecken, Separator, Spannstation, Motorstation) ;; X = berechnet aus Länge * cos(Winkel) ;; Z = aus BoundingBox ;; ============================================================ (defun get-block-endpoint-rotated (obj startpunkt winkel laenge) (setq rad (* winkel (/ pi 180.0))) (setq berechnete_dx (* laenge (cos rad))) (vla-GetBoundingBox obj 'minpt 'maxpt) (setq minpt (vlax-safearray->list minpt)) (setq maxpt (vlax-safearray->list maxpt)) (setq reale_dz (- (caddr maxpt) (caddr minpt))) (list (+ (car startpunkt) berechnete_dx) (cadr startpunkt) (+ (caddr startpunkt) reale_dz)) ) ;; ============================================================ ;; 🔥 METHODE 2: Für nicht-rotierte Blöcke (AUS_Element, EIN_Element) ;; X und Z aus BoundingBox (komplett aus Block-Geometrie) ;; ============================================================ (defun get-block-endpoint-nonrotated (obj startpunkt) (vla-GetBoundingBox obj 'minpt 'maxpt) (setq minpt (vlax-safearray->list minpt)) (setq maxpt (vlax-safearray->list maxpt)) (list (car maxpt) ;; X aus BBox (cadr startpunkt) ;; Y gleich (caddr maxpt)) ;; Z aus BBox ) ;; ============================================================ ;; 🔥 METHODE 3: Für Vertikalbögen ;; X aus Tabelle (vordefinierte Werte) ;; Z aus BoundingBox ;; ============================================================ (defun get-block-endpoint-bogen (obj startpunkt bogen-x) (vla-GetBoundingBox obj 'minpt 'maxpt) (setq minpt (vlax-safearray->list minpt)) (setq maxpt (vlax-safearray->list maxpt)) (setq reale_dz (- (caddr maxpt) (caddr minpt))) (list (+ (car startpunkt) bogen-x) ;; X aus Tabelle (cadr startpunkt) (+ (caddr startpunkt) reale_dz)) ;; Z aus BBox ) ;; ============================================================ ;; Rotation eines Objekts um die Y-Achse (korrigiert) ;; ============================================================ (defun Rotate3D-Y (obj punkt winkel) (setq rad (* winkel (/ pi 180.0))) (setq tx (car punkt) ty (cadr punkt) tz (caddr punkt)) (setq matrix (list (list (cos rad) 0 (sin rad) (- tx (* tx (cos rad)) (* tz (sin rad)))) (list 0 1 0 (- ty ty)) (list (- (sin rad)) 0 (cos rad) (- tz (* tx (sin rad)) (* tz (cos rad)))) (list 0 0 0 1) )) (vla-TransformBy obj (vlax-tmatrix matrix)) ) ;; ============================================================ ;; TEIL 5: WINKELBERECHNUNG (unverändert) ;; ============================================================ (defun berechne-alle-winkel (deltaL deltaH richtung / winkel-list ergebnis-liste A B cos3 sin3 bogen-x1 bogen-z1 bogen-x2 bogen-z2 abs-dz-AUS abs-dz-EIN L_GF L_VF cosα sinα nenner winkel mass1 mass2 gueltig) (setq abs-dz-AUS (abs aus-dz) abs-dz-EIN (abs ein-dz)) (setq winkel-list '(3 9 12 15 24 36 48) ergebnis-liste '()) (setq cos3 (cos (* 3 (/ pi 180.0))) sin3 (sin (* 3 (/ pi 180.0)))) (princ "\n\n=========================================\n BERECHNUNG FÜR ALLE WINKEL\n=========================================") (princ (strcat "\nΔL = " (rtos deltaL 2 2) " mm\nΔH = " (rtos deltaH 2 2) " mm\nRichtung: " richtung)) (foreach winkel winkel-list (if (= richtung "Auf") (setq mass1 (get-bogen-mass bogen-auf-unten winkel) mass2 (get-bogen-mass bogen-auf-oben winkel) bogen-z1 (caddr mass1) bogen-z2 (caddr mass2)) (setq mass1 (get-bogen-mass-mit-abs bogen-ab-oben winkel) mass2 (get-bogen-mass-mit-abs bogen-ab-unten winkel) bogen-z1 (caddr mass1) bogen-z2 (caddr mass2)) ) (setq bogen-x1 (car mass1) bogen-x2 (car mass2)) (setq cosα (cos (* winkel (/ pi 180.0))) sinα (sin (* winkel (/ pi 180.0)))) (setq A (- deltaL aus-dx ein-dx bogen-x1 bogen-x2 (* FESTE_HORIZONTAL cos3))) (setq B (- deltaH abs-dz-AUS abs-dz-EIN bogen-z1 bogen-z2 (* FESTE_HORIZONTAL sin3))) (setq nenner (- (* cos3 sinα) (* sin3 cosα))) (if (> (abs nenner) 0.0001) (progn (setq L_GF (/ (- (* A sinα) (* B cosα)) nenner)) (setq L_VF (/ (- (* B cos3) (* A sin3)) nenner)) (if (and (numberp L_GF) (numberp L_VF)) (progn (setq gueltig (and (>= L_GF 0) (>= L_VF 0))) (setq ergebnis-liste (cons (list winkel L_GF L_VF gueltig) ergebnis-liste)) ) (setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste)) ) ) (setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste)) ) ) (setq ergebnis-liste (reverse ergebnis-liste)) (princ "\n\n=================================================================================\n ERGEBNISTABELLE\n=================================================================================") (princ "\n Winkel L_GF (mm) L_VF (mm) Status\n=================================================================================") (setq best-winkel nil best-L_GF nil best-L_VF nil) (foreach item ergebnis-liste (setq winkel (car item) L_GF (cadr item) L_VF (caddr item) gueltig (cadddr item)) (if (and (numberp L_GF) (numberp L_VF)) (progn (princ (strcat "\n " (itoa winkel) "° " (fmt L_GF) " mm " (fmt L_VF) " mm ")) (if gueltig (progn (princ "✓ GÜLTIG") (if (and (null best-winkel) (>= L_GF 0) (>= L_VF 0)) (setq best-winkel winkel best-L_GF L_GF best-L_VF L_VF) ) ) (princ "✗ UNGÜLTIG") ) ) (princ (strcat "\n " (itoa winkel) "° --- --- ✗ FEHLER")) ) ) (princ "\n=================================================================================") (list best-winkel best-L_GF best-L_VF ergebnis-liste) ) ;; ============================================================ ;; TEIL 6: MODULE EINFÜGEN (mit korrigierter Methodenzuordnung) ;; ============================================================ (defun foerderanlage-einfuegen (deltaL deltaH richtung best-winkel L_GF 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...") (princ "\n=========================================") (princ (strcat "\nStartpunkt (AUS_Element Eingang): X=" (rtos (car aktueller-punkt) 2 2) ", Y=" (rtos (cadr aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ;; ========================================================== ;; 1. AUS_Element_links - Verwenden Sie die manuellen Werte ;; ========================================================== (princ "\n\n1/11: AUS_Element_links") (setq blockname (strcat modul-pfad "AUS_Element_links.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) ;; Verwenden Sie die manuellen Werte statt BoundingBox (setq aktueller-punkt (list (+ (car aktueller-punkt) aus-dx) (+ (cadr aktueller-punkt) aus-dy) (+ (caddr aktueller-punkt) aus-dz))) (princ (strcat "\n → AUS_Element Ausgang (manuell): X=" (rtos (car aktueller-punkt) 2 2) ", Y=" (rtos (cadr aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ "\n FEHLER: AUS_Element_links.dwg nicht gefunden.") ) ;; ========================================================== ;; 2. 1. GEFÄLLESTRECKE (L_GF1) (METHODE 1: rotiert, X per cos, Z per BBox) ;; ========================================================== (if (> L_GF1 0.1) (progn (princ (strcat "\n2/11: Staustrecke (3° nach unten, Länge=" (rtos L_GF1 2 2) " mm)")) (setq blockname (strcat modul-pfad "Staustrecke_SP_1000_mm.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt (/ L_GF1 1000.0))) (Rotate3D-Y block aktueller-punkt 3) (setq aktueller-punkt (get-block-endpoint-rotated block aktueller-punkt 3 L_GF1)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ (strcat "\n FEHLER: Blockdatei nicht gefunden: " blockname)) ) ) (princ "\n2/11: (übersprungen, L_GF1 = 0)") ) ;; ========================================================== ;; 3. SEPARATOR 1 (METHODE 1: rotiert, X per cos, Z per BBox) ;; ========================================================== (princ "\n3/11: Separator 300mm (3° nach unten)") (setq blockname (strcat modul-pfad "Staustrecke_Separator_SP_300_mm.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) (Rotate3D-Y block aktueller-punkt 3) (setq aktueller-punkt (get-block-endpoint-rotated block aktueller-punkt 3 separator-laenge)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ "\n FEHLER: Separator 1 Datei nicht gefunden.") ) ;; ========================================================== ;; 4. SPANNSTATION (METHODE 1: rotiert, X per cos, Z per BBox) ;; ========================================================== (princ "\n4/11: Spannstation 500mm (3° nach unten)") (setq blockname (strcat modul-pfad "Vario_Spannstation_SP_500mm.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) (Rotate3D-Y block aktueller-punkt 3) (setq aktueller-punkt (get-block-endpoint-rotated block aktueller-punkt 3 spannstation-laenge)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ "\n FEHLER: Spannstation Datei nicht gefunden.") ) ;; ========================================================== ;; 5. 1. VERTIKALBOGEN (METHODE 3: X aus Tabelle, Z aus BoundingBox) ;; ========================================================== (if (= richtung "Auf") (progn (princ (strcat "\n5/11: Vertikalbogen_Auf_" (itoa best-winkel) "_Unten")) (setq blockname (strcat modul-pfad "Vertikalbogen_Auf_" (itoa best-winkel) "_Unten.dwg")) (setq bogen-mass (get-bogen-mass bogen-auf-unten best-winkel)) ) (progn (princ (strcat "\n5/11: Vertikalbogen_Ab_" (itoa best-winkel) "_Oben")) (setq blockname (strcat modul-pfad "Vertikalbogen_Ab_" (itoa best-winkel) "_Oben.dwg")) (setq bogen-mass (get-bogen-mass-mit-abs bogen-ab-oben best-winkel)) ) ) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) ;; KEINE Rotation! Der Bogen ist bereits richtig ausgerichtet (setq bogen-x (car bogen-mass)) (setq aktueller-punkt (get-block-endpoint-bogen block aktueller-punkt bogen-x)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ (strcat "\n FEHLER: Bogen-Datei nicht gefunden: " blockname)) ) ;; ========================================================== ;; 6. VARIABLE STRECKE L_VF (METHODE 1: rotiert, X per cos, Z per BBox) ;; ========================================================== (if (> L_VF 0.1) (progn (if (= richtung "Auf") (progn (princ (strcat "\n6/11: Steigungsstrecke (" (itoa best-winkel) "° nach oben, Länge=" (rtos L_VF 2 2) " mm)")) (setq rot-winkel (- best-winkel)) ) (progn (princ (strcat "\n6/11: Gefällestrecke (" (itoa best-winkel) "° nach unten, Länge=" (rtos L_VF 2 2) " mm)")) (setq rot-winkel best-winkel) ) ) (setq blockname (strcat modul-pfad "Staustrecke_SP_1000_mm.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt (/ L_VF 1000.0))) (Rotate3D-Y block aktueller-punkt rot-winkel) (setq aktueller-punkt (get-block-endpoint-rotated block aktueller-punkt rot-winkel L_VF)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ (strcat "\n FEHLER: Blockdatei nicht gefunden: " blockname)) ) ) (princ "\n6/11: (L_VF = 0, übersprungen)") ) ;; ========================================================== ;; 7. 2. VERTIKALBOGEN (METHODE 3: X aus Tabelle, Z aus BoundingBox) ;; ========================================================== (if (= richtung "Auf") (progn (princ (strcat "\n7/11: Vertikalbogen_Auf_" (itoa best-winkel) "_Oben")) (setq blockname (strcat modul-pfad "Vertikalbogen_Auf_" (itoa best-winkel) "_Oben.dwg")) (setq bogen-mass (get-bogen-mass bogen-auf-oben best-winkel)) ) (progn (princ (strcat "\n7/11: Vertikalbogen_Ab_" (itoa best-winkel) "_Unten")) (setq blockname (strcat modul-pfad "Vertikalbogen_Ab_" (itoa best-winkel) "_Unten.dwg")) (setq bogen-mass (get-bogen-mass-mit-abs bogen-ab-unten best-winkel)) ) ) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) ;; KEINE Rotation! (setq bogen-x (car bogen-mass)) (setq aktueller-punkt (get-block-endpoint-bogen block aktueller-punkt bogen-x)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ (strcat "\n FEHLER: Bogen-Datei nicht gefunden: " blockname)) ) ;; ========================================================== ;; 8. MOTORSTATION (METHODE 1: rotiert, X per cos, Z per BBox) ;; ========================================================== (princ "\n8/11: Motorstation 500mm (3° nach unten)") (setq blockname (strcat modul-pfad "Vario_Motorstation_SP_500mm.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) (Rotate3D-Y block aktueller-punkt 3) (setq aktueller-punkt (get-block-endpoint-rotated block aktueller-punkt 3 motorstation-laenge)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ "\n FEHLER: Motorstation Datei nicht gefunden.") ) ;; ========================================================== ;; 9. 2. GEFÄLLESTRECKE (L_GF2) (METHODE 1: rotiert, X per cos, Z per BBox) ;; ========================================================== (if (> L_GF2 0.1) (progn (princ (strcat "\n9/11: Staustrecke (3° nach unten, Länge=" (rtos L_GF2 2 2) " mm)")) (setq blockname (strcat modul-pfad "Staustrecke_SP_1000_mm.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt (/ L_GF2 1000.0))) (Rotate3D-Y block aktueller-punkt 3) (setq aktueller-punkt (get-block-endpoint-rotated block aktueller-punkt 3 L_GF2)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ (strcat "\n FEHLER: Blockdatei nicht gefunden: " blockname)) ) ) (princ "\n9/11: (übersprungen, L_GF2 = 0)") ) ;; ========================================================== ;; 10. SEPARATOR 2 (METHODE 1: rotiert, X per cos, Z per BBox) ;; ========================================================== (princ "\n10/11: Separator 300mm (3° nach unten)") (setq blockname (strcat modul-pfad "Staustrecke_Separator_SP_300_mm.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) (Rotate3D-Y block aktueller-punkt 3) (setq aktueller-punkt (get-block-endpoint-rotated block aktueller-punkt 3 separator-laenge)) (princ (strcat "\n → Endpunkt: X=" (rtos (car aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ "\n FEHLER: Separator 2 Datei nicht gefunden.") ) ;; ========================================================== ;; 11. EIN_Element_links (METHODE 2: nicht rotiert, X und Z aus BoundingBox) ;; ========================================================== (princ "\n11/11: EIN_Element_links") (setq blockname (strcat modul-pfad "EIN_Element_links.dwg")) (if (findfile blockname) (progn (setq block (InsertBlock blockname aktueller-punkt 1.0)) (setq aktueller-punkt (get-block-endpoint-nonrotated block aktueller-punkt)) (princ (strcat "\n → EIN_Element Ausgang: X=" (rtos (car aktueller-punkt) 2 2) ", Y=" (rtos (cadr aktueller-punkt) 2 2) ", Z=" (rtos (caddr aktueller-punkt) 2 2))) ) (princ "\n FEHLER: EIN_Element_links Datei nicht gefunden.") ) (princ "\n\n=========================================") (princ "\n>>> FERTIG! Förderanlage erfolgreich erstellt! <<<") (princ "\n=========================================") ) ;; ============================================================ ;; TEIL 7: HAUPTFUNKTION ;; ============================================================ (defun c:FOERDERANLAGE ( / eingabe-modus startpunkt endpunkt differenz deltaL deltaH deltaY richtung ergebnis best-winkel L_GF L_VF ergebnis-liste antwort) (princ "\n=========================================") (princ "\n FÖRDERANLAGE GENERATOR v24.3") (princ "\n=========================================") (princ "\n\nEingabemodus wählen:") (princ "\n 1 - Punkte auswählen (in der Zeichnung)") (princ "\n 2 - Werte manuell eingeben") (setq antwort (getstring "\nIhre Wahl (1/2): ")) (cond ((= antwort "1") (setq eingabe-modus "Punkt")) ((= antwort "2") (setq eingabe-modus "Wert")) (t (setq eingabe-modus "Punkt") (princ "\nUngültige Eingabe, Modus 'Punkte auswählen'")) ) (if (= eingabe-modus "Punkt") (progn (princ "\n\n>>> MODUS: Punkte auswählen <<<") (princ "\nWählen Sie die Einfügepunkte der Elemente.\n") (setq startpunkt (getpoint "\n1. START-PUNKT (Eingang des AUS_Elements): ")) (if (null startpunkt) (progn (alert "Kein Startpunkt!") (exit))) (setq endpunkt (getpoint "\n2. END-PUNKT (Ausgang des EIN_Elements): ")) (if (null endpunkt) (progn (alert "Kein Endpunkt!") (exit))) (setq differenz (punkt-differenz startpunkt endpunkt)) (setq deltaL (abs (car differenz)) deltaY (cadr differenz) deltaH (caddr differenz)) (princ "\n\n=========================================") (princ (strcat "\nGemessene Werte (Distanz zwischen den Punkten):\n ΔL = " (rtos deltaL 2 2) " mm\n ΔH = " (rtos deltaH 2 2) " mm")) (if (> (abs deltaY) 50) (princ (strcat "\n ⚠ WARNUNG: Seitlicher Versatz ΔY = " (rtos deltaY 2 2) " mm!"))) (if (>= deltaH 0) (progn (setq richtung "Auf") (princ "\n\nFörderrichtung: AUF (nach oben)")) (progn (setq richtung "Ab") (setq deltaH (abs deltaH)) (princ "\n\nFörderrichtung: AB (nach unten)")) ) (setq startpunkt-fuer-einfuegen startpunkt) ) (progn (princ "\n\n>>> MODUS: Manuelle Werteingabe <<<") (setq deltaL (getreal "\nHorizontale Distanz ΔL (mm): ")) (if (null deltaL) (setq deltaL 15000)) (setq deltaH (getreal "\nHöhendifferenz |ΔH| (mm): ")) (if (null deltaH) (setq deltaH 3000)) (princ "\nFörderrichtung wählen:\n 1 - AUF (nach oben)\n 2 - AB (nach unten)") (setq antwort (getstring "\nIhre Wahl (1/2): ")) (if (= antwort "2") (setq richtung "Ab") (setq richtung "Auf")) (setq startpunkt-fuer-einfuegen (getpoint "\nStartpunkt für AUS_Element wählen: ")) (if (null startpunkt-fuer-einfuegen) (setq startpunkt-fuer-einfuegen '(0 0 0))) ) ) (setq ergebnis (berechne-alle-winkel deltaL deltaH richtung)) (setq best-winkel (car ergebnis) L_GF (cadr ergebnis) L_VF (caddr ergebnis)) (if (or (null best-winkel) (null L_GF) (null L_VF) (<= L_GF 0) (<= L_VF 0)) (progn (alert "Kein passender Winkel gefunden!\n\nBitte andere Werte versuchen.") (exit)) ) (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=========================================") (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) (princ "\nVorgang abgebrochen.") ) (princ) ) ;; ============================================================ ;; START ;; ============================================================ (princ "\n=========================================") (princ "\n>>> FÖRDERANLAGE GENERATOR v24.3 geladen <<<") (princ "\n>>> Befehl: FOERDERANLAGE <<<") (princ "\n>>> Methodenzuordnung: <<<") (princ "\n>>> - Rotierte Blöcke: X per Berechnung, Z per BoundingBox <<<") (princ "\n>>> - Nicht-rotierte Blöcke: X und Z per BoundingBox <<<") (princ "\n>>> - Vertikalbögen: X aus Tabelle, Z per BoundingBox <<<") (princ "\n=========================================") (princ)