5.2 KiB
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:
ssg_core.lsp(Kernel: Umgebung, Layer, Block-Ops, Attribute, Fehlerbehandlung)ssg_dbg.lsp(Debug-Logging)ssg_dialog.lsp(DCL-Dialog-Vorlagen)ssg_layer.lsp(Layer-Verwaltung)KreiselInsert.lsp(ILS Kreisel/Eckrad)VarioFoerderer.lsp(Vario-Foerderanlagen)tests.lsp(Python-Integration, Export)OmniModulInsert.lsp(Omniflo-Komponenten)SSG_LIB_Commands.lsp(Menu-Command-Definitionen)
Umgebungsvariablen
Werden via bin/setenv.bat gesetzt. Wichtigste:
DXFMAKRO- ProjektwurzelDXFM_LISP- Pfad zu Lisp-DateienDXFM_BLOCKS- Pfad zu DWG-BloeckenDXFM_DATA- Datenverzeichnis (JSON, DXF)DXFM_LOG- Log-Verzeichnis
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
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)
attradd.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.