[ADD] dbg2lsp.py: AutoLISP-Funktionen automatisch mit ssg_dbg instrumentieren

Neues Entwickler-Tool (bin/dbg2lsp.bat + lib/dbg2lsp.py), das das manuelle
Einfuegen von dbgf/dbg/dbgreturn/dbgopen/dbgclose automatisiert:
- --method NAME: dbgf + dbg je Parameter + dbgreturn um die letzte Rumpf-Form
- --recursive: verfolgt den Aufrufgraphen ueber Dateigrenzen hinweg (Builtins
  werden automatisch uebersprungen, da sie kein defun im Suchpfad haben)
- --add-open DATEI METHODE: dbgopen/dbgclose fuer einen Einstiegspunkt
  (z.B. ein c:BEFEHL-Kommando), inkl. aller (exit)-Stellen
Dokumentiert in doc/dbg2lsp.md, Kurzeintrag in CLAUDE.md.

Ausserdem: set_attributs.py aus doc/tools.md und CLAUDE.md entfernt - das
Skript existiert nicht mehr in lib/.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-28 15:04:45 +02:00
parent 1d5d7c141e
commit d7bcfc3edb
5 changed files with 949 additions and 167 deletions
-162
View File
@@ -35,18 +35,6 @@ Diese Werkzeuge ermöglichen die massenhafte Aufbereitung von einzelnen dxf Date
- [--number SIVASNR](#--number-sivasnr-1)
- [Uebersicht K-Zuordnung](#uebersicht-k-zuordnung)
- [Umgebungsvariablen](#umgebungsvariablen-1)
- [set\_attributs](#set_attributs)
- [Aufruf](#aufruf-2)
- [Datenquellen](#datenquellen-2)
- [Ablauf](#ablauf-2)
- [Konfiguration (attradd.cfg)](#konfiguration-attraddcfg)
- [Attribute Omniflo Kurve (Bogen)](#attribute-omniflo-kurve-bogen)
- [Attribute Omniflo Weiche](#attribute-omniflo-weiche)
- [CSV-Export-Felder (Merkmale)](#csv-export-felder-merkmale)
- [Schalter](#schalter-2)
- [--number SIVASNR / -n SIVASNR](#--number-sivasnr---n-sivasnr)
- [--dry-run / -d](#--dry-run---d)
- [Umgebungsvariablen](#umgebungsvariablen-2)
# set_einfuegepunkt
@@ -274,153 +262,3 @@ Nur die angegebene 9-stellige Sivasnr verarbeiten. Kombinierbar mit jedem Schalt
|---|---|
| `DXFM_DATA` | Pfad zu `data/` (JSON + DXF Quelldateien) |
| `DXFM_RESULTS` | Pfad zu `results/` (Ausgabe) |
---
# set_attributs
Fuegt Attribute (ATTDEF) zu allen Omniflo DXF-Dateien hinzu und verpackt die
gesamte Geometrie in eine benannte Blockdefinition. Die Attribut-Tags und deren
Werte werden ueber eine Konfigurationsdatei gesteuert.
**Voraussetzung:** Die Quelldateien in `data/omniflo/` sollten zuvor durch
`set_einfuegepkt.py` verarbeitet worden sein, damit `$INSBASE` korrekt gesetzt ist.
## Aufruf
```
python lib/set_attributs.py [--number SIVASNR] [--dry-run]
```
## Datenquellen
| Pfad | Inhalt |
|---|---|
| `cfg/attradd.cfg` | Attribut-Konfiguration (Tags und Quellfelder je Elementtyp) |
| `data/json/omniflo_boegen.json` | Liste aller Boegen mit Metadaten |
| `data/json/omniflo_weichen.json` | Liste aller Weichen mit Metadaten |
| `data/omniflo/*.dxf` | DXF-Quelldateien (Basis: Ausgabe von `set_einfuegepkt.py`) |
## Ablauf
1. Konfiguration aus `cfg/attradd.cfg` lesen
2. JSON-Daten laden und Lookup-Tabelle (Sivasnr -> Typ + Eintrag) erstellen
3. Fuer jede Sivasnr die DXF-Datei oeffnen, bestehende ATTDEFs entfernen
4. Neue ATTDEFs gemaess Config einfuegen (Layer `ATTRIB`, unterhalb der Geometrie)
5. Alle Entities (Geometrie + ATTDEFs) in eine Blockdefinition verschieben:
- Blockname = Sivasnummer (identisch mit dem Dateinamen ohne `.dxf`)
- Basispunkt der Blockdefinition = `$INSBASE` aus dem DXF-Header
6. Im Modelspace einen INSERT auf den neuen Block einfuegen, mit ATTRIB-Entities
befuellt aus den ATTDEF-Standardwerten (ermoeglicht Attributanzeige per Klick in BricsCAD)
7. Ergebnis nach `results/omniflo/` speichern
## Ausgabestruktur (DXF)
```
BLOCKS
BLOCK "<sivasnr>" (Basispunkt = $INSBASE)
<Geometrie-Entities>
ATTDEF BESCHR = "..."
ATTDEF ARTINR = "..."
...
ENDBLK
ENTITIES (Modelspace)
INSERT "<sivasnr>" at (0, 0)
ATTRIB BESCHR = "..."
ATTRIB ARTINR = "..."
...
SEQEND
```
Der INSERT im Modelspace traegt die konkreten Attributwerte und ist in BricsCAD
per Klick editierbar. Die Blockdefinition mit ATTDEFs dient als Vorlage fuer
den Block-Import via `import_element_as_block` (omniflo_utils.py).
## Konfiguration (attradd.cfg)
Die Config-Datei ist im INI-Format mit Abschnitten je Elementtyp.
Quellwerte koennen sein:
- **JSON-Feldname** (z.B. `ProfilTyp`) - Wert wird aus dem JSON-Eintrag gelesen
- **Fester Text** in Anfuehrungszeichen (z.B. `"Omniflo Kurve"`)
- **Platzhalter** `{sivasnr}` - wird durch die Sivasnr ersetzt
### Attribute Omniflo Kurve (Bogen)
| ATTDEF-Tag | Quelle | Beschreibung |
| --- | --- | --- |
| `BESCHR` | `ProfilTyp` | Profilbezeichnung aus JSON |
| `ARTINR` | `Sivasnr` | Sivas-Artikelnummer |
| `TEILEART` | `"Omniflo Kurve"` | Fester Typname |
| `RADIUS` | `Radius` | Kurvenradius in mm |
| `WINKEL` | `KurvenWinkel` | Kurvenwinkel in Grad |
| `SIVASNR_TEF` | `SivasnrTEF` | Sivas-Nr. des TEF-Antriebs (leer = kein Antrieb) |
| `LAYER` | *(aus [layer])* | Layer-Name gemaess Kategorisierung |
### Attribute Omniflo Weiche
| ATTDEF-Tag | Quelle | Beschreibung |
| --- | --- | --- |
| `BESCHR` | `ProfilTyp` | Profilbezeichnung aus JSON |
| `ARTINR` | `Sivasnr` | Sivas-Artikelnummer |
| `TEILEART` | `"Omniflo Weiche"` | Fester Typname |
| `WEICHENTYP` | `WeichenTyp` | Weichentyp (Einzelweiche, Doppelweiche, Dreiwegeweiche, ...) |
| `WINKEL` | `KurvenWinkel` | Kurvenwinkel in Grad |
| `RICHTUNG` | `KurvenRichtung` | Richtungskennung (1=Links, 2=Rechts, 3=Beide, 7=Dreiweg) |
| `SIVASNR_TEF` | `SivasnrTEF` | Sivas-Nr. des TEF-Antriebs (leer = kein Antrieb) |
| `LAYER` | *(aus [layer])* | Layer-Name gemaess Kategorisierung |
### CSV-Export-Felder (Merkmale)
Die Attribute werden beim CSV-Export (`export_csv.py`, aufgerufen ueber `c:EXPORTCSV`) wie folgt in CSV-Merkmale ueberfuehrt.
CSV-Format: `Elementnummer;TeileArt;TeileId;Bezeichnung;Anzahl;Merkmale`
**Omniflo Kurve:**
| Merkmal | Quelle | Typ |
| --- | --- | --- |
| `Kurvenwinkel` | JSON `KurvenWinkel` | float |
| `Radius` | JSON `Radius` | float |
| `Höhe` | Attribut `HOEHE` / Z-Koordinate | string |
| `Drehung` | Attribut `DREHUNG` / CAD-Rotation | float |
| `SivasNummer` | JSON `Sivasnr` | string |
**Omniflo Weiche:**
| Merkmal | Quelle | Typ |
| --- | --- | --- |
| `Weichentyp` | JSON `WeichenTyp` | string |
| `Richtung` | JSON `KurvenRichtung` | string |
| `Weichenwinkel` | JSON `KurvenWinkel` | float |
| `Höhe` | Attribut `HOEHE` / Z-Koordinate | string |
| `Drehung` | Attribut `DREHUNG` / CAD-Rotation | float |
| `Antrieb Kurve` | `SivasnrTEF` != null | bool |
| `SivasNummer` | JSON `Sivasnr` | string |
Höhe und Drehung werden beim Export selbst aus den Blockinformationen entnommen und dann ins json geschrieben.
| ATTDEF-Tag | Quelle | Beschreibung |
| --- | --- | --- |
| `HOEHE` | `"2000"` | Montagehoehe in mm (wird beim Export aus Z-Koordinate aktualisiert) |
| `DREHUNG` | `"0"` | Drehwinkel in Grad (wird beim Export aus CAD-Rotation aktualisiert) |
## Schalter
### --number SIVASNR / -n SIVASNR
Nur die angegebene Sivasnr verarbeiten.
### --dry-run / -d
Nur anzeigen welche Attribute gesetzt wuerden, ohne DXF-Dateien zu schreiben.
## Umgebungsvariablen
| Variable | Verwendung |
|---|---|
| `DXFM_DATA` | Pfad zu `data/` (JSON + DXF Quelldateien) |
| `DXFM_CFG` | Pfad zu `cfg/` (attradd.cfg) |
| `DXFM_RESULTS` | Pfad zu `results/` (Ausgabe nach `results/omniflo/`) |
Alle drei haben Fallback auf relative Pfade vom Projektverzeichnis.