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>
8.2 KiB
dxfmakros - Projektanweisungen
Projektbeschreibung
AutoLISP-Makros (SSG_LIB) fuer BricsCAD Pro zur automatisierten Erstellung von Foerderanlagen-Layouts (ILS Kreisel, Omniflo, Variofoerderer, Geruest). Ziel ist der Ersatz proprietaerer Tools (Bihler Omniflo, Bihler Geruest, Ruledesigner) durch eigene parametrische Makros.
Technologie-Stack
- CAD-System: BricsCAD Pro (AutoCAD-kompatibel)
- Hauptsprache: AutoLISP (.lsp)
- Hilfssprache: Python (Export-Skripte in
lib/) - Datenformate: DXF/DWG (Bloecke), JSON (Komponentendaten), CSV (Export)
- Dialoge: DCL (Dialog Control Language, in
dcl/) - Menu: BricsCAD .mnu/.mnl Format (in
menu/)
Projektstruktur
| Verzeichnis | Inhalt |
|---|---|
Lisp/ |
AutoLISP-Makros und Kernbibliotheken |
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) |
data/json/ |
Komponentendaten (Masse, Sivas-IDs) |
data/block_libraries/ |
DXF Block-Libraries (ils_library.dxf) |
dcl/ |
DCL-Dialogdefinitionen |
doc/ |
Dokumentation, Entwicklungsplan |
lib/ |
Python-Skripte (DXF-Bearbeitung, Export) |
menu/ |
BricsCAD-Menudefinition (SSG_LIB.mnu, SSG_LIB.mnl) |
tests/ |
Testskripte und Referenzdaten |
Lademechanismus (Lazy Loading via MNL)
Das Laden der LISP-Module erfolgt ueber das Menuesystem. Voraussetzung ist, dass das Menue einmalig in BricsCAD geladen wurde (siehe unten: "Menue einrichten").
- BricsCAD laedt beim Start automatisch
SSG_LIB.mnl(gleichnamige MNL-Datei zum Menue) - Die MNL laedt alle Kern- und Feature-Module direkt per
ssg-ensure ssg-ensureueberspringt bereits geladene Module (Flag*ssg-<modul>-loaded*)
Menue einrichten (einmalig pro BricsCAD-Installation)
bin/setenv.batausfuehren (setztDXFM_LISP,DXFMAKROu.a.)- BricsCAD starten
- In der BricsCAD-Kommandozeile:
_MENULOADeingeben - Im Dialog:
menu/SSG_LIB.mnuauswaehlen und laden - BricsCAD laedt automatisch
SSG_LIB.mnlmit – alle Module werden initialisiert
Alternativ per LISP-Kommandozeile in BricsCAD:
(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.
Modulzuordnung im Menue
| Menue-Bereich | Modul | Befehle |
|---|---|---|
| Kreisel-Module | KreiselInsert |
KreiselInsert, KreiselConnect, KreiselEdit, ILS_Eckrad |
| Zusatzmodul/Foerderer/Kurven | SSG_LIB_Commands |
ILS_BTMT_, ILS_ETF_, ILS_K*, ILS_GK* |
| VarioFoerderer | VarioFoerderer |
FOERDERANLAGE |
| Gefaellestrecke | Gefaellestrecke |
GEFAELLESTRECKE |
| Omniflo (komplett) | OmniModulInsert |
OMNI_APB_, OMNI_W, OMNI_AP, OMNI_TEF, OMNI_TV_, OMNI_EDIT |
| Export | export |
EXPORTSIVAS, EXPORTCSV, CALLPYTHON |
| Doppelklick/Kontextmenue | SSG_LIB_Commands |
SSG_BLOCKEDIT |
Entfernte Legacy-Dateien
bin/startup.scr- Entfernt (war fuer/sParameter)bin/acaddoc.lsp- Entfernt (war fuer ACAD-Pfad-basiertes Laden)bin/on_start.lsp- Entfernt; Menue wird jetzt manuell per_MENULOADeingerichtet
Detaillierte Dokumentation aller Funktionen und Befehle: siehe Lisp/README.md.
AutoLISP-Module
| Datei | Befehle | Beschreibung |
|---|---|---|
ssg_core.lsp |
- | Kernel: ssg-start/ssg-end, ssg-cfg-or, ssg-attrib-read/write, Layer/Block-Ops |
ssg_dbg.lsp |
- | Debug-Logging (dbgopen, dbgmsg, dbgflush, dbgclose) |
ssg_dialog.lsp |
- | DCL-Dialog-Vorlagen und Hilfsfunktionen |
ssg_layer.lsp |
- | Layer-Verwaltung |
KreiselInsert.lsp |
KreiselInsert, KreiselConnect, KreiselRedraw, KreiselQuick, KreiselEdit, KreiselParams, KreiselLabelSetup, KreiselLabelPos, KreiselLabelHoehe, ILS_Eckrad | ILS Kreisel und Eckrad komplett in AutoLISP |
VarioFoerderer.lsp |
FOERDERANLAGE | Vario-Foerderanlagen Generator |
Gefaellestrecke.lsp |
GEFAELLESTRECKE | Gefaelle-Foerderanlage (AUS -> Staustrecke skaliert -> Separator -> EIN) |
export.lsp |
EXPORTSIVAS, EXPORTCSV, OMNI_EXPORT, OMNI_UPDATE_ATTRIBS | JSON-Sammlung und Export (Python-Aufruf oder LISP-nativ) |
OmniModulInsert.lsp |
OMNI_LOAD, OMNI_APB_, OMNI_W*, OMNI_AP60/AP110, OMNI_TEF, OMNI_TV_, OMNI_APBW_*, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen, Verbinder, Transferwagen, Edit-Dialog |
SSG_LIB_Commands.lsp |
ILS_BTMT_, ILS_ETF_, ILS_K*, ILS_GK*, SSG_BLOCKEDIT | Dummy-Befehle fuer Menue + Doppelklick/Kontextmenue-Dispatcher |
menu-inventory.lsp |
MenuInventory | BricsCAD Diagnostik (Menuegruppen, Plugins, Startdateien) |
DCL-Dialoge
| Datei | Verwendet von |
|---|---|
kreisel_edit.dcl |
KreiselEdit (KreiselInsert.lsp) |
omniflo_boegen.dcl |
OMNI_APB_* (OmniModulInsert.lsp) |
omniflo_weichen.dcl |
OMNI_W*_* (OmniModulInsert.lsp) |
Menue (SSG_LIB.mnu + SSG_LIB.mnl)
SSG_LIB.mnu- Menuedefinition mit Lazy-Loading ((ssg-ensure "Modul") Befehl)SSG_LIB.mnl- Automatisch geladen mit dem Menue, definiertssg-ensureLoader***MENUGROUP=SSG_LIB- Menuegruppenname***POP1- Hauptmenue (ILS, Omniflo, Export)***DOUBLECLICK- Doppelklick auf INSERT-Bloecke ruft SSG_BLOCKEDIT auf***POP501- Rechtsklick-Kontextmenue (KreiselEdit, OMNI_EDIT, SSG_BLOCKEDIT)
Umgebungsvariablen
Werden via bin/setenv.bat gesetzt. Wichtigste:
DXFMAKRO- ProjektwurzelDXFM_LISP- Pfad zu Lisp-Dateien (benoetigt fuer ssg-ensure Lazy-Loader)DXFM_BLOCKS- Pfad zu DWG-BloeckenDXFM_DATA- Datenverzeichnis (JSON, DXF)DXFM_LOG- Log-VerzeichnisDXFM_DCL- Pfad zu DCL-DialogdateienDXFM_CFG- Konfigurationsverzeichnis
Konventionen
- AutoLISP-Funktionsnamen:
ssg-*fuer Kernfunktionen,C:BEFEHLSNAMEfuer User-Commands - Alle Texte in Dateien ohne Umlaute (ae, oe, ue statt ae, oe, ue)
- Bloecke werden als DWG in
data/ils/abgelegt, Block-Libraries als DXF indata/block_libraries/ - Komponentendaten (Masse, Sivas-IDs) liegen als JSON in
data/json/ - Sprache im Code und Kommentaren: Deutsch
Python-Bibliotheken
Standalone-Skripte (lib/) - laufen extern mit ezdxf
Abhaengigkeiten: ezdxf, Standard-Library. Benoetigen Umgebungsvariablen (DXFM_DATA, DXFM_RESULTS, DXFM_CFG).
| Skript | Beschreibung |
|---|---|
omniflo_utils.py |
Gemeinsame Hilfsfunktionen fuer Omniflo-Skripte: ROW_GROUPS (Reihen-Gruppierung), SWITCH_FILTERS (Schalter-Filter), build_row_layout, import_element_as_block, draw_cross, load_omniflo_data |
set_einfuegepkt.py |
Setzt $INSBASE (Einfuegepunkt) in Omniflo-DXF-Dateien. Schalter je Typ: --boegen, --weichen45, --weichen90, --weichenkoerper, --weichen-parallel, --delta, --dreifachweiche, --sternweiche, --show-omniflo |
set_koords.py |
Setzt Koordinatensystem-Bloecke (K1-K4) in Omniflo-DXF-Dateien. Schalter: --k1set bis --k4set, --set-all, --force, --show-omniflo, --test, --number |
set_attributs.py |
Fuegt ATTDEF-Attribute zu Omniflo-DXF-Dateien hinzu. Liest Konfiguration aus cfg/attradd.cfg. Schalter: --number, --dry-run |
export_sivas.py |
Erzeugt Sivas-Export-CSV mit Summierungszeilen (ILS Automation, Omniflo Sum). Aufruf: python export_sivas.py <export_raw.json> <data_dir> <output.csv> |
export_csv.py |
Erzeugt einfache Item-Liste als CSV (ohne Summierung). Aufruf: python export_csv.py <export_raw.json> <data_dir> <output.csv> |
split_block_library.py |
Teilt ils_library.dxf in einzelne DXF-Dateien pro Block auf (mit Abhaengigkeiten). Export-Prefixe: Vario_, Staustrecke_, 3D_AS, 3D_ES |
Typische Verarbeitungskette (Omniflo-DXF)
set_attributs.py- Attribute zu Quell-DXFs hinzufuegenset_einfuegepkt.py- Einfuegepunkte berechnen und setzenset_koords.py- Koordinatensysteme (K1-K4) setzenexport_sivas.py/export_csv.py- Export aus Zeichnung
Entwicklungsstand
Siehe doc/Entwicklungsplan.md fuer Meilensteinplanung und Aufwandsschaetzung.
Fertig (DONE): ILS Kreisel, ILS Eckrad, ILS Variofoerderer, Omniflo Boegen, Omniflo Weichen.