Compare commits

...

4 Commits

Author SHA1 Message Date
m.stangl d961c81caf Koordinaten des Omniflo Tests berichtigt. Text der Sivasnummern noch in den Lisp Test dazu 2026-06-25 17:42:33 +02:00
m.stangl 5f4e73b3af 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>
2026-06-25 16:56:27 +02:00
m.stangl 376f2e1fc8 Revert: bin/on_start.lsp wiederhergestellt
Die Datei wurde faelschlicherweise als unreferenziert geloescht.
on_start.lsp wird von BricsCAD ueber die Startup-Suite (APPLOAD)
automatisch geladen und ruft (ssg-lib-startup) auf, welches per
MENULOAD die SSG_LIB.mnu laedt. Ohne diesen Ladevorgang steht das
SSG_LIB-Menue in BricsCAD nicht zur Verfuegung.

Grund fuer die Verwechslung: der Eintrag in der BricsCAD Startup-
Suite liegt in den lokalen BricsCAD-Einstellungen (ausserhalb Git)
und war daher per grep im Repository nicht auffindbar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 16:49:28 +02:00
m.stangl 2c689cbcf1 Aufraeumaktion: bin/on_start.lsp geloescht, ssg_load.lsp Pfad-Fix
bin/on_start.lsp entfernt:
  Das Laden aller Module uebernimmt heute vollstaendig SSG_LIB.mnl,
  das automatisch beim MENULOAD geladen wird und ssg-ensure fuer
  Lazy-Loading sowie alle Kern- und Feature-Module direkt ausfuehrt.
  on_start.lsp war nirgendwo mehr referenziert (kein .bat, .mnu, .mnl
  oder .lsp rief die Datei oder ssg-lib-startup noch auf).

Lisp/ssg_load.lsp: Pfadermittlung robuster gemacht:
  base-path nutzt jetzt 1) DXFM_LISP, 2) findfile, 3) DWGPREFIX.
  Vorher schlug findfile "ssg_core.lsp" fehl wenn DXFM_LISP nicht im
  BricsCAD-Suchpfad war, load gab still den Fehlerstring zurueck und
  ssg-load-config crashte mit "no function definition".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 16:44:15 +02:00
7 changed files with 275 additions and 372 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.
---
+8 -6
View File
@@ -11,13 +11,15 @@
;; (load "pfad/ssg_dialog.lsp")
;; ============================================================
(defun ssg-load-libs (/ base-path)
;; Pfad dieser Datei als Basis verwenden (AutoCAD 2000+)
(defun ssg-load-libs (/ base-path found)
;; Pfad ermitteln: 1) DXFM_LISP, 2) findfile, 3) DWGPREFIX
(setq base-path
(if (findfile "ssg_core.lsp")
(substr (findfile "ssg_core.lsp") 1
(- (strlen (findfile "ssg_core.lsp")) (strlen "ssg_core.lsp")))
(strcat (getvar "DWGPREFIX"))
(cond
((getenv "DXFM_LISP")
(strcat (vl-string-translate "\\" "/" (getenv "DXFM_LISP")) "/"))
((setq found (findfile "ssg_core.lsp"))
(substr found 1 (- (strlen found) (strlen "ssg_core.lsp"))))
(t (getvar "DWGPREFIX"))
)
)
(load (strcat base-path "ssg_core.lsp") "ssg_core.lsp nicht gefunden")
-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
+10
View File
@@ -225,6 +225,16 @@
(omniflo:test-result-json (strcat "OMNI_" (itoa idx))
sivasnr description hoehe-str "OK")
results-list))
;; Beschriftung ueber dem Block einfuegen
(entmake
(list
'(0 . "TEXT")
'(8 . "ANNOTATION")
(cons 10 (list x-val (+ y-val 50) 0))
'(40 . 30)
(cons 1 sivasnr)
)
)
)
(progn
(setq anzahl-fehler (1+ anzahl-fehler))
+215 -215
View File
File diff suppressed because it is too large Load Diff