# dxfmakros AutoLISP-Makros fuer BricsCAD Pro zur automatisierten Erstellung von Foerderanlagen- und Kreisel-Layouts. ## Menustruktur (SSG_LIB) ``` SSG_LIB ├── ILS │ ├── Kreisel-Module │ │ ├── Einfuegen → KreiselInsert │ │ ├── Verbinden → KreiselConnect │ │ ├── Bearbeiten → KreiselEdit │ │ └── Eckrad → ILS_Eckrad │ ├── Zusatzmodul │ │ ├── BTMT-Beladung → ILS_BTMT_Beladung │ │ └── BTMT-Entladung → ILS_BTMT_Entladung │ ├── Foerderer │ │ ├── ETF Etagenfoerderer → ILS_ETF_Etagenfoerderer │ │ ├── TEF Strecke → ILS_TEF_Strecke │ │ ├── VarioFoerderer → FOERDERANLAGE │ │ ├── Kurven angetr. Aussen → ILS_K{90,60,30}{LA,RA} │ │ ├── Kurven angetr. Innen → ILS_K{90,60,30}{LI,RI} │ │ └── Gefaellestrecke → ILS_G{K90,K60,K30}{L,R} │ └── ILS Schliessen ├── Omniflo │ ├── Boegen │ │ ├── 90 → OMNI_APB_630_90 │ │ ├── 67.5 → OMNI_APB_550_675 │ │ ├── 45 → OMNI_APB_630_45 │ │ ├── 22.5 → OMNI_APB_550_225 │ │ └── 180 → OMNI_APB_650_180 │ ├── Aluprofil Gerade │ │ ├── AP 60 → OMNI_AP60 │ │ ├── AP 110 → OMNI_AP110 │ │ └── APG 110 → OMNI_APG110 │ ├── Weiche 90 Grad │ │ ├── Einfach → OMNI_W90_Einfach │ │ ├── Doppel → OMNI_W90_Doppel │ │ └── Dreiwege → OMNI_W90_Dreiwege │ ├── Weiche 45 Grad │ │ ├── Einfach → OMNI_W45_Einfach │ │ ├── Doppel → OMNI_W45_Doppel │ │ └── Dreiwege → OMNI_W45_Dreiwege │ ├── Weichen Parallel │ │ ├── Einfach → OMNI_WP_Einfach │ │ ├── Doppel → OMNI_WP_Doppel │ │ └── Dreiwege → OMNI_WP_Dreiwege │ ├── Weichenkoerper │ │ ├── Einfach → OMNI_WK_Einfach │ │ ├── Doppel → OMNI_WK_Doppel │ │ └── Dreiwege → OMNI_WK_Dreiwege │ ├── Weichenkombinationen │ │ ├── Delta → OMNI_WKomb_Delta │ │ └── Star → OMNI_WKomb_Star │ ├── TEF Elemente │ │ ├── Umlenkspannst. rechts → OMNI_TEF_UmlenkR │ │ ├── Umlenkspannst. links → OMNI_TEF_UmlenkL │ │ ├── Antriebst. links → OMNI_TEF_AntriebL │ │ ├── Antriebst. rechts → OMNI_TEF_AntriebR │ │ └── TEF Gerade → OMNI_TEF_Gerade │ └── KettenFoerderer → OMNI_KettenFoerderer └── External ├── Call Python → CALLPYTHON ├── Export Sivas → EXPORTSIVAS └── Export CSV → EXPORTCSV ``` ## Befehle nach Modul ### KreiselInsert.lsp - Kreisel Modul-Einfuegesystem Zeichnet ILS-Kreiselmodule als Compound-Bloecke mit konfigurierbarem Abstand, Typ und Attributen. | Befehl | Beschreibung | | --- | --- | | `KreiselInsert` | Modul an manuell gewaehltem Punkt einfuegen (Abstand, Drehung, Hoehe, Typ interaktiv) | | `KreiselConnect` | Smart Connect: Kreisel zwischen zwei parallelen Linien einfuegen, berechnet Position/Abstand/Rotation automatisch | | `KreiselEdit` | Bestehenden Kreisel per DCL-Dialog bearbeiten (Name, Abstand, Hoehe, Ausrichtung, Drehrichtung, Typ) | | `KreiselRedraw` | Kreisel mit optionalem neuem Abstand/Hoehe neu zeichnen, Attribute bleiben erhalten | | `KreiselQuick` | Schnelleinfuegen mit Standardparametern (horizontal) | | `KreiselParams` | Aktuelle Kreisel-Parameterkonfiguration anzeigen | | `ILS_Eckrad` | Einzelnen AN8-Block (Antriebs-/Eckrad) an gewaehltem Punkt einfuegen | | `KreiselLabelPos` | Label-Position (X/Y-Offset) konfigurieren | | `KreiselLabelHoehe` | Label-Texthoehe konfigurieren | | `KreiselLabelSetup` | Label-Darstellung konfigurieren (Hoehe, Farbe, Abstand, Schriftart) | ### OmniModulInsert.lsp - Omniflo Komponenten Einfuegen von Omniflo-Standardkomponenten (Boegen, Geraden, Weichen, TEF-Elemente). | Befehl | Beschreibung | | --- | --- | | `OMNI_LOAD` | Omniflo-Komponentendaten aus JSON-Dateien laden | | `OMNI_INFO_BOGEN` | Info zu einem Omniflo-Bogen nach Sivas-ID anzeigen | | `OMNI_INFO_WEICHE` | Info zu einer Omniflo-Weiche nach Sivas-ID anzeigen | | `OMNI_APB_*` | Boegen einfuegen (90, 67.5, 45, 22.5, 180 Grad) | | `OMNI_AP60/AP110/APG110` | Aluprofil-Geraden einfuegen | | `OMNI_W90/W45/WP/WK_*` | Weichen einfuegen (Einfach, Doppel, Dreiwege) | | `OMNI_WKomb_Delta/Star` | Weichenkombinationen einfuegen | | `OMNI_TEF_*` | TEF-Elemente einfuegen (Umlenk-/Antriebsstationen, Gerade) | | `OMNI_KettenFoerderer` | Kettenfoerderer einfuegen | ### VarioFoerderer.lsp - Foerderanlage Generator (v24.4) Generiert komplette Vario-Foerderanlagen mit Vertikalboegen, Motor-/Spannstationen, Staustrecken und Ein-/Ausschleus-Elementen. | Befehl | Beschreibung | | --- | --- | | `FOERDERANLAGE` | Interaktiver Generator: Zwei Punkte oder manuelle Distanz/Hoehe, berechnet optimalen Bogenwinkel | | `FOERDERTEST` | Automatischer Testlauf (Distanz=6000, Hoehe=2000, Richtung=Auf), speichert als DXF | Unterstuetzte Bogenwinkel: 3, 9, 12, 15, 24, 36, 48 Grad ### ssg_layer.lsp - Layerverwaltung | Befehl | Beschreibung | | --- | --- | | `SSG-LayerSet` | Objekt anklicken, dessen Layer wird aktiv | | `SSG-LayerInfo` | Layer eines angeklickten Objekts anzeigen | | `SSG-LayerMove` | Selektierte Objekte auf Ziel-Layer verschieben | | `SSG-LayerCopy` | Selektierte Objekte auf Ziel-Layer kopieren | | `SSG-LayerMoveType` | Alle Objekte gleichen Typs von Referenz- auf Ziel-Layer verschieben | | `SSG-LayerOff` | Layer per Klick ausschalten (mehrfach moeglich) | | `SSG-LayerFreeze` | Layer per Klick einfrieren (mehrfach moeglich) | | `SSG-FreezeAll` | Alle Layer ausser dem angeklickten einfrieren | | `SSG-ThawAll` | Alle eingefrorenen Layer auftauen | | `SSG-LayerOnAll` | Alle ausgeschalteten Layer einschalten | | `SSG-LayerDelete` | Layer und alle Objekte darauf loeschen (mit Bestaetigung) | ### tests.lsp - Export und Python-Integration | Befehl | Beschreibung | | --- | --- | | `CALLPYTHON` | Python-Skripte via CLI aufrufen, Ausgabe loggen | | `EXPORTSIVAS` | Daten im Sivas-Format exportieren | | `EXPORTCSV` | Zeichnungsdaten als CSV exportieren | ## Kernbibliotheken (Lisp/) | Datei | Beschreibung | | --- | --- | | `ssg_core.lsp` | Kernel: Umgebung, Layer-Ops, Block-Ops, Attribut-Ops, Fehlerbehandlung | | `ssg_dialog.lsp` | Dialog-Vorlagen: Slide-Preview, Modul-Dialog, Block-Einfuegesequenz | | `ssg_layer.lsp` | Layer-Verwaltungsbefehle | | `ssg_load.lsp` | Loader: Laedt alle SSG-Bibliotheken in korrekter Reihenfolge | | `on_start.lsp` | Startup-Skript: Setzt Umgebung und laedt Libraries | ## Projektstruktur ```text dxfmakros/ ├── Blocks/ # DWG-Bloecke (AN8, SP8, Vertikalboegen, etc.) ├── Lisp/ # AutoLISP-Makros und Kernbibliotheken ├── bin/ # Hilfs-Skripte (setenv, create_tests, etc.) ├── cfg/ # Konfigurationsdateien (attradd.cfg) ├── data/ # Quelldaten (JSON, DXF) - nicht im Git ├── dcl/ # DCL-Dialogdefinitionen (kreisel_edit.dcl) ├── doc/ # Dokumentation und Referenz-DXFs ├── examples/ # Beispieldateien ├── lib/ # Python-Skripte (export_csv.py, etc.) ├── logs/ # Logdateien - nicht im Git ├── menu/ # BricsCAD-Menudefinition (SSG_LIB.mnu) ├── results/ # Ergebnisse / Exporte - nicht im Git ├── tests/ # Testskripte und Referenzdaten ├── LICENSE ├── README.md └── requirements.txt ``` ## Umgebungsvariablen | Variable | Beschreibung | | --- | --- | | `DXFMAKRO` | Wurzelverzeichnis des Projekts | | `DXFM_BLOCKS` | Pfad zum Blocks-Verzeichnis | | `DXFM_LISP` | Pfad zu den LISP-Dateien | | `DXFM_RESULTS` | Pfad fuer DXF-Exporte | | `DXFM_BIN` | Skriptverzeichnis | | `DXFM_LIB` | Python-Quellcode | | `DXFM_CFG` | Konfigurationsdateien | | `DXFM_TESTS` | Testverzeichnis | | `DXFM_DATA` | Datenverzeichnis | | `BRISCAD` | Pfad zur BricsCAD-Executable | ## Einrichtung 1. `bin\setenv.bat` ausfuehren (setzt alle Umgebungsvariablen) 2. BricsCAD starten - `on_start.lsp` laedt alle Libraries automatisch via `startup.scr` 3. Menu `SSG_LIB` nutzen oder Befehle in der Kommandozeile ausfuehren ## Tests ```bat bin\create_tests.bat ``` Erzeugt eine Test-DXF, fuehrt Kreisel-Einfuege- und Exportbefehle aus, und validiert die Ergebnisse gegen Referenzdateien in `tests/references/`. ## Lizenz MIT License — siehe [LICENSE](LICENSE) ## Autor Michael Stangl (GitHub: mistamichael)