Maße von AUS und EIN schleuselement festgestellt

This commit is contained in:
2026-05-28 15:50:18 +02:00
parent 765bf1f975
commit 5f179da36f
+86 -30
View File
@@ -85,6 +85,7 @@
(defun extract-ks-from-block (block-obj / sub-entities sub-obj ks-results (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 ks-ref inner-entities inner-obj origin x-end y-end z-end
line-start line-end axis line-len line-vec) line-start line-end axis line-len line-vec)
(dbgf "extract-ks-from-block")
(setq ks-results '()) (setq ks-results '())
;; Block explodieren ;; Block explodieren
@@ -139,21 +140,22 @@
(foreach sub-obj sub-entities (foreach sub-obj sub-entities
(if (not (vlax-erased-p sub-obj)) (vla-Delete sub-obj)) (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!) ;; TEIL 5: PUNKTE-AUSWAHL MIT Z-HÖHE (HIER EINFÜGEN!)
;; ============================================================ ;; ============================================================
(defun get-3d-point-from-object (msg / ent obj pt variant) (defun get-3d-point-from-object (msg / ent obj pt variant)
(dbgf "get-3d-point-from-object")
(princ msg) (princ msg)
(princ "\n >> Objekt (Block) wählen: ") (princ "\n >> Objekt (Block) wählen: ")
(setq ent (entsel)) (setq ent (entsel))
(if ent (if ent
(progn (progn
(setq obj (vlax-ename->vla-object (car ent))) (setq obj (vlax-ename->vla-object (car ent)))
;; Versuche Block-Einfügepunkt zu bekommen ;; Versuche Block-Einfügepunkt zu bekommen
(if (vlax-property-available-p obj 'InsertionPoint) (if (vlax-property-available-p obj 'InsertionPoint)
(progn (progn
@@ -165,21 +167,20 @@
"\n X = " (rtos (car pt) 2 3) "\n X = " (rtos (car pt) 2 3)
"\n Y = " (rtos (cadr pt) 2 3) "\n Y = " (rtos (cadr pt) 2 3)
"\n Z = " (rtos (caddr pt) 2 3))) "\n Z = " (rtos (caddr pt) 2 3)))
pt
) )
(progn (progn
;; Kein Block: Verwende angeklickten Punkt ;; Kein Block: Verwende angeklickten Punkt
(setq pt (cadr ent)) (setq pt (cadr ent))
(princ (strcat "\n ✓ Punkt auf Objekt: Z = " (rtos (caddr pt) 2 2) " mm")) (princ (strcat "\n ✓ Punkt auf Objekt: Z = " (rtos (caddr pt) 2 2) " mm"))
pt
) )
) )
) )
(progn (progn
(princ "\n Kein Objekt gewählt.") (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 ;; Lädt die Bibliothek und extrahiert ALLE benötigten Maße
(defun init-bibliothek ( / temp-obj bogen-winkel) (defun init-bibliothek ( / temp-obj bogen-winkel)
(dbgf "init-bibliothek")
(if *lib-initialized* (if *lib-initialized*
(progn (progn
(princ "\n Bibliothek bereits initialisiert.") (princ "\n Bibliothek bereits initialisiert.")
t (dbgreturn t)
) )
(progn (progn
(princ "\n Lade Blockdefinitionen aus Bibliothek...") (princ "\n Lade Blockdefinitionen aus Bibliothek...")
@@ -207,8 +209,58 @@
(princ " OK.") (princ " OK.")
;; === AUS_ELEMENT Maße extrahieren === ;; === AUS_ELEMENT Maße extrahieren ===
(princ "\n Extrahiere AUS_Element Maße...") (princ "\n Extrahiere AUS_Element Masse...")
;; ... (wie gehabt) ... (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 === ;; === Bogen-Maße extrahieren - ALLE Winkel ===
(princ "\n Extrahiere Bogen-Maße...") (princ "\n Extrahiere Bogen-Maße...")
@@ -284,8 +336,10 @@
(setq bogen-auf (reverse bogen-auf)) (setq bogen-auf (reverse bogen-auf))
(setq bogen-ab (reverse bogen-ab)) (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 ;; Bogen-Maß aus Tabelle holen
(defun get-bogen-mass (tabelle winkel) (defun get-bogen-mass (tabelle winkel)
(dbgf "get-bogen-mass")
(setq result nil) (setq result nil)
(foreach item tabelle (foreach item tabelle
(if (= (car item) winkel) (if (= (car item) winkel)
(setq result (cdr item)) (setq result (cdr item))
) )
) )
(if result (if (null result)
result (princ (strcat "\n FEHLER: Winkel " (itoa winkel) " nicht in Bogen-Tabelle!"))
(progn
(princ (strcat "\n FEHLER: Winkel " (itoa winkel) " nicht in Bogen-Tabelle!"))
nil
)
) )
(dbgreturn result)
) )
;; ============================================================ ;; ============================================================
;; TEIL 7: BLOCK EINFÜGEN MIT KS_EIN AUSRICHTUNG ;; 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) (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))) (if (or (null einfuegepunkt) (not (listp einfuegepunkt)))
(progn (progn
(princ (strcat "\n FEHLER: Ungültiger Einfügepunkt für '" blockname "'")) (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) (princ (strcat "\n KS_AUS: X=" (rtos (car ausgang) 2 2)
", Z=" (rtos (caddr ausgang) 2 2))) ", Z=" (rtos (caddr ausgang) 2 2)))
ausgang (dbgreturn ausgang)
) )
(progn (progn
(princ "\n WARNUNG: KS_EIN/KS_AUS nicht gefunden!") (princ "\n WARNUNG: KS_EIN/KS_AUS nicht gefunden!")
einfuegepunkt (dbgreturn einfuegepunkt)
) )
) )
) )
@@ -369,12 +422,13 @@
;; ============================================================ ;; ============================================================
;; TEIL 8: WINKELBERECHNUNG (NUR MIT BIBLIOTHEKSDATEN) ;; 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 winkel-list ergebnis-liste A B cos3 sin3
bogen-x1 bogen-z1 bogen-x2 bogen-z2 bogen-x1 bogen-z1 bogen-x2 bogen-z2
abs-dz-AUS abs-dz-EIN L_GF L_VF cosα sinα nenner abs-dz-AUS abs-dz-EIN L_GF L_VF cosα sinα nenner
winkel mass1 mass2 gueltig) winkel mass1 mass2 gueltig)
(dbgf "berechne-alle-winkel")
;; Bibliothek muss initialisiert sein ;; Bibliothek muss initialisiert sein
(if (not *lib-initialized*) (if (not *lib-initialized*)
(progn (progn
@@ -488,14 +542,15 @@
(princ (strcat "\n\n>>> Empfohlener Winkel: " (itoa best-winkel) (princ (strcat "\n\n>>> Empfohlener Winkel: " (itoa best-winkel)
"° (kleinster verfuegbarer Winkel)")) "° (kleinster verfuegbarer Winkel)"))
(princ "\n\n>>> KEIN passender Winkel gefunden!")) (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) ;; TEIL 9: MODULE EINFÜGEN (GESAMTE ANLAGE)
;; ============================================================ ;; ============================================================
(defun foerderanlage-einfuegen (deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt) (defun foerderanlage-einfuegen (deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt)
(dbgf "foerderanlage-einfuegen")
(setq aktueller-punkt startpunkt) (setq aktueller-punkt startpunkt)
;; Bibliothek initialisieren ;; Bibliothek initialisieren
@@ -636,8 +691,8 @@
;; 11. EIN_Element ;; 11. EIN_Element
(princ "\n\n11/11: _3D_ES_90_links") (princ "\n\n11/11: _3D_ES_90_links")
(setq endpunkt (insert-block-by-ks "_3D_ES_90_links" aktueller-punkt)) (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 deltaL deltaH deltaX deltaY richtung ergebnis
best-winkel L_GF L_GF1 L_GF2 L_VF ergebnis-liste best-winkel L_GF L_GF1 L_GF2 L_VF ergebnis-liste
antwort verteilung-modus) antwort verteilung-modus)
(dbgf "c:FOERDERANLAGE")
(princ "\n=========================================") (princ "\n=========================================")
(princ "\n FÖRDERANLAGE GENERATOR v25.0") (princ "\n FÖRDERANLAGE GENERATOR v25.0")
(princ "\n (Komplett bibliotheksbasiert)") (princ "\n (Komplett bibliotheksbasiert)")
@@ -795,8 +851,8 @@
(foerderanlage-einfuegen deltaL deltaH richtung best-winkel L_GF1 L_GF2 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 "\nVorgang abgebrochen.")
) )
(princ) (dbgreturn nil)
) )
;; ============================================================ ;; ============================================================
;; START ;; START