diff --git a/Lisp/EtageVarioFoerderer.lsp b/Lisp/EtageVarioFoerderer.lsp index 67f9a32..a758023 100644 --- a/Lisp/EtageVarioFoerderer.lsp +++ b/Lisp/EtageVarioFoerderer.lsp @@ -3,7 +3,20 @@ ;; Laedt vf_core.lsp (Plugin-Dispatcher-Architektur) ;; c:ETAGEVARIOFOERDERER ist in vf_core.lsp als Alias definiert. ;; ============================================================ -(if (getenv "DXFM_LISP") - (load (strcat (getenv "DXFM_LISP") "/vf_core.lsp")) - (alert "DXFM_LISP nicht gesetzt! Bitte zuerst bin\\setenv.bat ausfuehren.") +;; vf_core.lsp laden: 1) DXFM_LISP, 2) *ssg-lisp-pfad* (vom MNL gesetzt), 3) findfile +(setq *vf-core-datei* + (cond + ((getenv "DXFM_LISP") + (strcat (vl-string-translate "\\" "/" (getenv "DXFM_LISP")) "/vf_core.lsp")) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + (findfile (strcat *ssg-lisp-pfad* "/vf_core.lsp"))) + (strcat *ssg-lisp-pfad* "/vf_core.lsp")) + ((findfile "vf_core.lsp") + (findfile "vf_core.lsp")) + (t nil) + ) +) +(if *vf-core-datei* + (load *vf-core-datei*) + (princ "\n[EtageVarioFoerderer] WARNUNG: vf_core.lsp nicht gefunden - Befehle nicht verfuegbar.") ) diff --git a/Lisp/Gefaellestrecke.lsp b/Lisp/Gefaellestrecke.lsp index 137159d..36986b8 100644 --- a/Lisp/Gefaellestrecke.lsp +++ b/Lisp/Gefaellestrecke.lsp @@ -9,7 +9,7 @@ ;; Vor jedem Bogen wird automatisch ein Separator eingefuegt. ;; Gefaellewinkel wird aus deltaH und Geometrie berechnet. ;; -;; Verfuegbare Gefaellebogen-Bloecke (aus ils_library.dxf): +;; Verfuegbare Gefaellebogen-Bloecke (aus data/ils/3D/ als einzelne DWG): ;; Gefaellebogen_links_30(Grad)_R500 (30 Grad Linkskurve) ;; Gefaellebogen_links_60(Grad)_R500 (60 Grad Linkskurve) ;; Gefaellebogen_links_90(Grad)_R500 (90 Grad Linkskurve) @@ -47,6 +47,21 @@ (if (null *ein-ks-ein-local*) (setq *ein-ks-ein-local* nil)) (if (null *lib-initialized*) (setq *lib-initialized* nil)) +;; Block-Pfad: DXFM_BLOCKS → Heuristik (3D-Bloecke benoetigt) +(if (null block-pfad) + (setq block-pfad + (cond + ((getenv "DXFM_BLOCKS") + (strcat (vl-string-translate "\\" "/" (getenv "DXFM_BLOCKS")) "/")) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + (vl-string-search "/Lisp" *ssg-lisp-pfad*)) + (strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*)) + "/data/ils/3D/")) + (t nil) + ) + ) +) + ;; ============================================================ ;; TEIL 2: KERN-FUNKTIONEN (Guard: nicht doppelt definieren) ;; ============================================================ @@ -83,32 +98,23 @@ (- (caddr p2) (caddr p1)))) ) -;; --- Block aus ils_library.dxf laden --- +;; --- Block als einzelne DWG-Datei aus block-pfad laden --- (if (null (car (atoms-family 1 '("ENSURE-BLOCK-LOADED")))) - (defun ensure-block-loaded (blockname / lib-datei temp-obj) + (defun ensure-block-loaded (blockname / block-datei temp-obj) (if (not (tblsearch "BLOCK" blockname)) (progn - (if (not *gf-lib-geladen*) + (setq block-datei (strcat block-pfad blockname ".dwg")) + (if (findfile block-datei) (progn - (setq lib-datei - (strcat (vl-string-translate "\\" "/" - (getenv "DXFM_DATA")) - "/block_libraries/ils_library.dxf")) - (if (findfile lib-datei) - (progn - (princ "\n Lade ils_library.dxf ...") - (setq temp-obj - (vla-InsertBlock modelspace - (vlax-3D-point '(0 0 0)) - lib-datei 1.0 1.0 1.0 0)) - (vla-Delete temp-obj) - (setq *gf-lib-geladen* t) - (princ " OK") - ) - (princ (strcat "\n WARNUNG: Bibliothek nicht gefunden: " - lib-datei)) - ) + (princ (strcat "\n Lade Block: " blockname " ...")) + (setq temp-obj + (vla-InsertBlock modelspace + (vlax-3D-point '(0 0 0)) + block-datei 1.0 1.0 1.0 0)) + (vla-Delete temp-obj) + (princ " OK") ) + (princ (strcat "\n FEHLER: Block-Datei nicht gefunden: " block-datei)) ) ) ) @@ -345,73 +351,55 @@ ) ) -;; --- Bibliothek initialisieren (auch AS/ES-Massen wenn moeglich) --- +;; --- Bibliothek initialisieren: AS/ES-Masse aus einzelnen DWG-Dateien extrahieren --- (if (null (car (atoms-family 1 '("INIT-BIBLIOTHEK")))) - (defun init-bibliothek ( / lib-datei temp-obj ks-data ks-ein ks-aus) + (defun init-bibliothek ( / temp-obj ks-data ks-ein ks-aus) (if *lib-initialized* t (progn - (setq lib-datei - (strcat (vl-string-translate "\\" "/" - (getenv "DXFM_DATA")) - "/block_libraries/ils_library.dxf")) - (if (findfile lib-datei) + ;; AS-Block laden und Masse extrahieren + (ensure-block-loaded "_3D_AS_90_links") + (if (tblsearch "BLOCK" "_3D_AS_90_links") (progn - (princ "\n Lade ils_library.dxf ...") (setq temp-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) - lib-datei 1.0 1.0 1.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 *lib-initialized* t) - (setq *gf-lib-geladen* t) - (princ " OK") - ;; AS/ES-Masse extrahieren falls Block vorhanden - (if (tblsearch "BLOCK" "_3D_AS_90_links") + (setq ks-ein (cadr (assoc "KS_EIN" ks-data))) + (setq ks-aus (cadr (assoc "KS_AUS" ks-data))) + (if (and ks-ein ks-aus) (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 (cadr (assoc "KS_EIN" ks-data))) - (setq ks-aus (cadr (assoc "KS_AUS" ks-data))) - (if (and ks-ein ks-aus) - (progn - (setq aus-dx (- (caar ks-aus) (caar ks-ein))) - ;; Lokale KS_EIN-Position speichern (Ursprungsrelativ, Block bei (0,0,0)) - (setq *aus-ks-ein-local* (car ks-ein)) - ) - ) + (setq aus-dx (- (caar ks-aus) (caar ks-ein))) + (setq *aus-ks-ein-local* (car ks-ein)) ) ) - (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 (cadr (assoc "KS_EIN" ks-data))) - (setq ks-aus (cadr (assoc "KS_AUS" ks-data))) - (if (and ks-ein ks-aus) - (progn - (setq ein-dx (- (caar ks-aus) (caar ks-ein))) - ;; Lokale KS_EIN-Position speichern - (setq *ein-ks-ein-local* (car ks-ein)) - ) - ) - ) - ) - t - ) - (progn - (princ (strcat "\n FEHLER: " lib-datei " nicht gefunden!")) - nil ) ) + ;; ES-Block laden und Masse extrahieren + (ensure-block-loaded "_3D_ES_90_links") + (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 (cadr (assoc "KS_EIN" ks-data))) + (setq ks-aus (cadr (assoc "KS_AUS" ks-data))) + (if (and ks-ein ks-aus) + (progn + (setq ein-dx (- (caar ks-aus) (caar ks-ein))) + (setq *ein-ks-ein-local* (car ks-ein)) + ) + ) + ) + ) + (setq *lib-initialized* t) + (setq *gf-lib-geladen* t) + t ) ) ) diff --git a/Lisp/KreiselInsert.lsp b/Lisp/KreiselInsert.lsp index 3f2ef28..1bbe9c7 100644 --- a/Lisp/KreiselInsert.lsp +++ b/Lisp/KreiselInsert.lsp @@ -16,19 +16,22 @@ (setq #Eckrad_LetzteNr 0) ) -;; Block-Pfad (gesetzt durch bin/setenv.bat -> DXFM_BLOCKS = data\ils\2D) -(setq block-pfad (getenv "DXFM_BLOCKS")) - -(if (or (null block-pfad) (= block-pfad "")) - (progn - (alert "DXFM_BLOCKS nicht gesetzt!\nBitte zuerst bin\\setenv.bat ausfuehren.") - (exit) +;; Block-Pfad immer data/ils/2D/ (Kreisel/Eckrad Bloecke nur 2D vorhanden) +(setq block-pfad + (cond + ((getenv "DXFM_DATA") + (strcat (vl-string-translate "\\" "/" (getenv "DXFM_DATA")) "/ils/2D/")) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + (vl-string-search "/Lisp" *ssg-lisp-pfad*)) + (strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*)) + "/data/ils/2D/")) + (t + (princ "\n[KreiselInsert] WARNUNG: Block-Pfad nicht ermittelbar!") + nil) ) - (setq block-pfad (strcat (vl-string-right-trim "/" (vl-string-translate "\\" "/" block-pfad)) "/")) ) - (setq *block-path* block-pfad) -(princ (strcat "\nBlock-Pfad: " block-pfad)) +(if block-pfad (princ (strcat "\nBlock-Pfad: " block-pfad))) ;; ssg_core laden falls noch nicht geschehen (Schutz bei direktem Laden ohne ssg-ensure) (if (null (car (atoms-family 1 '("SSG-CFG-OR")))) diff --git a/Lisp/VarioFoerderer.lsp b/Lisp/VarioFoerderer.lsp index 7790132..8c91de9 100644 --- a/Lisp/VarioFoerderer.lsp +++ b/Lisp/VarioFoerderer.lsp @@ -2,7 +2,20 @@ ;; VarioFoerderer.lsp — Kompatiblitaets-Wrapper ;; Laedt vf_core.lsp (Plugin-Dispatcher-Architektur) ;; ============================================================ -(if (getenv "DXFM_LISP") - (load (strcat (getenv "DXFM_LISP") "/vf_core.lsp")) - (alert "DXFM_LISP nicht gesetzt! Bitte zuerst bin\\setenv.bat ausfuehren.") +;; vf_core.lsp laden: 1) DXFM_LISP, 2) *ssg-lisp-pfad* (vom MNL gesetzt), 3) findfile +(setq *vf-core-datei* + (cond + ((getenv "DXFM_LISP") + (strcat (vl-string-translate "\\" "/" (getenv "DXFM_LISP")) "/vf_core.lsp")) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + (findfile (strcat *ssg-lisp-pfad* "/vf_core.lsp"))) + (strcat *ssg-lisp-pfad* "/vf_core.lsp")) + ((findfile "vf_core.lsp") + (findfile "vf_core.lsp")) + (t nil) + ) +) +(if *vf-core-datei* + (load *vf-core-datei*) + (princ "\n[VarioFoerderer] WARNUNG: vf_core.lsp nicht gefunden - Befehle nicht verfuegbar.") ) diff --git a/Lisp/vf_core.lsp b/Lisp/vf_core.lsp index fe767de..78c7fb5 100644 --- a/Lisp/vf_core.lsp +++ b/Lisp/vf_core.lsp @@ -11,24 +11,44 @@ ;; ============================================================ ;; TEIL 1: ABHAENGIGKEITEN ;; ============================================================ -(if (getenv "DXFM_BLOCKS") - (setq modul-pfad (strcat (getenv "DXFM_BLOCKS") "/")) - (progn - (alert "Umgebungsvariable DXFM_BLOCKS nicht gesetzt!\nBitte zuerst bin\\setenv.bat ausfuehren.") - (exit) +;; Block-Pfad: 1) DXFM_BLOCKS, 2) aus *ssg-lisp-pfad* ableiten +(setq modul-pfad + (cond + ((getenv "DXFM_BLOCKS") + (strcat (vl-string-translate "\\" "/" (getenv "DXFM_BLOCKS")) "/")) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + (vl-string-search "/Lisp" *ssg-lisp-pfad*)) + (strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*)) + "/data/ils/" + (if (getenv "DXFM_DIM") (getenv "DXFM_DIM") "2D") + "/")) + (t + (princ "\n[vf_core] WARNUNG: DXFM_BLOCKS nicht gesetzt - Block-Pfad unbekannt!") + nil) ) ) - (setq block-pfad modul-pfad) +;; ssg_core laden falls noch nicht geschehen: 1) DXFM_LISP, 2) *ssg-lisp-pfad* (if (not *ssg-core-loaded*) - (if (getenv "DXFM_LISP") - (progn - (load (strcat (getenv "DXFM_LISP") "/ssg_core.lsp")) - (ssg-load-config) - (setq *ssg-core-loaded* t) + (progn + (setq *vf-core-lisp-pfad* + (cond + ((getenv "DXFM_LISP") + (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) + *ssg-lisp-pfad*) + (t nil) + ) + ) + (if *vf-core-lisp-pfad* + (progn + (load (strcat *vf-core-lisp-pfad* "/ssg_core.lsp")) + (ssg-load-config) + (setq *ssg-core-loaded* t) + ) + (princ "\n[vf_core] WARNUNG: DXFM_LISP nicht gesetzt - ssg_core konnte nicht geladen werden!") ) - (alert "DXFM_LISP nicht gesetzt! Bitte zuerst bin\\setenv.bat ausfuehren.") ) ) @@ -136,42 +156,20 @@ ;; ============================================================ ;; TEIL 5: KS_EIN/KS_AUS EXTRAKTION ;; ============================================================ -(defun ensure-block-loaded (blockname / lib-datei block-datei temp-obj) +(defun ensure-block-loaded (blockname / block-datei temp-obj) (if (not (tblsearch "BLOCK" blockname)) (progn - (if *library-loaded* (setq *library-loaded* nil)) - (if (not *library-loaded*) + (setq block-datei (strcat block-pfad blockname ".dwg")) + (if (findfile block-datei) (progn - (setq lib-datei - (strcat (vl-string-translate "\\" "/" (getenv "DXFM_DATA")) - "/block_libraries/ils_library.dxf")) - (if (findfile lib-datei) - (progn - (princ "\n Lade ils_library.dxf ...") - (setq temp-obj (vla-InsertBlock modelspace - (vlax-3D-point '(0 0 0)) - lib-datei 1.0 1.0 1.0 0)) - (vla-Delete temp-obj) - (setq *library-loaded* T) - (princ " OK") - ) - (princ (strcat "\n WARNUNG: Bibliothek nicht gefunden: " lib-datei)) - ) - ) - ) - (if (not (tblsearch "BLOCK" blockname)) - (progn - (setq block-datei (strcat block-pfad blockname ".dxf")) - (if (findfile block-datei) - (progn - (setq temp-obj (vla-InsertBlock modelspace - (vlax-3D-point '(0 0 0)) - block-datei 1.0 1.0 1.0 0)) - (vla-Delete temp-obj) - ) - (princ (strcat "\n FEHLER: Block nicht gefunden: " blockname)) - ) + (princ (strcat "\n Lade Block: " blockname " ...")) + (setq temp-obj (vla-InsertBlock modelspace + (vlax-3D-point '(0 0 0)) + block-datei 1.0 1.0 1.0 0)) + (vla-Delete temp-obj) + (princ " OK") ) + (princ (strcat "\n FEHLER: Block-Datei nicht gefunden: " block-datei)) ) ) ) @@ -652,13 +650,25 @@ ;; ============================================================ ;; Guard: Untermodule nur beim ersten Laden von vf_core.lsp ausfuehren. (if (not *ssg-vf-submodule-loaded*) - (if (getenv "DXFM_LISP") - (progn - (load (strcat (getenv "DXFM_LISP") "/vf_standard.lsp")) - (load (strcat (getenv "DXFM_LISP") "/vf_etage.lsp")) - (setq *ssg-vf-submodule-loaded* t) + (progn + ;; Lisp-Pfad ermitteln: 1) DXFM_LISP, 2) *ssg-lisp-pfad* (vom MNL gesetzt) + (setq *vf-lisp-pfad* + (cond + ((getenv "DXFM_LISP") + (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) + *ssg-lisp-pfad*) + (t nil) + ) + ) + (if *vf-lisp-pfad* + (progn + (load (strcat *vf-lisp-pfad* "/vf_standard.lsp")) + (load (strcat *vf-lisp-pfad* "/vf_etage.lsp")) + (setq *ssg-vf-submodule-loaded* t) + ) + (princ "\n[vf_core] WARNUNG: DXFM_LISP nicht gesetzt - Untermodule konnten nicht geladen werden!") ) - (alert "DXFM_LISP nicht gesetzt - Untermodule konnten nicht geladen werden!") ) ) @@ -867,9 +877,9 @@ ;; ============================================================ ;; START & ALIASES ;; ============================================================ -(defun c:FOERDERANLAGE () (c:VarioFoerderer)) +(defun c:Foerderanlage () (c:VarioFoerderer)) -(defun c:ETAGEVARIOFOERDERER () +(defun c:EtageVarioFoerderer () (setq *vf-vorauswahl-typ* "etage") (c:VarioFoerderer) ) diff --git a/Lisp/vf_etage.lsp b/Lisp/vf_etage.lsp index ee319be..0c46190 100644 --- a/Lisp/vf_etage.lsp +++ b/Lisp/vf_etage.lsp @@ -8,11 +8,22 @@ ;; Sicherstellen, dass vf_core.lsp geladen ist (if (not (car (atoms-family 1 '("VF-TYP-REGISTRIEREN")))) - (if (getenv "DXFM_LISP") - (load (strcat (getenv "DXFM_LISP") "/vf_core.lsp")) - (progn - (alert "DXFM_LISP nicht gesetzt! Bitte zuerst bin\\setenv.bat ausfuehren.") - (exit) + (progn + (setq *vf-etage-core-pfad* + (cond + ((getenv "DXFM_LISP") + (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) + *ssg-lisp-pfad*) + (t nil) + ) + ) + (if *vf-etage-core-pfad* + (load (strcat *vf-etage-core-pfad* "/vf_core.lsp")) + (progn + (princ "\n[vf_etage] WARNUNG: Lisp-Pfad nicht ermittelbar - vf_core.lsp nicht ladbar!") + (exit) + ) ) ) ) diff --git a/Lisp/vf_standard.lsp b/Lisp/vf_standard.lsp index 19351bf..2a8a24f 100644 --- a/Lisp/vf_standard.lsp +++ b/Lisp/vf_standard.lsp @@ -8,11 +8,22 @@ ;; Sicherstellen, dass vf_core.lsp geladen ist (if (not (car (atoms-family 1 '("VF-TYP-REGISTRIEREN")))) - (if (getenv "DXFM_LISP") - (load (strcat (getenv "DXFM_LISP") "/vf_core.lsp")) - (progn - (alert "DXFM_LISP nicht gesetzt! Bitte zuerst bin\\setenv.bat ausfuehren.") - (exit) + (progn + (setq *vf-std-core-pfad* + (cond + ((getenv "DXFM_LISP") + (vl-string-translate "\\" "/" (getenv "DXFM_LISP"))) + ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) + *ssg-lisp-pfad*) + (t nil) + ) + ) + (if *vf-std-core-pfad* + (load (strcat *vf-std-core-pfad* "/vf_core.lsp")) + (progn + (princ "\n[vf_standard] WARNUNG: Lisp-Pfad nicht ermittelbar - vf_core.lsp nicht ladbar!") + (exit) + ) ) ) ) diff --git a/bin/setenv.bat b/bin/setenv.bat index 4e30036..8d84a7e 100644 --- a/bin/setenv.bat +++ b/bin/setenv.bat @@ -69,6 +69,18 @@ if not exist "%DXFM_TESTDATA%" mkdir "%DXFM_TESTDATA%" if not exist "%DXFM_TESTOUT%" mkdir "%DXFM_TESTOUT%" if not exist "%DXFM_TESTREF%" mkdir "%DXFM_TESTREF%" +REM Variablen dauerhaft fuer diesen Benutzer setzen (einmalig noetig) +echo Setze Umgebungsvariablen dauerhaft (setx)... +setx DXFMAKRO "%DXFMAKRO%" +setx DXFM_LISP "%DXFM_LISP%" +setx DXFM_DATA "%DXFM_DATA%" +setx DXFM_DCL "%DXFM_DCL%" +setx DXFM_CFG "%DXFM_CFG%" +setx DXFM_LOG "%DXFM_LOG%" +setx DXFM_DIM "%DXFM_DIM%" +setx DXFM_BLOCKS "%DXFM_BLOCKS%" +echo Dauerhaft gesetzt. Gilt fuer alle neuen Prozesse (nicht aktuelles Fenster). + REM Umgebungsvariablen anzeigen echo. echo ================================================================