Files
dxfmakros/CLAUDE.md
T

8.2 KiB
Raw Blame History

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").

  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:

(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 /s Parameter)
  • bin/acaddoc.lsp - Entfernt (war fuer ACAD-Pfad-basiertes Laden)
  • bin/on_start.lsp - Entfernt; Menue wird jetzt manuell per _MENULOAD eingerichtet

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_UPDATE_ATTRIBS JSON-Sammlung und Python-Export (Omniflo-Merkmale/Sum-Zeile via lib/export_csv.py)
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, definiert ssg-ensure Loader
  • ***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 - Projektwurzel
  • DXFM_LISP - Pfad zu Lisp-Dateien (benoetigt fuer ssg-ensure Lazy-Loader)
  • DXFM_BLOCKS - Pfad zu DWG-Bloecken
  • DXFM_DATA - Datenverzeichnis (JSON, DXF)
  • DXFM_LOG - Log-Verzeichnis
  • DXFM_DCL - Pfad zu DCL-Dialogdateien
  • DXFM_CFG - Konfigurationsverzeichnis

Konventionen

  • AutoLISP-Funktionsnamen: ssg-* fuer Kernfunktionen, C:BEFEHLSNAME fuer 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 in data/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)

  1. set_attributs.py - Attribute zu Quell-DXFs hinzufuegen
  2. set_einfuegepkt.py - Einfuegepunkte berechnen und setzen
  3. set_koords.py - Koordinatensysteme (K1-K4) setzen
  4. export_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.