From 5f179da36f0bd7c643f2357f0a619ade95d01085 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Thu, 28 May 2026 15:50:18 +0200 Subject: [PATCH] =?UTF-8?q?Ma=C3=9Fe=20von=20AUS=20und=20EIN=20schleuselem?= =?UTF-8?q?ent=20festgestellt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lisp/VarioFoerderer.lsp | 116 +++++++++++++++++++++++++++++----------- 1 file changed, 86 insertions(+), 30 deletions(-) diff --git a/Lisp/VarioFoerderer.lsp b/Lisp/VarioFoerderer.lsp index 204c8e5..a426d1a 100644 --- a/Lisp/VarioFoerderer.lsp +++ b/Lisp/VarioFoerderer.lsp @@ -85,6 +85,7 @@ (defun extract-ks-from-block (block-obj / sub-entities sub-obj ks-results ks-ref inner-entities inner-obj origin x-end y-end z-end line-start line-end axis line-len line-vec) + (dbgf "extract-ks-from-block") (setq ks-results '()) ;; Block explodieren @@ -139,21 +140,22 @@ (foreach sub-obj sub-entities (if (not (vlax-erased-p sub-obj)) (vla-Delete sub-obj)) ) - - ks-results + + (dbgreturn ks-results) ) ;; ============================================================ ;; TEIL 5: PUNKTE-AUSWAHL MIT Z-HÖHE (HIER EINFÜGEN!) ;; ============================================================ (defun get-3d-point-from-object (msg / ent obj pt variant) + (dbgf "get-3d-point-from-object") (princ msg) (princ "\n >> Objekt (Block) wählen: ") (setq ent (entsel)) (if ent (progn (setq obj (vlax-ename->vla-object (car ent))) - + ;; Versuche Block-Einfügepunkt zu bekommen (if (vlax-property-available-p obj 'InsertionPoint) (progn @@ -165,21 +167,20 @@ "\n X = " (rtos (car pt) 2 3) "\n Y = " (rtos (cadr pt) 2 3) "\n Z = " (rtos (caddr pt) 2 3))) - pt ) (progn ;; Kein Block: Verwende angeklickten Punkt (setq pt (cadr ent)) (princ (strcat "\n ✓ Punkt auf Objekt: Z = " (rtos (caddr pt) 2 2) " mm")) - pt ) ) ) (progn (princ "\n Kein Objekt gewählt.") - nil + (setq pt nil) ) ) + (dbgreturn pt) ) ;; ============================================================ @@ -188,11 +189,12 @@ ;; Lädt die Bibliothek und extrahiert ALLE benötigten Maße (defun init-bibliothek ( / temp-obj bogen-winkel) - + (dbgf "init-bibliothek") + (if *lib-initialized* (progn (princ "\n Bibliothek bereits initialisiert.") - t + (dbgreturn t) ) (progn (princ "\n Lade Blockdefinitionen aus Bibliothek...") @@ -207,8 +209,58 @@ (princ " OK.") ;; === AUS_ELEMENT Maße extrahieren === - (princ "\n Extrahiere AUS_Element Maße...") - ;; ... (wie gehabt) ... + (princ "\n Extrahiere AUS_Element Masse...") + (if (tblsearch "BLOCK" "_3D_AS_90_links") + (progn + (setq temp-obj (vla-InsertBlock modelspace + (vlax-3D-point '(0 0 0)) + "_3D_AS_90_links" 1.0 1.0 1.0 0)) + (setq ks-data (extract-ks-from-block temp-obj)) + (vla-Delete temp-obj) + (setq ks-ein-pos nil ks-aus-pos nil) + (foreach item ks-data + (if (= (car item) "KS_EIN") (setq ks-ein-pos (cadr item))) + (if (= (car item) "KS_AUS") (setq ks-aus-pos (cadr item))) + ) + (if (and ks-ein-pos ks-aus-pos) + (progn + (setq aus-dx (- (caaddr ks-aus-pos) (caadr ks-ein-pos))) + (setq aus-dy (- (cadr (caddr ks-aus-pos)) (cadr (cadr ks-ein-pos)))) + (setq aus-dz (- (caddr (caddr ks-aus-pos)) (caddr (cadr ks-ein-pos)))) + (princ (strcat "\n AUS_Element: dx=" (rtos aus-dx 2 0) ", dz=" (rtos aus-dz 2 0))) + ) + (princ "\n FEHLER: KS_EIN/KS_AUS fehlt im AUS_Element!") + ) + ) + (princ "\n FEHLER: Block _3D_AS_90_links nicht gefunden!") + ) + + ;; === EIN_ELEMENT Maße extrahieren === + (princ "\n Extrahiere EIN_Element Masse...") + (if (tblsearch "BLOCK" "_3D_ES_90_links") + (progn + (setq temp-obj (vla-InsertBlock modelspace + (vlax-3D-point '(0 0 0)) + "_3D_ES_90_links" 1.0 1.0 1.0 0)) + (setq ks-data (extract-ks-from-block temp-obj)) + (vla-Delete temp-obj) + (setq ks-ein-pos nil ks-aus-pos nil) + (foreach item ks-data + (if (= (car item) "KS_EIN") (setq ks-ein-pos (cadr item))) + (if (= (car item) "KS_AUS") (setq ks-aus-pos (cadr item))) + ) + (if (and ks-ein-pos ks-aus-pos) + (progn + (setq ein-dx (- (caaddr ks-aus-pos) (caadr ks-ein-pos))) + (setq ein-dy (- (cadr (caddr ks-aus-pos)) (cadr (cadr ks-ein-pos)))) + (setq ein-dz (- (caddr (caddr ks-aus-pos)) (caddr (cadr ks-ein-pos)))) + (princ (strcat "\n EIN_Element: dx=" (rtos ein-dx 2 0) ", dz=" (rtos ein-dz 2 0))) + ) + (princ "\n FEHLER: KS_EIN/KS_AUS fehlt im EIN_Element!") + ) + ) + (princ "\n FEHLER: Block _3D_ES_90_links nicht gefunden!") + ) ;; === Bogen-Maße extrahieren - ALLE Winkel === (princ "\n Extrahiere Bogen-Maße...") @@ -284,8 +336,10 @@ (setq bogen-auf (reverse bogen-auf)) (setq bogen-ab (reverse bogen-ab)) - - ;; ... restliche Initialisierung ... + + (setq *lib-initialized* t) + (princ "\n Bibliothek erfolgreich initialisiert.") + (dbgreturn t) ) ) ) @@ -294,26 +348,25 @@ ;; Bogen-Maß aus Tabelle holen (defun get-bogen-mass (tabelle winkel) + (dbgf "get-bogen-mass") (setq result nil) (foreach item tabelle (if (= (car item) winkel) (setq result (cdr item)) ) ) - (if result - result - (progn - (princ (strcat "\n FEHLER: Winkel " (itoa winkel) " nicht in Bogen-Tabelle!")) - nil - ) + (if (null result) + (princ (strcat "\n FEHLER: Winkel " (itoa winkel) " nicht in Bogen-Tabelle!")) ) + (dbgreturn result) ) ;; ============================================================ ;; TEIL 7: BLOCK EINFÜGEN MIT KS_EIN AUSRICHTUNG ;; ============================================================ (defun insert-block-by-ks (blockname einfuegepunkt / block-obj ks-data ks-ein ks-aus offset ausgang) - + (dbgf "insert-block-by-ks") + (if (or (null einfuegepunkt) (not (listp einfuegepunkt))) (progn (princ (strcat "\n FEHLER: Ungültiger Einfügepunkt für '" blockname "'")) @@ -357,11 +410,11 @@ (princ (strcat "\n KS_AUS: X=" (rtos (car ausgang) 2 2) ", Z=" (rtos (caddr ausgang) 2 2))) - ausgang + (dbgreturn ausgang) ) (progn (princ "\n WARNUNG: KS_EIN/KS_AUS nicht gefunden!") - einfuegepunkt + (dbgreturn einfuegepunkt) ) ) ) @@ -369,12 +422,13 @@ ;; ============================================================ ;; TEIL 8: WINKELBERECHNUNG (NUR MIT BIBLIOTHEKSDATEN) ;; ============================================================ -(defun berechne-alle-winkel (deltaL deltaH richtung / +(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) - + (dbgf "berechne-alle-winkel") + ;; Bibliothek muss initialisiert sein (if (not *lib-initialized*) (progn @@ -488,14 +542,15 @@ (princ (strcat "\n\n>>> Empfohlener Winkel: " (itoa best-winkel) "° (kleinster verfuegbarer Winkel)")) (princ "\n\n>>> KEIN passender Winkel gefunden!")) - - (list best-winkel best-L_GF best-L_VF ergebnis-liste) + + (dbgreturn (list best-winkel best-L_GF best-L_VF ergebnis-liste)) ) ;; ============================================================ ;; TEIL 9: MODULE EINFÜGEN (GESAMTE ANLAGE) ;; ============================================================ (defun foerderanlage-einfuegen (deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt) + (dbgf "foerderanlage-einfuegen") (setq aktueller-punkt startpunkt) ;; Bibliothek initialisieren @@ -636,8 +691,8 @@ ;; 11. EIN_Element (princ "\n\n11/11: _3D_ES_90_links") (setq endpunkt (insert-block-by-ks "_3D_ES_90_links" aktueller-punkt)) - - endpunkt + + (dbgreturn endpunkt) ) ;; ============================================================ @@ -647,7 +702,8 @@ deltaL deltaH deltaX deltaY richtung ergebnis best-winkel L_GF L_GF1 L_GF2 L_VF ergebnis-liste antwort verteilung-modus) - + (dbgf "c:FOERDERANLAGE") + (princ "\n=========================================") (princ "\n FÖRDERANLAGE GENERATOR v25.0") (princ "\n (Komplett bibliotheksbasiert)") @@ -795,8 +851,8 @@ (foerderanlage-einfuegen deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt-fuer-einfuegen) (princ "\nVorgang abgebrochen.") ) - - (princ) + + (dbgreturn nil) ) ;; ============================================================ ;; START