Verzeichnisstruktur angepasst und Konfigurationsdatei in config.cfg für klare Logik

This commit is contained in:
2025-12-02 17:27:32 +01:00
parent 015bae5fbd
commit f02fc99bb0
7 changed files with 34 additions and 30 deletions
+23 -20
View File
@@ -10,14 +10,17 @@ Dieses Projekt analysiert DXF-Dateien und identifiziert Verbindungs- bzw. Schnit
```text ```text
verbindungszaehler/ verbindungszaehler/
├── verbindungszaehler.bat # Hauptskript zum Starten der Analyse ├── verbindungszaehler.bat # Hauptskript zum Starten der Analyse
├── setenv.bat # Umgebungsvariablen und Verzeichnisstruktur ├── config/
├── defaults.cfg # Standardkonfiguration │ └── config.cfg # Standardkonfiguration
├── lib/ ├── scripts/
── analyze.py # Python-Analyseskript ── setenv.bat # Umgebungsvariablen und Verzeichnisstruktur
│ └── dxf_analyzer.py # Kernlogik ├── src/
├── input/ # Eingabeverzeichnis für DXF-Dateien │ └── lib/
└── output/ # Ausgabeverzeichnis für Ergebnisse │ ├── analyze.py # Python-Analyseskript
│ └── dxf_analyzer.py # Kernlogik
├── input/ # Eingabeverzeichnis für DXF-Dateien
└── output/ # Ausgabeverzeichnis für Ergebnisse
``` ```
## Voraussetzungen ## Voraussetzungen
@@ -44,11 +47,11 @@ Doppelklick auf `verbindungszaehler.bat` oder per Kommandozeile:
verbindungszaehler.bat verbindungszaehler.bat
``` ```
Alle DXF-Dateien im `input/`-Verzeichnis werden automatisch mit den Einstellungen aus `defaults.cfg` analysiert. Alle DXF-Dateien im `input/`-Verzeichnis werden automatisch mit den Einstellungen aus `config.cfg` analysiert.
### Methode 2: Einzelne Datei per Drag & Drop ### Methode 2: Einzelne Datei per Drag & Drop
Ziehen Sie eine DXF-Datei direkt auf die `verbindungszaehler.bat` und lassen Sie sie los. Die Datei wird sofort mit den Einstellungen aus `defaults.cfg` analysiert. Ziehen Sie eine DXF-Datei direkt auf die `verbindungszaehler.bat` und lassen Sie sie los. Die Datei wird sofort mit den Einstellungen aus `config/config.cfg` analysiert.
### Methode 3: Einzelne Datei per Kommandozeile ### Methode 3: Einzelne Datei per Kommandozeile
@@ -58,9 +61,9 @@ verbindungszaehler.bat "C:\Pfad\zur\datei.dxf"
## Konfiguration ## Konfiguration
### defaults.cfg ### config.cfg
Die Datei `defaults.cfg` enthält alle Einstellungen für die Analyse. Passen Sie diese Werte nach Bedarf an: Die Datei `config.cfg` enthält alle Einstellungen für die Analyse. Passen Sie diese Werte nach Bedarf an:
```cfg ```cfg
LAYERS=D-1,D-5 LAYERS=D-1,D-5
@@ -74,7 +77,7 @@ MARK_RADIUS=150
- **TOLERANCE**: Maximaler Abstand in DXF-Einheiten, bei dem zwei Punkte als identisch gelten (für ungenaue Zeichnungen) - **TOLERANCE**: Maximaler Abstand in DXF-Einheiten, bei dem zwei Punkte als identisch gelten (für ungenaue Zeichnungen)
- **MARK_RADIUS**: Radius der Kreise in DXF-Einheiten, die Schnittpunkte markieren - **MARK_RADIUS**: Radius der Kreise in DXF-Einheiten, die Schnittpunkte markieren
**Hinweis:** Nach Änderungen in `defaults.cfg` werden die neuen Werte bei der nächsten Ausführung automatisch verwendet. **Hinweis:** Nach Änderungen in `config.cfg` werden die neuen Werte bei der nächsten Ausführung automatisch verwendet.
## Ausgabe ## Ausgabe
@@ -89,13 +92,13 @@ Das Tool erzeugt für jede analysierte DXF-Datei zwei Dateien im `output/`-Verze
**Beispiel:** **Beispiel:**
```text ```text
zeichnung_markiert_20241202_14-30.dxf zeichnung_markiert_20241202_14-30-25.dxf
zeichnung_analyse_20241202_14-30.txt zeichnung_analyse_20241202_14-30-25.txt
``` ```
## Funktionsweise ## Funktionsweise
1. **setenv.bat** richtet die Verzeichnisstruktur ein und lädt die Konfigurationswerte aus `defaults.cfg` 1. **setenv.bat** richtet die Verzeichnisstruktur ein und lädt die Konfigurationswerte aus `config.cfg` im `config/`-Ordner
2. **verbindungszaehler.bat** verarbeitet die angegebene Datei (oder alle Dateien im Input-Ordner) und ruft das Python-Skript auf 2. **verbindungszaehler.bat** verarbeitet die angegebene Datei (oder alle Dateien im Input-Ordner) und ruft das Python-Skript auf
3. **analyze.py** lädt die DXF-Datei und übergibt sie zusammen mit den Konfigurationsparametern an den `IntersectionAnalyzer` 3. **analyze.py** lädt die DXF-Datei und übergibt sie zusammen mit den Konfigurationsparametern an den `IntersectionAnalyzer`
4. Der Analyzer findet Schnittpunkte zwischen Linien auf den angegebenen Layern innerhalb der definierten Toleranz 4. Der Analyzer findet Schnittpunkte zwischen Linien auf den angegebenen Layern innerhalb der definierten Toleranz
@@ -105,13 +108,13 @@ zeichnung_analyse_20241202_14-30.txt
## Workflow-Beispiel ## Workflow-Beispiel
1. DXF-Dateien in den `input/`-Ordner kopieren 1. DXF-Dateien in den `input/`-Ordner kopieren
2. `defaults.cfg` öffnen und gewünschte Layer-Namen, Toleranz und Markierungsradius eintragen 2. `config.cfg` im `config/`-Ordner öffnen und gewünschte Layer-Namen, Toleranz und Markierungsradius eintragen
3. `verbindungszaehler.bat` per Doppelklick starten **oder** eine einzelne DXF-Datei auf die Batch-Datei ziehen 3. `verbindungszaehler.bat` per Doppelklick starten **oder** eine einzelne DXF-Datei auf die Batch-Datei ziehen
4. Ergebnisse im `output/`-Ordner überprüfen: **Bevor die Anzahl der Verbindungen weiter verwendet wird, sind die markierten Punkte im Ausgabelayout zwingend auf Fehler zu überprüfen!** 4. Ergebnisse im `output/`-Ordner überprüfen: **Bevor die Anzahl der Verbindungen weiter verwendet wird, sind die markierten Punkte im Ausgabelayout zwingend auf Fehler zu überprüfen!**
## Hinweise ## Hinweise
- Stellen Sie sicher, dass die Layer-Namen in `defaults.cfg` exakt mit denen in der DXF-Datei übereinstimmen (Groß-/Kleinschreibung beachten) - Stellen Sie sicher, dass die Layer-Namen in `config.cfg` exakt mit denen in der DXF-Datei übereinstimmen (Groß-/Kleinschreibung beachten)
- Bei sehr großen Dateien kann die Analyse einige Zeit in Anspruch nehmen - Bei sehr großen Dateien kann die Analyse einige Zeit in Anspruch nehmen
- Die Toleranz sollte an die Genauigkeit Ihrer Zeichnungen angepasst werden (typische Werte: 0.01 bis 0.1) - Die Toleranz sollte an die Genauigkeit Ihrer Zeichnungen angepasst werden (typische Werte: 0.01 bis 0.1)
- Der Markierungsradius sollte groß genug sein, um in der Zeichnung sichtbar zu sein, aber klein genug, um Details nicht zu verdecken - Der Markierungsradius sollte groß genug sein, um in der Zeichnung sichtbar zu sein, aber klein genug, um Details nicht zu verdecken
@@ -125,8 +128,8 @@ zeichnung_analyse_20241202_14-30.txt
##### "Keine Schnittpunkte gefunden" ##### "Keine Schnittpunkte gefunden"
- Prüfen Sie, ob die in `defaults.cfg` angegebenen Layer in der DXF-Datei existieren - Prüfen Sie, ob die in `config.cfg` angegebenen Layer in der DXF-Datei existieren
- Erhöhen Sie den TOLERANCE-Wert in `defaults.cfg`, falls Linien nicht exakt verbunden sind - Erhöhen Sie den TOLERANCE-Wert in `config.cfg`, falls Linien nicht exakt verbunden sind
##### Python-Fehler ##### Python-Fehler
+3
View File
@@ -0,0 +1,3 @@
LAYERS=D-1,D-5
TOLERANCE=0.05
MARK_RADIUS=150
-3
View File
@@ -1,3 +0,0 @@
LAYERS=D-1,D-5
TOLERANCE=0.06
MARK_RADIUS=150
+5 -4
View File
@@ -1,10 +1,11 @@
@echo off @echo off
REM Basisverzeichnis bestimmen REM Basisverzeichnis bestimmen
pushd %~dp0\ pushd %~dp0\..
set PROJECT=%cd% set PROJECT=%cd%
set SCRIPT_DIR=%PROJECT%\lib set SCRIPT_DIR=%PROJECT%\src\lib
set CONFIG_DIR=%PROJECT%\config
set INPUT_DIR=%PROJECT%\input set INPUT_DIR=%PROJECT%\input
set OUTPUT_DIR=%PROJECT%\output set OUTPUT_DIR=%PROJECT%\output
@@ -13,8 +14,8 @@ if not exist "%INPUT_DIR%" mkdir "%INPUT_DIR%"
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%" if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
REM Defaults aus cfg-Datei laden REM Defaults aus cfg-Datei laden
if exist defaults.cfg ( if exist "%CONFIG_DIR%\config.cfg" (
for /f "usebackq tokens=1,2 delims==" %%A in ("defaults.cfg") do ( for /f "usebackq tokens=1,2 delims==" %%A in ("%CONFIG_DIR%\config.cfg") do (
set %%A=%%B set %%A=%%B
) )
) )
+2 -2
View File
@@ -22,10 +22,10 @@ def main():
base_name = dxf_file.stem base_name = dxf_file.stem
script_dir = Path(__file__).resolve().parent script_dir = Path(__file__).resolve().parent
output_dir = (script_dir / ".." / "output").resolve() output_dir = (script_dir / ".." / ".." / "output").resolve()
output_dir.mkdir(parents=True, exist_ok=True) output_dir.mkdir(parents=True, exist_ok=True)
datum = datetime.now().strftime("%Y%m%d_%H-%M") datum = datetime.now().strftime("%Y%m%d_%H-%M-%S")
output_dxf = output_dir / f"{base_name}_markiert_{datum}.dxf" output_dxf = output_dir / f"{base_name}_markiert_{datum}.dxf"
output_txt = output_dir / f"{base_name}_analyse_{datum}.txt" output_txt = output_dir / f"{base_name}_analyse_{datum}.txt"
+1 -1
View File
@@ -2,7 +2,7 @@
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
REM Umgebungsvariablen laden immer relativ zum Batch-Datei-Verzeichnis REM Umgebungsvariablen laden immer relativ zum Batch-Datei-Verzeichnis
call "%~dp0setenv.bat" call "%~dp0\scripts\setenv.bat"
REM Kommandozeilenparameter prüfen und Defaults verwenden, falls Parameter fehlen REM Kommandozeilenparameter prüfen und Defaults verwenden, falls Parameter fehlen
if not "%~2"=="" ( if not "%~2"=="" (