6.8 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:
ssg_core.lsp(Kernel: Umgebung, Layer, Block-Ops, Attribute, Fehlerbehandlung, Config)ssg_dbg.lsp(Debug-Logging fuer alle nachfolgenden Module)ssg_dialog.lsp(DCL-Dialog-Vorlagen)ssg_layer.lsp(Layer-Verwaltung)KreiselInsert.lsp(ILS Kreisel/Eckrad: Insert, Connect, Redraw, Edit, Labels)VarioFoerderer.lsp(Vario-Foerderanlagen)Gefaellestrecke.lsp(Gefaelle-Foerderanlage mit festem Neigungswinkel)export.lsp(JSON-Export, EXPORTSIVAS, EXPORTCSV, OMNI_EXPORT, OMNI_UPDATE_ATTRIBS)tests.lsp(Python-Integration, Export)OmniModulInsert.lsp(Omniflo-Komponenten: Boegen, Weichen, Verbinder, OMNI_EDIT)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)
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_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***POP1bis***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- 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
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)
set_attributs.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.