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:
@@ -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
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user