Files
dxfmakros/CLAUDE.md
T

127 lines
6.7 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 |
|---|---|
| `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:
1. `ssg_core.lsp` (Kernel: Umgebung, Layer, Block-Ops, Attribute, Fehlerbehandlung, Config)
2. `ssg_dbg.lsp` (Debug-Logging fuer alle nachfolgenden Module)
3. `ssg_dialog.lsp` (DCL-Dialog-Vorlagen)
4. `ssg_layer.lsp` (Layer-Verwaltung)
5. `KreiselInsert.lsp` (ILS Kreisel/Eckrad: Insert, Connect, Redraw, Edit, Labels)
6. `VarioFoerderer.lsp` (Vario-Foerderanlagen)
7. `Gefaellestrecke.lsp` (Gefaelle-Foerderanlage mit festem Neigungswinkel)
8. `export.lsp` (JSON-Export, EXPORTSIVAS, EXPORTCSV, OMNI_EXPORT, OMNI_UPDATE_ATTRIBS)
9. `tests.lsp` (Python-Integration, Export)
10. `OmniModulInsert.lsp` (Omniflo-Komponenten: Boegen, Weichen, Verbinder, OMNI_EDIT)
11. `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)
## 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
- `***POP1` bis `***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` - 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 `data/ils/` 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
### 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)
1. `set_attributs.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.