From 0ea11fdac25a93912b9a25e7ac73f2a160a47773 Mon Sep 17 00:00:00 2001 From: Yuelin Wang Date: Thu, 25 Jun 2026 15:40:07 +0200 Subject: [PATCH] Block-Pfad-Ermittlung auf DXFMAKRO+DXFM_DIM umgestellt; Console bereinigt --- Lisp/Gefaellestrecke.lsp | 18 ++++++++------ Lisp/KreiselInsert.lsp | 22 +++++++++++------ Lisp/vf_core.lsp | 34 +++++++++++++------------- bin/setenv.bat | 4 +-- data/ils/3D/AN8.dwg | Bin 0 -> 11235 bytes data/ils/3D/SP8.dwg | Bin 0 -> 11523 bytes menu/SSG_LIB.mnl | 51 ++++++++++++++++++++++----------------- 7 files changed, 73 insertions(+), 56 deletions(-) create mode 100644 data/ils/3D/AN8.dwg create mode 100644 data/ils/3D/SP8.dwg 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 0000000000000000000000000000000000000000..4f8a1914bfbf014afbd1a0fd7bde5ed980db5b13 GIT binary patch literal 11235 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 h5}J8!6c8y&6tvi4Ga^+~ybTsx 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 Iou38&7ky^ksQ>@~ literal 0 HcmV?d00001 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.")