Files
dxfmakros/CLAUDE.md
T

6.7 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 Format (in menu/)

Projektstruktur

Verzeichnis Inhalt
Lisp/ AutoLISP-Makros und Kernbibliotheken
bin/ Hilfs-Skripte (setenv, on_start.lsp, startup.scr)
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)
tests/ Testskripte und Referenzdaten

Ladereihenfolge (wichtig)

on_start.lsp -> ssg_load.lsp -> Bibliotheken in Reihenfolge:

  1. ssg_core.lsp (Kernel: Umgebung, Layer, Block-Ops, Attribute, Fehlerbehandlung, Config)
  2. ssg_dbg.lsp (Debug-Logging fuer alle nachfolgenden Module)
  3. ssg_dialog.lsp (DCL-Dialog-Vorlagen)
  4. ssg_layer.lsp (Layer-Verwaltung)
  5. KreiselInsert.lsp (ILS Kreisel/Eckrad: Insert, Connect, Redraw, Edit, Labels)
  6. VarioFoerderer.lsp (Vario-Foerderanlagen)
  7. Gefaellestrecke.lsp (Gefaelle-Foerderanlage mit festem Neigungswinkel)
  8. export.lsp (JSON-Export, EXPORTSIVAS, EXPORTCSV, OMNI_EXPORT, OMNI_UPDATE_ATTRIBS)
  9. tests.lsp (Python-Integration, Export)
  10. OmniModulInsert.lsp (Omniflo-Komponenten: Boegen, Weichen, Verbinder, OMNI_EDIT)
  11. SSG_LIB_Commands.lsp (Dummy-Befehle fuer Menue, SSG_BLOCKEDIT Dispatcher)

Nicht automatisch geladen (manuell/standalone):

  • menu-inventory.lsp (BricsCAD Diagnostik: Menuegruppen, Plugins, LISP-Apps. Befehl: MenuInventory)

AutoLISP-Module

Datei Befehle Beschreibung
ssg_core.lsp - Kernel: ssg-start/ssg-end, ssg-cfg-or, ssg-attrib-read/write, Layer/Block-Ops
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)

  • ***MENUGROUP=SSG_LIB - Menuegruppenname
  • ***POP1 bis ***POP4 - Hauptmenues (ILS, Omniflo, Geruest, 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
  • DXFM_BLOCKS - Pfad zu DWG-Bloecken
  • DXFM_DATA - Datenverzeichnis (JSON, DXF)
  • DXFM_LOG - Log-Verzeichnis

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.