Files
dxfmakros/CLAUDE.md
T

5.1 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
Blocks/ DWG-Bloecke (Vertikalboegen, Stationen, etc.)
Lisp/ AutoLISP-Makros und Kernbibliotheken
bin/ Hilfs-Skripte (setenv, on_start.lsp)
cfg/ Konfigurationsdateien
data/ JSON-Daten, DXF-Quellen, Block-Libraries
dcl/ DCL-Dialogdefinitionen
doc/ Dokumentation, Entwicklungsplan
lib/ Python-Skripte (CSV/Sivas-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)
  2. ssg_dbg.lsp (Debug-Logging)
  3. ssg_dialog.lsp (DCL-Dialog-Vorlagen)
  4. ssg_layer.lsp (Layer-Verwaltung)
  5. KreiselInsert.lsp (ILS Kreisel/Eckrad)
  6. VarioFoerderer.lsp (Vario-Foerderanlagen)
  7. tests.lsp (Python-Integration, Export)
  8. OmniModulInsert.lsp (Omniflo-Komponenten)
  9. SSG_LIB_Commands.lsp (Menu-Command-Definitionen)

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 Blocks/ 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

PyRx-Module (lib/elemente/) - laufen innerhalb BricsCAD via PyRx

Abhaengigkeiten: PyRx (PyRx, PyDb, PyGe, PyEd), wx (wxPython fuer Dialoge).

Modul Beschreibung
elemente/utils.py Gemeinsame Hilfsfunktionen: Block-Pfad, Nummernvergabe (component_next_number), Layer/Textstil anlegen, DWG-Bloecke laden, Block mit Attributen einfuegen
elemente/kreisel.py ILS Kreisel komplett in Python. Befehle: KreiselInsert, KreiselConnect, KreiselRedraw, KreiselQuick, KreiselEdit, KreiselParams, KreiselLabelSetup, KreiselLabelPos, KreiselLabelHoehe. Enthaelt KreiselEditDialog (wxPython, ersetzt kreisel_edit.dcl)
elemente/eckrad.py ILS Eckrad in Python. Befehle: ILS_Eckrad, EckradEdit. Enthaelt EckradEditDialog (wxPython)
elemente/dblclick.py Dispatcher SSG_BLOCKEDIT fuer Rechtsklick-Bearbeitung. Erkennt KREISEL_/ECKRAD_ Bloecke und oeffnet passenden wx-Dialog, sonst BEDIT

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
attradd.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>
testpycall.py Testskript fuer LISP-Python-Aufruf via CALLPYTHON

Typische Verarbeitungskette (Omniflo-DXF)

  1. attradd.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.