Files
dxfmakros/README.md
T

207 lines
9.2 KiB
Markdown

# 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)