Files
dxfmakros/CLAUDE.md
T
m.stangl fd58ef612f attradd.py und add_attr.bat in set_attributs.py/.bat umbenannt
lib/attradd.py -> lib/set_attributs.py: Name besser passend zum
Skript-Zweck (setzt Attribute, analog set_einfuegepkt / set_koords).
bin/add_attr.bat -> bin/set_attributs.bat entsprechend angepasst.

cfg/attradd.cfg: Kommentar auf neuen Skriptnamen aktualisiert.
HOEHE/DREHUNG-Eintraege aus [bogen] und [weiche] entfernt, da diese
Attribute jetzt dynamisch via ssg-cfg-or aus component_defaults.json
bezogen werden (nicht mehr als statische ATTDEF-Defaults noetig).
Ebenso RADIUS aus [weiche] entfernt (war redundant zu KurvenWinkel).

doc/tools.md und CLAUDE.md: Alle Verweise auf attradd.py auf
set_attributs.py aktualisiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 11:25:28 +02:00

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

Projektstruktur

Verzeichnis Inhalt
Lisp/ AutoLISP-Makros und Kernbibliotheken
bin/ Hilfs-Skripte (setenv, on_start.lsp)
cfg/ Konfigurationsdateien
data/ JSON-Daten, DXF-Quellen, Block-Libraries
data/ils/ DWG-Bloecke fuer ILS-Kreisel/Eckrad (AN8, SP8, AP-Typen)
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 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

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

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.