bin/on_start.lsp geloescht + Dokumentation aktualisiert

on_start.lsp entfernt:
  Das Menue wird einmalig manuell per BricsCAD-Befehl _MENULOAD
  eingerichtet. BricsCAD speichert die Menuregistrierung dauerhaft.
  Ein externes Startup-Skript ist nicht mehr noetig.

Dokumentation aktualisiert:
  CLAUDE.md: Lademechanismus neu beschrieben mit _MENULOAD-Anleitung,
  Legacy-Liste bereinigt (on_start.lsp als entfernt eingetragen)
  Lisp/README.md: Ladereihenfolge durch Menueeinrichtungs-Anleitung
  ersetzt; ssg_load.lsp als Notfall-Alternative dokumentiert
  doc/LispTests.md: Verweis auf ssg_load.lsp und on_start bereinigt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-25 16:56:27 +02:00
parent 376f2e1fc8
commit 5f4e73b3af
4 changed files with 42 additions and 151 deletions
+25 -13
View File
@@ -19,7 +19,7 @@ AutoLISP-Makros (SSG_LIB) fuer BricsCAD Pro zur automatisierten Erstellung von F
| Verzeichnis | Inhalt |
|---|---|
| `Lisp/` | AutoLISP-Makros und Kernbibliotheken |
| `bin/` | Hilfs-Skripte (setenv.bat, start_briscad.bat, on_start.lsp) |
| `bin/` | Hilfs-Skripte (setenv.bat, start_briscad.bat) |
| `cfg/` | Konfigurationsdateien |
| `data/` | JSON-Daten, DXF-Quellen, Block-Libraries |
| `data/ils/` | DWG-Bloecke fuer ILS-Kreisel/Eckrad (AN8, SP8, AP-Typen) |
@@ -33,20 +33,33 @@ AutoLISP-Makros (SSG_LIB) fuer BricsCAD Pro zur automatisierten Erstellung von F
## Lademechanismus (Lazy Loading via MNL)
Das Laden der LISP-Module erfolgt **nicht** ueber Startup-Skripte, sondern ueber das Menuesystem:
Das Laden der LISP-Module erfolgt ueber das Menuesystem. Voraussetzung ist, dass das
Menue einmalig in BricsCAD geladen wurde (siehe unten: "Menue einrichten").
1. Die Menuedatei `SSG_LIB.mnu` wird beim BricsCAD-Start als CUI geladen (einmalig via `_MENULOAD`)
2. BricsCAD laedt automatisch `SSG_LIB.mnl` (gleichnamige MNL-Datei) mit dem Menue
3. Die MNL definiert `ssg-ensure` (Lazy-Loader) und setzt `DBLCLKEDIT=0`
4. Beim ersten Menueklick laedt `ssg-ensure` automatisch die benoetigten Module:
- Zuerst die **Kern-Module**: `ssg_core``ssg_dbg``ssg_dialog``ssg_layer`
- Dann das angeforderte **Feature-Modul** (z.B. `KreiselInsert`, `OmniModulInsert`)
5. Bereits geladene Module werden uebersprungen (Flag-Variable `*ssg-<modul>-loaded*`)
1. BricsCAD laedt beim Start automatisch `SSG_LIB.mnl` (gleichnamige MNL-Datei zum Menue)
2. Die MNL laedt alle Kern- und Feature-Module direkt per `ssg-ensure`
3. `ssg-ensure` ueberspringt bereits geladene Module (Flag `*ssg-<modul>-loaded*`)
### Menue einrichten (einmalig pro BricsCAD-Installation)
1. `bin/setenv.bat` ausfuehren (setzt `DXFM_LISP`, `DXFMAKRO` u.a.)
2. BricsCAD starten
3. In der BricsCAD-Kommandozeile: `_MENULOAD` eingeben
4. Im Dialog: `menu/SSG_LIB.mnu` auswaehlen und laden
5. BricsCAD laedt automatisch `SSG_LIB.mnl` mit alle Module werden initialisiert
Alternativ per LISP-Kommandozeile in BricsCAD:
```lisp
(command "_.MENULOAD" "C:/10-Develop/gitrepos/dxfmakros/menu/SSG_LIB.mnu")
```
Das Menue bleibt dauerhaft registriert. Nach einem Update der `.mnu`-Datei
genuegt es, BricsCAD neu zu starten oder `_MENULOAD` erneut aufzurufen.
### Voraussetzung
Umgebungsvariable `DXFM_LISP` muss gesetzt sein (via `bin/setenv.bat`).
Die `start_briscad.bat` ruft `setenv.bat` auf und startet BricsCAD ohne `/s` oder `/p`.
Die `start_briscad.bat` ruft `setenv.bat` auf und startet BricsCAD.
### Modulzuordnung im Menue
@@ -60,12 +73,11 @@ Die `start_briscad.bat` ruft `setenv.bat` auf und startet BricsCAD ohne `/s` ode
| Export | `export` | EXPORTSIVAS, EXPORTCSV, CALLPYTHON |
| Doppelklick/Kontextmenue | `SSG_LIB_Commands` | SSG_BLOCKEDIT |
### Legacy-Dateien (nicht mehr verwendet)
### Entfernte Legacy-Dateien
- `bin/startup.scr` - Entfernt (war fuer `/s` Parameter)
- `bin/acaddoc.lsp` - Entfernt (war fuer ACAD-Pfad-basiertes Laden)
- `bin/on_start.lsp` - Nicht mehr fuer Lazy-Loading noetig, kann fuer manuelles Laden aller Module verwendet werden
- `Lisp/ssg_load.lsp` - Laedt alle Module auf einmal (Alternative zum Lazy-Loading)
- `bin/on_start.lsp` - Entfernt; Menue wird jetzt manuell per `_MENULOAD` eingerichtet
Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
+15 -16
View File
@@ -4,26 +4,25 @@ AutoLISP-Routinen für BricsCAD Pro zur automatisierten Erstellung von Förderan
---
## Ladereihenfolge (`ssg_load.lsp`)
## Menue einrichten und Module laden
```lisp
(load "pfad/ssg_load.lsp")
Module werden automatisch ueber `SSG_LIB.mnl` geladen, sobald das Menue
einmalig in BricsCAD registriert wurde:
**Einmalige Einrichtung (BricsCAD-Kommandozeile):**
```
_MENULOAD → menu/SSG_LIB.mnu auswaehlen
```
Die Laderoutine laedt alle Module automatisch in der richtigen Reihenfolge:
BricsCAD laedt daraufhin automatisch `SSG_LIB.mnl`, welches alle Module
per `ssg-ensure` initialisiert (Kern: ssg_core/dbg/dialog/layer, dann
alle Feature-Module). Details: siehe `../CLAUDE.md` Abschnitt "Lademechanismus".
1. `ssg_core.lsp` Kernbibliothek
2. `(ssg-load-config)` JSON-Konfiguration laden (aus `data/json/component_defaults.json`)
3. `ssg_dbg.lsp` Debug-Logging (fuer alle nachfolgenden Module verfuegbar)
4. `ssg_dialog.lsp` Dialog-Patterns
5. `ssg_layer.lsp` Layer-Verwaltung
6. `KreiselInsert.lsp` ILS Kreisel und Eckrad
7. `VarioFoerderer.lsp` Vario-Foerderer und Gefaellestrecken-Basis
8. `Gefaellestrecke.lsp` Gefaellestrecken-Generator (setzt VarioFoerderer voraus)
9. `export.lsp` Export-Funktionen (JSON-Sammler, Python-Export, Omniflo-Export)
10. `tests.lsp` Testbefehle (Python-Aufruf via CALLPYTHON)
11. `OmniModulInsert.lsp` Omniflo-Komponenten (Boegen, Weichen, Verbinder, Edit)
12. `SSG_LIB_Commands.lsp` Dummy-Befehle fuer Menueintraege + SSG_BLOCKEDIT Dispatcher
**Manuell laden (Notfall / Entwicklung):**
```lisp
(load "C:/10-Develop/gitrepos/dxfmakros/Lisp/ssg_load.lsp")
```
`ssg_load.lsp` laedt alle Module in der richtigen Reihenfolge ohne Menueabhaengigkeit.
---
-120
View File
@@ -1,120 +0,0 @@
;; ============================================================
;; 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-LIB-REGISTER-CHECK - Verfuegbarkeit aller Befehle ins Debug-Log schreiben
;; ------------------------------------------------------------
(defun ssg-lib-register-check ()
(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 (strcat "c:KreiselInsert: " (ssg-dbg-fn "C:KREISELINSERT")))
(dbgmsg (strcat "c:KreiselEdit: " (ssg-dbg-fn "C:KREISELEDIT")))
(dbgmsg (strcat "c:ILS_Eckrad: " (ssg-dbg-fn "C:ILS_ECKRAD")))
(dbgmsg (strcat "c:OMNI_AP60: " (ssg-dbg-fn "C:OMNI_AP60")))
(dbgmsg (strcat "c:OMNI_APB_630_90: " (ssg-dbg-fn "C:OMNI_APB_630_90")))
(dbgmsg (strcat "c:OMNI_W90_Einfach: " (ssg-dbg-fn "C:OMNI_W90_EINFACH")))
(dbgflush)
)
(defun ssg-lib-startup ( / lisp-pfad menu-pfad curr-srch menu-datei lsp-fb-pfad)
;; Pfade aus Umgebungsvariablen lesen
(setq lisp-pfad (getenv "DXFM_LISP"))
(setq menu-pfad (getenv "DXFMAKRO"))
;; Pfadtrenner vereinheitlichen: Backslash -> Forward-Slash
(if lisp-pfad (setq lisp-pfad (vl-string-translate "\\" "/" lisp-pfad)))
(if menu-pfad (setq menu-pfad (vl-string-translate "\\" "/" menu-pfad)))
(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...")
;; Library laden (direkt, damit Fehler sichtbar sind)
;; Kein SRCHPATH-Aendern noetig - alle Dateien werden ueber
;; absolute Pfade (Umgebungsvariablen) geladen
(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=1: Doppelklick aktiv, ***DOUBLECLICK-Eintraege steuern Block-Verhalten
(setvar "DBLCLKEDIT" 1)
(dbgflush)
(ssg-lib-register-check)
(princ "\n[SSG_LIB] Startup abgeschlossen.")
)
)
(princ)
)
;; Startup ausfuehren
(ssg-lib-startup)
+2 -2
View File
@@ -239,8 +239,8 @@ pytest>=7.0
### AutoLISP
- SSG_LIB muss geladen sein (ssg_load.lsp)
- `ssg_testrunner.lsp` wird manuell oder via on_start geladen
- SSG_LIB muss geladen sein (Menue per `_MENULOAD` eingerichtet, siehe CLAUDE.md)
- `ssg_testrunner.lsp` wird manuell per `(load "...")` oder ueber das Menue geladen
## Modulspezifische Testfaelle