# Kabeltool - Automatisierte Kabellängenermittlung

Automatisiertes Toolset zur Ermittlung von Kabellängen in industriellen Anlagenlayouts. Aus einer DXF-Zeichnung werden Gerätepositionen und Kabeltrassen extrahiert, optimale Kabelwege berechnet und Stücklisten mit SIVAS-Artikelnummern erzeugt.

## Workflows

| | Workflow | Skript | Beschreibung | Ausgabe |
|---|----------|--------|--------------|---------|
| <img src="doc/img/Icons/Icon_getex.png" width="32"> | **Cable Routing** | `getexdraw.bat` | Vollständige Kabelberechnung mit Wegführung und Stücklisten | `*_cables.dxf`, `*_cables.xlsx`, `*_BOM.xlsx` |
| <img src="doc/img/Icons/Icon_portal.png" width="32"> | **I/O Conversion** | `ioconverter.bat` | Export von Gerätelisten für TIA Portal, WSCAD u.a. | `*-TIA.xlsx`, `*-WSCAD.xlsx` |
| <img src="doc/img/Icons/dxf2txt.png" width="32"> | **Text Extraction** | `extract.bat` | Textextraktion aus DXF für Übersetzung | `*_texts.xlsx`, `*_texts.json` |
| <img src="doc/img/Icons/dxfCs.png" width="32"> | **Translation** | `tr2dxf_<lang>.bat` | Übersetzung von DXF-Texten (CS, EN, FR, IT, ES) | `*_<lang>.dxf` |

## Verwendung

DXF-Datei per **Drag & Drop** auf die Desktop-Verknüpfung ziehen (erstellt via `bin\dropItem_create.bat`) oder direkt aufrufen:

```bash
bin\getexdraw.bat <meine_anlage.dxf>
```

## Pipelines

### Cable Routing (`getexdraw.bat`)

```text
DXF-Datei
  1. getpositions.py  -->  Positionen extrahieren   -->  *_positionsdraw.json
  2. routing.py       -->  Kabelwege berechnen       -->  *_todraw.json
  3. drawdxf.py       -->  DXF + Excel erzeugen      -->  *_cables.dxf, *_cables.xlsx, *_BOM.xlsx
```

### I/O Conversion (`ioconverter.bat`)

```text
DXF-Datei
  1. getpositions.py  -->  Positionen extrahieren   -->  *_positionsconv.json
  2. portalexport.py  -->  Excel-Export erzeugen     -->  *-TIA.xlsx, *-WSCAD.xlsx, *-EA.xlsx
```

### Text Extraction & Translation (`extract.bat` / `tr2dxf_<lang>.bat`)

```text
DXF-Datei
  1. translate.py --extract  -->  Texte extrahieren  -->  *_texts.xlsx, *_texts.json
  2. translate.py --translate -->  Texte übersetzen   -->  *_<lang>.dxf
```

## Installation

```bash
# Repository klonen
git clone http://gitea.schoenenberger.de/mistangl/kabellaengen.git

# Python-Abhängigkeiten installieren
bin\install_py.bat

# Desktop-Verknüpfungen erstellen
bin\dropItem_create.bat
```

**Voraussetzung**: Python 3.x (lokal installiert oder via `NETWORK_INTERPRETER_PATH` Umgebungsvariable).

## Konfiguration

Konfigurationsdateien in `cfg/` steuern das Verhalten:

| Datei | Zweck |
|-------|-------|
| `allgemein.cfg` | Layernamen, geometrische Toleranzen |
| `BMK.cfg` | Betriebsmittelkennzeichnung, Kabeltyp-Zuordnung, Routing-Regeln |
| `kabel.cfg` | SIVAS-Artikelnummern je Kabeltyp und Kabellänge |
| `bezeichner.cfg` | Artikelnummern-Bezeichner (automatisch aus SIVAS ergänzt) |

> **Hinweis**: Neuer BMK-Prefix muss in `BMK.cfg` unter `[Routing-Include]` **und** `[Cable-Mapping]` eingetragen werden. Die zugewiesene Kabel-Sektion muss in `kabel.cfg` existieren.

## Tests

```bash
# Alle Tests
bin\run_tests.bat

# Einzeltest
bin\run_test.bat easy

# Unit-Tests
bin\run_unittests.bat
```

## Projektstruktur

```text
bin/        Batch- und Shell-Skripte
cfg/        Konfigurationsdateien
lib/        Python-Module
work/       Arbeitsverzeichnis (Ausgabedateien)
testdata/   Test-DXF-Dateien und Referenzdaten
data/       SIVAS-Artikeldaten (CSV)
doc/        Dokumentation (Deutsch)
```

## Dokumentation

- [Anwenderdokumentation](doc/Anwenderdoku.md) - Vollständige Anleitung mit Fehlerbehandlung
- [Kurzanleitung / Fehlerfälle](doc/Anwenderdoku_kurz.md) - Kompakte Referenz
- [Übersetzungsworkflow](doc/translate.md) - Dokumentation zum Textextraktions- und Übersetzungssystem

## Lizenz

Intern - Schoenenberger
