100 lines
5.1 KiB
Markdown
100 lines
5.1 KiB
Markdown
|
|
# 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 |
|
|
|---|---|
|
|
| `Blocks/` | DWG-Bloecke (Vertikalboegen, Stationen, etc.) |
|
|
| `Lisp/` | AutoLISP-Makros und Kernbibliotheken |
|
|
| `bin/` | Hilfs-Skripte (setenv, on_start.lsp) |
|
|
| `cfg/` | Konfigurationsdateien |
|
|
| `data/` | JSON-Daten, DXF-Quellen, Block-Libraries |
|
|
| `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 `Blocks/` 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` |
|
|
| `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)
|
|
|
|
1. `attradd.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.
|