pointcab_renamer/README.md

277 lines
8.1 KiB
Markdown

# PointCab Projekt Umbenenner v4.1.1
Ein GUI-Tool zum Umbenennen von Scans in PointCab-Projekten und zum Zusammenführen mehrerer Projekte.
## Funktionen
### 1. 📁 Einzelprojekt bearbeiten
- Einzelnes PointCab-Projekt auswählen und Scans umbenennen
- Vollständige Scan-Namen: `1.lsd → Projektname_01.lsd`
- Clustername-Bereinigung über Konfigurationsdatei
- Automatisches Backup der LSDX-Datei
### 2. 📂 Batch Renamer
- Mehrere Projekte in einem Verzeichnis automatisch verarbeiten
- Fortschrittsanzeige und detailliertes Logging
- Fehlertoleranz: Bei Fehler wird mit nächstem Projekt fortgefahren
### 3. 🔀 Projektmerger (verbessert in v4.1)
- Mehrere PointCab-Projekte in ein Stammprojekt zusammenführen
- Zwei Modi: Einzelprojekt oder Batch-Merge
- **NEU**: Intelligente Cluster-Duplikat-Erkennung
- Intelligente Namenskonflikt-Behandlung
- Vollständige LSDX-Zusammenführung mit detailliertem Logging
## Installation
### Voraussetzungen
- Python 3.8 oder höher
- Tkinter (normalerweise in Python enthalten)
### Ausführen
```bash
python pointcab_renamer.py
```
## Projektmerger - Detaillierte Dokumentation
### Konzept
Der Projektmerger ermöglicht das Zusammenführen mehrerer PointCab-Projekte in ein einzelnes Stammprojekt. Dies ist nützlich wenn:
- Mehrere Scan-Sessions zu einem Projekt gehören
- Projekte nachträglich zusammengeführt werden sollen
- Daten aus verschiedenen Quellen konsolidiert werden müssen
### Modi
#### Einzelprojekt hinzufügen
1. Stammprojekt (Ziel) auswählen
2. Ein einzelnes Quellprojekt auswählen
3. Vorschau anzeigen
4. Merge durchführen
#### Batch-Merge
1. Stammprojekt (Ziel) auswählen
2. Hauptverzeichnis mit mehreren Quellprojekten auswählen
3. Alle gefundenen Projekte werden automatisch erkannt
4. Vorschau anzeigen
5. Merge durchführen
### Merge-Operationen
Der Projektmerger führt folgende Operationen durch:
1. **Backup erstellen**
- Vor dem Merge wird ein Backup der Stammprojekt-LSDX erstellt
- Format: `projektname.lsdx.backup_YYYYMMDD_HHMMSS`
2. **LSD-Dateien kopieren**
- Alle LSD-Dateien aus den Quellprojekten werden in das Stammprojekt kopiert
- Bei Namenskonflikten: Automatische Umbenennung (siehe unten)
3. **PNG-Dateien kopieren**
- Alle Preview-Bilder werden in den Previews-Ordner des Stammprojekts kopiert
- Bei Namenskonflikten: Automatische Umbenennung
4. **LSDX zusammenführen**
- **Cluster-Duplikat-Erkennung** (NEU in v4.1):
- Prüft ob Cluster mit gleichem Namen bereits existiert
- Bei Duplikat: Scans werden dem existierenden Cluster zugeordnet
- Bei neuem Cluster: Neuer Cluster wird mit neuer UUID hinzugefügt
- Alle Scan-Elemente werden mit korrekten Parent-Referenzen eingefügt
- UUIDs werden neu generiert um Konflikte zu vermeiden
- FilePath-Referenzen werden bei Umbenennung angepasst
- Detailliertes Logging aller Operationen
### Namenskonflikt-Behandlung
Wenn eine Datei im Zielordner bereits existiert:
```
Vor Merge:
Stammprojekt/PointCloud/scan_01.lsd (existiert)
Quellprojekt/PointCloud/scan_01.lsd (zu mergen)
Nach Merge:
Stammprojekt/PointCloud/scan_01.lsd (original)
Stammprojekt/PointCloud/scan_01_merged_1.lsd (aus Quellprojekt)
```
Die LSDX-Referenzen werden automatisch aktualisiert:
```xml
<!-- Vorher -->
<FilePath type="lsd">scan_01.lsd</FilePath>
<!-- Nachher (für gemergtes Element) -->
<FilePath type="lsd">scan_01_merged_1.lsd</FilePath>
```
### Beispiel: Einzelprojekt-Merge
```
Vorher:
├── Stammprojekt/
│ ├── Stammprojekt_PointCloud/
│ │ ├── Stammprojekt.lsdx
│ │ ├── 1.lsd
│ │ ├── 2.lsd
│ │ └── Previews/
│ │ ├── 1.png
│ │ └── 2.png
├── Quellprojekt/
│ ├── Quellprojekt_PointCloud/
│ │ ├── Quellprojekt.lsdx
│ │ ├── 1.lsd
│ │ ├── 2.lsd
│ │ └── Previews/
│ │ ├── 1.png
│ │ └── 2.png
Nachher:
├── Stammprojekt/
│ ├── Stammprojekt_PointCloud/
│ │ ├── Stammprojekt.lsdx (zusammengeführt)
│ │ ├── Stammprojekt.lsdx.backup_20260114_101500
│ │ ├── 1.lsd
│ │ ├── 2.lsd
│ │ ├── 1_merged_1.lsd (aus Quellprojekt)
│ │ ├── 2_merged_2.lsd (aus Quellprojekt)
│ │ └── Previews/
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 1_merged_1.png
│ │ └── 2_merged_2.png
│ └── merge_20260114_101500.log
```
### Beispiel: Batch-Merge
```
Vorher:
├── Hauptverzeichnis/
│ ├── Stammprojekt/
│ │ └── Stammprojekt_PointCloud/
│ │ ├── Stammprojekt.lsdx
│ │ └── (Scans 1-5)
│ ├── Projekt_A/
│ │ └── Projekt_A_PointCloud/
│ │ ├── Projekt_A.lsdx
│ │ └── (Scans 1-3)
│ └── Projekt_B/
│ └── Projekt_B_PointCloud/
│ ├── Projekt_B.lsdx
│ └── (Scans 1-4)
Nach Batch-Merge (Stammprojekt als Ziel, Hauptverzeichnis als Quelle):
├── Stammprojekt/
│ └── Stammprojekt_PointCloud/
│ ├── Stammprojekt.lsdx (enthält jetzt 12 Scans)
│ ├── Stammprojekt.lsdx.backup_...
│ └── (alle LSD/PNG-Dateien)
│ └── merge_....log
```
### Logging
Jeder Merge-Vorgang erstellt eine detaillierte Log-Datei:
- **Einzelprojekt-Merge**: `merge_YYYYMMDD_HHMMSS.log` im Stammprojekt-Verzeichnis
- **Batch-Merge**: Eine Log-Datei pro Merge-Vorgang
Log-Inhalt:
- Alle kopierten Dateien
- Umbenennungen bei Konflikten
- Aktualisierte LSDX-Referenzen
- Fehler und Warnungen
### Fehlerbehandlung
- **Fehlende Dateien**: Werden übersprungen, Warnung im Log
- **Batch-Merge bei Fehler**: Verarbeitung wird mit nächstem Projekt fortgesetzt
- **LSDX-Parsing-Fehler**: Projekt wird übersprungen
- **Backup**: Immer vor Änderungen erstellt
## Konfiguration
### cluster_cleanup.txt
Strings die aus dem Clusternamen entfernt werden:
```
_re
_li
_mi
# Kommentare mit # beginnen
```
## Executable erstellen
### Windows (auf Windows)
```bash
pip install pyinstaller
pyinstaller --onefile --windowed pointcab_renamer.py
```
### Linux
```bash
./build_linux.sh
```
### Cross-Compilation: Windows .exe unter Linux
Es ist möglich, eine Windows .exe unter Linux zu erstellen. Dazu stehen zwei Methoden zur Verfügung:
```bash
# Methode 1: Docker (empfohlen)
./build_windows_on_linux.sh
# Methode 2: Wine (Fallback)
./build_windows_wine.sh
```
Die Docker-Methode ist zuverlässiger und wird empfohlen. Für Details siehe [DEPLOYMENT.md](DEPLOYMENT.md).
**Wichtig:** Die `cluster_cleanup.txt` muss neben der .exe-Datei liegen.
## Changelog
### v4.1.1 (2026-01-14)
- **NEU**: Cross-Compilation-Unterstützung für Windows .exe unter Linux
- Docker-basiertes Build-Skript (`build_windows_on_linux.sh`)
- Wine-basiertes Fallback-Skript (`build_windows_wine.sh`)
- GitHub Actions Beispiel-Workflow
- Erweiterte DEPLOYMENT.md-Dokumentation
### v4.1 (2026-01-14)
- **FIX**: Projektmerger LSDX-Zusammenführung komplett überarbeitet
- Cluster-Duplikat-Erkennung: Verhindert doppelte Cluster bei gleichem Namen
- Scans werden korrekt dem existierenden oder neuen Cluster zugeordnet
- Parent-Referenzen werden jetzt korrekt gesetzt (Cluster→Registration, Scan→Cluster)
- Detailliertes Logging aller Merge-Operationen
- Finale Scan/Cluster-Statistik nach Merge
- LSDX-Struktur im Code dokumentiert
### v4.0 (2026-01-14)
- **NEU**: Projektmerger-Funktion
- Einzelprojekt- und Batch-Merge-Modi
- Intelligente Namenskonflikt-Behandlung
- Automatische UUID-Neugenerierung
- Vollständige LSDX-Zusammenführung
- Hauptmenü auf 3 Optionen erweitert
- Verbesserte Fehlerbehandlung
### v3.1 (2026-01-14)
- Full-Scan-Name-Pattern: `1.lsd → Projektname_01.lsd`
- Konsistente Benennung in Dateien und LSDX
### v3.0 (2026-01-14)
- Batch Renamer hinzugefügt
- Hauptmenü für Modus-Auswahl
### v2.0 (2026-01-14)
- Clustername-Bereinigung via Konfigurationsdatei
### v1.0 (2026-01-14)
- Initiale Version
## Lizenz
MIT License