216 lines
9.8 KiB
Common Lisp
216 lines
9.8 KiB
Common Lisp
;; ============================================================
|
|
;; on_start.lsp - SSG_LIB Startup fuer BricsCAD
|
|
;; Wird beim Start von BricsCAD automatisch ausgefuehrt
|
|
;; ============================================================
|
|
|
|
(defun ssg-lib-safe-load (datei / result)
|
|
(setq result (vl-catch-all-apply 'load (list datei)))
|
|
(if (vl-catch-all-error-p result)
|
|
(progn
|
|
(princ (strcat "\n[SSG_LIB] FEHLER beim Laden von " datei ":"))
|
|
(princ (strcat "\n " (vl-catch-all-error-message result)))
|
|
nil
|
|
)
|
|
t
|
|
)
|
|
)
|
|
|
|
;; ------------------------------------------------------------
|
|
;; SSG-DBG-FN - Prueft ob ein AutoLISP-Symbol gebunden ist
|
|
;; Gibt "JA" oder "NEIN" zurueck (atoms-family, BRX-Cmds nicht pruefbar)
|
|
;; ------------------------------------------------------------
|
|
(defun ssg-dbg-fn (fname)
|
|
(if (car (atoms-family 1 (list fname))) "JA" "NEIN")
|
|
)
|
|
|
|
;; ------------------------------------------------------------
|
|
;; SSG-DBG-PYRX - PyRx-Ladeprozess ins Debug-Log schreiben
|
|
;; Wird nach arxload aufgerufen, damit alle Ergebniswerte vorliegen.
|
|
;; ------------------------------------------------------------
|
|
(defun ssg-dbg-pyrx (pyrx-pfad ver-major brx-datei brx-result / arx-name)
|
|
(dbgmsg "[PyRx] --- Umgebung ---")
|
|
(dbgmsg (strcat "PYTHONHOME: " (if (getenv "PYTHONHOME") (getenv "PYTHONHOME") "nicht gesetzt")))
|
|
(dbgmsg (strcat "PYTHONPATH: " (if (getenv "PYTHONPATH") (getenv "PYTHONPATH") "nicht gesetzt")))
|
|
(dbgmsg (strcat "PATH (Anfang): " (substr (getenv "PATH") 1 120)))
|
|
(dbgmsg "[PyRx] --- Eingabewerte ---")
|
|
(dbgmsg (strcat "pyrx-pfad: " pyrx-pfad))
|
|
(dbgmsg (strcat "ver-major: " ver-major))
|
|
(dbgmsg (strcat "brx-datei: " brx-datei))
|
|
(dbgmsg "[PyRx] --- arxload Ergebnis ---")
|
|
(dbgmsg (strcat "arxload Rueckgabe: " (vl-princ-to-string brx-result)))
|
|
(dbgmsg (strcat "arxload Fehler? " (if (vl-catch-all-error-p brx-result) (vl-catch-all-error-message brx-result) "nein")))
|
|
(setq arx-name (strcat "rxloaderv" ver-major ".0.brx"))
|
|
(dbgmsg (strcat "(arx) rxloader? " (if (member arx-name (arx)) "JA" "NEIN")))
|
|
(dbgmsg (strcat "(arx) Liste: " (vl-princ-to-string (arx))))
|
|
(dbgflush)
|
|
)
|
|
|
|
(defun ssg-lib-startup ( / lisp-pfad menu-pfad curr-srch menu-datei
|
|
pyrx-pfad acadver-str ver-punkt ver-major brx-datei brx-fallback brx-result)
|
|
|
|
;; Pfade aus Umgebungsvariablen lesen
|
|
(setq lisp-pfad (getenv "DXFM_LISP"))
|
|
(setq menu-pfad (getenv "DXFMAKRO"))
|
|
|
|
(if (null lisp-pfad)
|
|
(progn
|
|
(princ "\n[SSG_LIB] FEHLER: DXFM_LISP nicht gesetzt!")
|
|
(princ "\n[SSG_LIB] Bitte zuerst bin\\setenv.bat ausfuehren.")
|
|
)
|
|
(progn
|
|
;; Debug-Logging so frueh wie moeglich starten
|
|
(if (findfile (strcat lisp-pfad "/ssg_dbg.lsp"))
|
|
(progn
|
|
(load (strcat lisp-pfad "/ssg_dbg.lsp"))
|
|
(dbgopen "debugfile.dbg" "DXFM_LOG")
|
|
(dbgmsg "[on_start] Startup begonnen")
|
|
(dbgmsg (strcat "[on_start] DXFM_LISP=" lisp-pfad))
|
|
(dbgmsg (strcat "[on_start] DXFMAKRO=" (if menu-pfad menu-pfad "nicht gesetzt")))
|
|
(dbgflush)
|
|
)
|
|
)
|
|
|
|
(princ "\n[SSG_LIB] Lade SSG_LIB Umgebung...")
|
|
|
|
;; LISP-Pfad zum BricsCAD-Suchpfad hinzufuegen
|
|
(setq curr-srch (getvar "SRCHPATH"))
|
|
(if (and curr-srch (not (vl-string-search lisp-pfad curr-srch)))
|
|
(setvar "SRCHPATH" (strcat curr-srch ";" lisp-pfad))
|
|
)
|
|
|
|
;; Library laden (direkt, damit Fehler sichtbar sind)
|
|
(if (findfile (strcat lisp-pfad "/ssg_load.lsp"))
|
|
(progn
|
|
(load (strcat lisp-pfad "/ssg_load.lsp"))
|
|
(princ "\n[SSG_LIB] ssg_load.lsp geladen.")
|
|
)
|
|
(princ "\n[SSG_LIB] WARNUNG: ssg_load.lsp nicht gefunden!")
|
|
)
|
|
|
|
;; Menue laden
|
|
(if menu-pfad
|
|
(progn
|
|
(setq menu-datei (strcat menu-pfad "/menu/SSG_LIB.mnu"))
|
|
(if (findfile menu-datei)
|
|
(progn
|
|
(command "_.MENULOAD" menu-datei)
|
|
(menucmd "P13=+SSG_LIB.POP1")
|
|
(princ "\n[SSG_LIB] Menue SSG_LIB geladen und eingebunden.")
|
|
)
|
|
(princ (strcat "\n[SSG_LIB] WARNUNG: " menu-datei " nicht gefunden!"))
|
|
)
|
|
)
|
|
(princ "\n[SSG_LIB] WARNUNG: DXFMAKRO nicht gesetzt, Menue nicht geladen!")
|
|
)
|
|
|
|
;; DBLCLKEDIT deaktivieren (Block-Editor nicht bei Doppelklick oeffnen)
|
|
(setvar "DBLCLKEDIT" 0)
|
|
|
|
;; PyRx BRX-Plugin: wird via BricsCAD Startup-Suite geladen (nicht via arxload).
|
|
;; Grund: PyRxV25.0.brx muss vor dem LISP-Startup aktiv sein.
|
|
;; Einmalige Einrichtung: APPLOAD -> PyRxV25.0.brx -> "Startup Suite" hinzufuegen.
|
|
;;
|
|
;; Pyrx-Pfad: aus PYTHONHOME (system Python), nicht aus .venv
|
|
(if menu-pfad
|
|
(progn
|
|
(setq acadver-str (getvar "ACADVER"))
|
|
(setq ver-punkt (vl-string-search "." acadver-str))
|
|
(setq ver-major (if ver-punkt (substr acadver-str 1 ver-punkt) "25"))
|
|
;; Pyrx-Pfad: .venv (primaer, dort installiert), dann System/User Python
|
|
(setq pyrx-pfad
|
|
(cond
|
|
((findfile (strcat menu-pfad "/.venv/Lib/site-packages/pyrx/RxLoaderV" ver-major ".0.brx"))
|
|
(strcat menu-pfad "/.venv/Lib/site-packages/pyrx"))
|
|
((and (getenv "PYTHONHOME")
|
|
(findfile (strcat (getenv "PYTHONHOME") "/Lib/site-packages/pyrx/RxLoaderV" ver-major ".0.brx")))
|
|
(strcat (getenv "PYTHONHOME") "/Lib/site-packages/pyrx"))
|
|
((and (getenv "APPDATA")
|
|
(findfile (strcat (getenv "APPDATA") "/Python/Python312/site-packages/pyrx/RxLoaderV" ver-major ".0.brx")))
|
|
(strcat (getenv "APPDATA") "/Python/Python312/site-packages/pyrx"))
|
|
(t nil)
|
|
)
|
|
)
|
|
;; Wenn PyRx noch nicht aktiv (nicht via Startup Suite geladen): arxload versuchen
|
|
(if (not (member (strcat "rxloaderv" ver-major ".0.brx") (arx)))
|
|
(if pyrx-pfad
|
|
(progn
|
|
(setq brx-datei (strcat pyrx-pfad "/RxLoaderV" ver-major ".0.brx"))
|
|
(setq brx-result (vl-catch-all-apply 'arxload (list brx-datei)))
|
|
(ssg-dbg-pyrx pyrx-pfad ver-major brx-datei brx-result)
|
|
(if (vl-catch-all-error-p brx-result)
|
|
(progn
|
|
(princ (strcat "\n[SSG_LIB] FEHLER: RxLoaderV" ver-major ".0.brx nicht geladen: "
|
|
(vl-catch-all-error-message brx-result)))
|
|
(princ "\n[SSG_LIB] HINWEIS: PyRx einmalig via APPLOAD -> Startup Suite einrichten.")
|
|
)
|
|
(princ (strcat "\n[SSG_LIB] PyRx RxLoader geladen (V" ver-major "): " brx-datei))
|
|
)
|
|
)
|
|
(princ (strcat "\n[SSG_LIB] WARNUNG: PyRxV" ver-major ".0.brx nicht gefunden."
|
|
"\n PYTHONHOME=" (if (getenv "PYTHONHOME") (getenv "PYTHONHOME") "nicht gesetzt")))
|
|
)
|
|
(progn
|
|
(dbgmsg "[PyRx] PyRx bereits via Startup-Suite aktiv")
|
|
(princ (strcat "\n[SSG_LIB] PyRx (V" ver-major ") via Startup-Suite aktiv."))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; Python-Module laden (PyRx) - nur wenn PYLOAD verfuegbar
|
|
(dbgmsg "[PYLOAD] --- Python-Module ---")
|
|
(if (not (member "PYLOAD" (atoms-family 0)))
|
|
(progn
|
|
(dbgmsg "[PYLOAD] PYLOAD nicht verfuegbar - ueberspringe alle Module")
|
|
(princ "\n[SSG_LIB] WARNUNG: PYLOAD nicht verfuegbar (PyRx nicht geladen).")
|
|
(princ "\n[SSG_LIB] Python-Befehle (KreiselInsert etc.) nicht aktiv.")
|
|
)
|
|
(if menu-pfad
|
|
(foreach pymod '("eckrad" "kreisel" "dblclick" "omniflo" "omniflo_boegen" "omniflo_weichen")
|
|
(if (findfile (strcat menu-pfad "/lib/elemente/" pymod ".py"))
|
|
(progn
|
|
(dbgmsg (strcat "PYLOAD start: " pymod ".py"))
|
|
(command "PYLOAD" (strcat menu-pfad "/lib/elemente/" pymod ".py"))
|
|
(dbgmsg (strcat "PYLOAD done: " pymod ".py"))
|
|
(princ (strcat "\n[SSG_LIB] Python-Modul " pymod ".py geladen."))
|
|
)
|
|
(progn
|
|
(dbgmsg (strcat "PYLOAD skip: " pymod ".py -- nicht gefunden"))
|
|
(princ (strcat "\n[SSG_LIB] HINWEIS: " pymod ".py nicht gefunden."))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(dbgflush)
|
|
|
|
;; Verfuegbarkeits-Check aller erwarteten Funktionen
|
|
(dbgmsg "[CHECK] --- AutoLISP Funktionen (atoms-family) ---")
|
|
(dbgmsg (strcat "ssg-start: " (ssg-dbg-fn "SSG-START")))
|
|
(dbgmsg (strcat "ssg-end: " (ssg-dbg-fn "SSG-END")))
|
|
(dbgmsg (strcat "ssg-make-layer: " (ssg-dbg-fn "SSG-MAKE-LAYER")))
|
|
(dbgmsg (strcat "ssg-errhan: " (ssg-dbg-fn "SSG-ERRHAN")))
|
|
(dbgmsg (strcat "ensure-block-loaded: " (ssg-dbg-fn "ENSURE-BLOCK-LOADED")))
|
|
(dbgmsg "[CHECK] --- SSG_LIB_Commands (c:...) ---")
|
|
(dbgmsg (strcat "c:ILS_BTMT_Beladung: " (ssg-dbg-fn "C:ILS_BTMT_BELADUNG")))
|
|
(dbgmsg (strcat "c:ILS_K90LA: " (ssg-dbg-fn "C:ILS_K90LA")))
|
|
(dbgmsg (strcat "c:ILS_TEF_Strecke: " (ssg-dbg-fn "C:ILS_TEF_STRECKE")))
|
|
(dbgmsg "[CHECK] --- PyRx Befehle (BRX-Ebene, nicht via atoms-family pruefbar) ---")
|
|
(dbgmsg (strcat "KreiselInsert: " (ssg-dbg-fn "C:KREISELINSERT")))
|
|
(dbgmsg (strcat "KreiselEdit: " (ssg-dbg-fn "C:KREISELEDIT")))
|
|
(dbgmsg (strcat "EckradEdit: " (ssg-dbg-fn "C:ECKRADEDIT")))
|
|
(dbgmsg (strcat "SSG_BLOCKEDIT: " (ssg-dbg-fn "C:SSG_BLOCKEDIT")))
|
|
(dbgmsg (strcat "OMNI_AP60: " (ssg-dbg-fn "C:OMNI_AP60")))
|
|
(dbgmsg (strcat "OMNI_APB_630_90: " (ssg-dbg-fn "C:OMNI_APB_630_90")))
|
|
(dbgmsg (strcat "OMNI_W90_Einfach: " (ssg-dbg-fn "C:OMNI_W90_EINFACH")))
|
|
(dbgflush)
|
|
|
|
(princ "\n[SSG_LIB] Startup abgeschlossen.")
|
|
)
|
|
)
|
|
(princ)
|
|
)
|
|
|
|
;; Startup ausfuehren
|
|
(ssg-lib-startup)
|