diff --git a/Lisp/Gefaellestrecke.lsp b/Lisp/Gefaellestrecke.lsp index 36986b8..46eb9b8 100644 --- a/Lisp/Gefaellestrecke.lsp +++ b/Lisp/Gefaellestrecke.lsp @@ -47,16 +47,20 @@ (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) +;; DXFM_DIM sicher lesen (type-Guard gegen nicht-String Rueckgabewerte) +(setq *gf-dxfm-dim* (getenv "DXFM_DIM")) +(if (not (= (type *gf-dxfm-dim*) 'STR)) (setq *gf-dxfm-dim* "3D")) +;; Block-Pfad: primaer aus DXFMAKRO + DXFM_DIM, dann *ssg-lisp-pfad*-Heuristik (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* + ((and (getenv "DXFMAKRO") (= (type (getenv "DXFMAKRO")) 'STR)) + (strcat (vl-string-right-trim "/" (vl-string-translate "\\" "/" (getenv "DXFMAKRO"))) + "/data/ils/" *gf-dxfm-dim* "/")) + ((and (boundp '*ssg-lisp-pfad*) (= (type *ssg-lisp-pfad*) 'STR) (vl-string-search "/Lisp" *ssg-lisp-pfad*)) (strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*)) - "/data/ils/3D/")) + "/data/ils/" *gf-dxfm-dim* "/")) (t nil) ) ) @@ -1241,11 +1245,11 @@ ;; ============================================================ ;; START ;; ============================================================ -(princ "\n=========================================") (princ "\n>>> GEFAELLESTRECKE v2.0 geladen <<<") -(princ "\n>>> Befehl: GEFAELLESTRECKE <<<") +(princ "\n>>> Befehl: Gefaellestrecke") (princ "\n Modus 1: Manuelle Eingabe") (princ "\n Modus 2: 3D-Linie") (princ "\n Modus 3: Linienzug mit Gefaellebogen") +(if block-pfad (princ (strcat "\n Block-Pfad: " block-pfad))) (princ "\n=========================================") (princ) diff --git a/Lisp/KreiselInsert.lsp b/Lisp/KreiselInsert.lsp index 1bbe9c7..7825e8a 100644 --- a/Lisp/KreiselInsert.lsp +++ b/Lisp/KreiselInsert.lsp @@ -16,22 +16,25 @@ (setq #Eckrad_LetzteNr 0) ) -;; Block-Pfad immer data/ils/2D/ (Kreisel/Eckrad Bloecke nur 2D vorhanden) +;; DXFM_DIM sicher lesen (type-Guard gegen nicht-String Rueckgabewerte) +(setq *ki-dxfm-dim* (getenv "DXFM_DIM")) +(if (not (= (type *ki-dxfm-dim*) 'STR)) (setq *ki-dxfm-dim* "3D")) +;; Block-Pfad: primaer aus DXFMAKRO + DXFM_DIM, dann *ssg-lisp-pfad*-Heuristik (setq block-pfad (cond - ((getenv "DXFM_DATA") - (strcat (vl-string-translate "\\" "/" (getenv "DXFM_DATA")) "/ils/2D/")) - ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + ((and (getenv "DXFMAKRO") (= (type (getenv "DXFMAKRO")) 'STR)) + (strcat (vl-string-right-trim "/" (vl-string-translate "\\" "/" (getenv "DXFMAKRO"))) + "/data/ils/" *ki-dxfm-dim* "/")) + ((and (boundp '*ssg-lisp-pfad*) (= (type *ssg-lisp-pfad*) 'STR) (vl-string-search "/Lisp" *ssg-lisp-pfad*)) (strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*)) - "/data/ils/2D/")) + "/data/ils/" *ki-dxfm-dim* "/")) (t (princ "\n[KreiselInsert] WARNUNG: Block-Pfad nicht ermittelbar!") nil) ) ) (setq *block-path* 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")))) @@ -1282,6 +1285,9 @@ (princ) ) -(princ "\nKreiselInsert.lsp geladen (Version 7.0 - Auto-Nummerierung + Beschriftung + Attribute + Redraw + Eckrad)") -(princ "\nBefehle: KreiselInsert, KreiselConnect, KreiselRedraw, KreiselEdit, KreiselQuick, KreiselParams, ILS_Eckrad") +(princ "\n>>> KREISELINSERT v7.0 geladen <<<") +(princ "\n>>> Befehle: KreiselInsert, KreiselConnect, KreiselRedraw,") +(princ "\n KreiselEdit, KreiselQuick, KreiselParams, ILS_Eckrad") +(if block-pfad (princ (strcat "\n Block-Pfad: " block-pfad))) +(princ "\n=========================================") (princ) diff --git a/Lisp/vf_core.lsp b/Lisp/vf_core.lsp index 78c7fb5..0fd0e7b 100644 --- a/Lisp/vf_core.lsp +++ b/Lisp/vf_core.lsp @@ -11,19 +11,21 @@ ;; ============================================================ ;; TEIL 1: ABHAENGIGKEITEN ;; ============================================================ -;; Block-Pfad: 1) DXFM_BLOCKS, 2) aus *ssg-lisp-pfad* ableiten +;; DXFM_DIM sicher lesen (type-Guard gegen nicht-String Rueckgabewerte) +(setq *vf-dxfm-dim* (getenv "DXFM_DIM")) +(if (not (= (type *vf-dxfm-dim*) 'STR)) (setq *vf-dxfm-dim* "3D")) +;; Block-Pfad: primaer aus DXFMAKRO + DXFM_DIM, dann *ssg-lisp-pfad*-Heuristik (setq modul-pfad (cond - ((getenv "DXFM_BLOCKS") - (strcat (vl-string-translate "\\" "/" (getenv "DXFM_BLOCKS")) "/")) - ((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad* + ((and (getenv "DXFMAKRO") (= (type (getenv "DXFMAKRO")) 'STR)) + (strcat (vl-string-right-trim "/" (vl-string-translate "\\" "/" (getenv "DXFMAKRO"))) + "/data/ils/" *vf-dxfm-dim* "/")) + ((and (boundp '*ssg-lisp-pfad*) (= (type *ssg-lisp-pfad*) 'STR) (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") - "/")) + "/data/ils/" *vf-dxfm-dim* "/")) (t - (princ "\n[vf_core] WARNUNG: DXFM_BLOCKS nicht gesetzt - Block-Pfad unbekannt!") + (princ "\n[vf_core] WARNUNG: Block-Pfad nicht ermittelbar!") nil) ) ) @@ -651,6 +653,7 @@ ;; Guard: Untermodule nur beim ersten Laden von vf_core.lsp ausfuehren. (if (not *ssg-vf-submodule-loaded*) (progn + (princ "\n>>> VARIOFOERDERER v26.0 geladen <<<") ;; Lisp-Pfad ermitteln: 1) DXFM_LISP, 2) *ssg-lisp-pfad* (vom MNL gesetzt) (setq *vf-lisp-pfad* (cond @@ -889,16 +892,13 @@ (setq *ssg-VarioFoerderer-loaded* t) (setq *ssg-EtageVarioFoerderer-loaded* t) -(princ "\n=========================================") -(princ "\n>>> VF_CORE v26.0 geladen <<<") -(princ "\n=========================================") -(princ "\nBefehle:") -(princ "\n VarioFoerderer - Foerderanlage erstellen (Typ-Auswahl)") -(princ "\n FOERDERANLAGE - Alias fuer VarioFoerderer") -(princ "\n ETAGEVARIOFOERDERER - Etage-Foerderanlage direkt") -(princ "\nRegistrierte Typen:") +(princ "\n>>> Befehle: VarioFoerderer, Foerderanlage, EtageVarioFoerderer") +(princ "\n Typen:") +(setq *vf-typ-idx* 1) (foreach eintr *vf-typ-registry* - (princ (strcat "\n " (car eintr) " - " (nth 3 eintr))) + (princ (strcat "\n " (itoa *vf-typ-idx*) ". " (car eintr) " - " (nth 3 eintr))) + (setq *vf-typ-idx* (1+ *vf-typ-idx*)) ) +(if block-pfad (princ (strcat "\n Block-Pfad: " block-pfad))) (princ "\n=========================================") (princ) diff --git a/bin/setenv.bat b/bin/setenv.bat index 8d84a7e..edca804 100644 --- a/bin/setenv.bat +++ b/bin/setenv.bat @@ -25,8 +25,8 @@ set "DXFM_LISP=%DXFMAKRO%\Lisp" set "DXFM_DCL=%DXFMAKRO%\dcl" set "DXFM_RESULTS=%DXFMAKRO%\results" -REM 2D/3D-Modus: Standard ist 2D -set "DXFM_DIM=2D" +REM 2D/3D-Modus: Standard ist 3D (alle Module nutzen data\ils\3D\) +set "DXFM_DIM=3D" set BRICSCAD="C:\Program Files\Bricsys\BricsCAD V25 de_DE\bricscad.exe" diff --git a/data/ils/3D/AN8.dwg b/data/ils/3D/AN8.dwg new file mode 100644 index 0000000..4f8a191 Binary files /dev/null and b/data/ils/3D/AN8.dwg differ diff --git a/data/ils/3D/SP8.dwg b/data/ils/3D/SP8.dwg new file mode 100644 index 0000000..962fdb5 Binary files /dev/null and b/data/ils/3D/SP8.dwg differ diff --git a/menu/SSG_LIB.mnl b/menu/SSG_LIB.mnl index 4baa6db..4e464f6 100644 --- a/menu/SSG_LIB.mnl +++ b/menu/SSG_LIB.mnl @@ -1,9 +1,9 @@ ;; ============================================================ ;; SSG_LIB.mnl - Automatisch geladen beim MENULOAD von SSG_LIB.mnu ;; -;; Definiert den Lazy-Loader (ssg-ensure) und laedt die -;; Kern-Module (ssg_core, ssg_dbg, ssg_dialog, ssg_layer). -;; Feature-Module werden erst bei Menueklick nachgeladen. +;; Definiert den Lazy-Loader (ssg-ensure) und laedt alle Module. +;; Kern-Module: ssg_core, ssg_dbg, ssg_dialog, ssg_layer, ssg_id +;; Feature-Module: KreiselInsert, Gefaellestrecke, VarioFoerderer, ... ;; ============================================================ ;; Globale Variable: Pfad zu den LISP-Dateien @@ -22,8 +22,7 @@ (progn (setq *ssg-lisp-pfad* (strcat (substr *ssg-mnl-datei* 1 *ssg-menu-pos*) "/Lisp")) - (if (findfile (strcat *ssg-lisp-pfad* "/ssg_core.lsp")) - (princ (strcat "\n[SSG_LIB] Pfad heuristisch ermittelt: " *ssg-lisp-pfad*)) + (if (not (findfile (strcat *ssg-lisp-pfad* "/ssg_core.lsp"))) (progn (setq *ssg-lisp-pfad* nil) (princ "\n[SSG_LIB] Heuristik fehlgeschlagen: ssg_core.lsp nicht gefunden.") @@ -39,18 +38,14 @@ ;; ------------------------------------------------------------ ;; ssg-ensure - Lazy-Loader fuer SSG_LIB Module ;; -;; Prueft ob ein Modul bereits geladen ist (via *ssg--loaded*). -;; Wenn nicht, laedt es aus DXFM_LISP. -;; Laedt automatisch Kern-Abhaengigkeiten (core, dbg, dialog, layer) -;; falls diese noch nicht geladen sind. +;; Laedt ein Modul einmalig. Setzt Flag *ssg--loaded*. +;; Laedt Kern-Abhaengigkeiten (core/dbg/dialog/layer) automatisch. ;; ------------------------------------------------------------ -(defun ssg-ensure (modul / flag-sym datei) - ;; Flag-Symbol: *ssg-ssg_core-loaded* etc. +(defun ssg-ensure (modul / flag-sym) (setq flag-sym (read (strcat "*ssg-" modul "-loaded*"))) - (if (not (eval flag-sym)) (progn - ;; Pfad pruefen + ;; Pfad nachschlagen falls noch nicht gesetzt (if (null *ssg-lisp-pfad*) (progn (setq *ssg-lisp-pfad* (getenv "DXFM_LISP")) @@ -66,11 +61,13 @@ (princ "\n[SSG_LIB] FEHLER: DXFM_LISP nicht gesetzt!") ) (progn - ;; Kern-Module als Abhaengigkeit laden (falls noch nicht geschehen) + ;; Kern-Module als Abhaengigkeit laden (je nur einmal) + ;; WICHTIG: auch den modul-spezifischen Flag setzen, sonst Doppelladen (if (not *ssg-core-loaded*) (progn (ssg-ensure-load "ssg_core") (set '*ssg-core-loaded* t) + (set '*ssg-ssg_core-loaded* t) (ssg-load-config) ) ) @@ -78,7 +75,7 @@ (progn (ssg-ensure-load "ssg_dbg") (set '*ssg-dbg-loaded* t) - ;; Debug-Log oeffnen + (set '*ssg-ssg_dbg-loaded* t) (if (and (atoms-family 1 '("DBGOPEN")) (getenv "DXFM_LOG")) (dbgopen "debugfile.dbg" "DXFM_LOG") ) @@ -88,16 +85,18 @@ (progn (ssg-ensure-load "ssg_dialog") (set '*ssg-dialog-loaded* t) + (set '*ssg-ssg_dialog-loaded* t) ) ) (if (not *ssg-layer-loaded*) (progn (ssg-ensure-load "ssg_layer") (set '*ssg-layer-loaded* t) + (set '*ssg-ssg_layer-loaded* t) ) ) - ;; Jetzt das angeforderte Modul laden (falls nicht schon ein Kern-Modul) + ;; Angefordertes Feature-Modul laden (falls noch nicht via Kern-Flags gesetzt) (if (not (eval flag-sym)) (progn (ssg-ensure-load modul) @@ -111,7 +110,7 @@ (princ) ) -;; Hilfsfunktion: Datei laden mit Fehlerbehandlung +;; Hilfsfunktion: Datei laden mit Fehlerbehandlung (ohne eigene Lademeldung) (defun ssg-ensure-load (modul / datei result) (setq datei (strcat *ssg-lisp-pfad* "/" modul ".lsp")) (if (findfile datei) @@ -120,7 +119,6 @@ (if (vl-catch-all-error-p result) (princ (strcat "\n[SSG_LIB] FEHLER beim Laden von " modul ": " (vl-catch-all-error-message result))) - (princ (strcat "\n[SSG_LIB] Geladen: " modul ".lsp")) ) ) (princ (strcat "\n[SSG_LIB] WARNUNG: " datei " nicht gefunden!")) @@ -128,26 +126,35 @@ ) ;; ------------------------------------------------------------ -;; Beim MNL-Laden: Alle Module laden + Menue einhaengen +;; Beim MNL-Laden: Kern-Module + Feature-Module laden ;; ------------------------------------------------------------ (if *ssg-lisp-pfad* (progn - ;; Alle Module in der richtigen Reihenfolge laden + ;; 1) Kern-Module (Core) (ssg-ensure "ssg_core") (ssg-ensure "ssg_dbg") (ssg-ensure "ssg_dialog") (ssg-ensure "ssg_layer") (ssg-ensure "ssg_id") + + ;; Allgemein-Zusammenfassung + (princ "\n=========================================") + (princ "\n[SSG_LIB] Core-Module geladen:") + (princ "\n ssg_core, ssg_dbg, ssg_dialog, ssg_layer, ssg_id") + (princ (strcat "\n Pfad: " *ssg-lisp-pfad*)) + (princ "\n=========================================") + + ;; 2) Feature-Module in Anzeigereihenfolge (ssg-ensure "KreiselInsert") + (ssg-ensure "Gefaellestrecke") (ssg-ensure "VarioFoerderer") (ssg-ensure "EtageVarioFoerderer") - (ssg-ensure "Gefaellestrecke") (ssg-ensure "export") (ssg-ensure "external_call") (ssg-ensure "OmniModulInsert") (ssg-ensure "SSG_LIB_Commands") - ;; Pulldown-Menue in die Menueleiste einhaengen + ;; Menue einhaengen (menucmd "P13=+SSG_LIB.POP1") (setvar "DBLCLKEDIT" 1) (princ "\n[SSG_LIB] Alle Module geladen. Menue aktiv.")