[CHANGE] Eckverbindungen werden nun als T-Verbindung gezählt und ausgewiesen

This commit is contained in:
2026-10-09 08:12:04 +02:00
parent 690938157f
commit 5ae1fc308c
5 changed files with 69 additions and 64 deletions
+2
View File
@@ -90,6 +90,8 @@ Das Tool erzeugt für jede analysierte DXF-Datei zwei Dateien im `output/`-Verze
2. **[Dateiname]_analyse_[Datum]_[Zeit].txt**
Textbericht mit Details zu den gefundenen Verbindungen (Koordinaten, Anzahl, etc.)
Der Bericht unterscheidet zwei Kategorien: **Kreuzungen** und **T-Verbindungen**. Eckverbindungen (zwei aufeinander stoßende Endpunkte) werden intern weiterhin erkannt, aber als T-Verbindungen ausgewiesen — es wird derselbe Gerüstverbinder verbaut. Entsprechend werden nur die Layer `D-KREUZUNG` (rot) und `D-T_VERBINDUNG` (grün) in der markierten DXF angelegt.
**Beispiel:**
```text
+37 -19
View File
@@ -12,6 +12,14 @@ from math import sin, cos, pi
from datetime import datetime
class IntersectionAnalyzer:
# Abbildung der intern klassifizierten Typen auf die Anzeigekategorien.
# Eckverbindungen werden als T-Verbindungen ausgegeben.
DISPLAY_TYPE = {
'Kreuzung': 'Kreuzung',
'T-Verbindung': 'T-Verbindung',
'Eckverbindung': 'T-Verbindung'
}
def __init__(self, dxf_path, layer_names, tolerance=0.1, mark_radius=50):
"""
Initialisiert den Analysator
@@ -247,23 +255,32 @@ class IntersectionAnalyzer:
total = sum(len(v) for v in self.intersections.values())
print(f"\n=== ZUSAMMENFASSUNG ===")
print(f"Gefundene Schnittpunkte: {total}")
for itype, points in self.intersections.items():
for itype, points in self.display_intersections().items():
print(f" {itype}: {len(points)}")
def display_intersections(self):
"""
Fasst die intern klassifizierten Kategorien zu den Anzeigekategorien
zusammen. Eckverbindungen werden als T-Verbindungen ausgegeben, da
derselbe Gerüstverbinder verbaut wird.
"""
merged = {'Kreuzung': [], 'T-Verbindung': []}
for itype, points in self.intersections.items():
merged[self.DISPLAY_TYPE[itype]].extend(points)
return merged
def create_marking_layers(self):
"""Erstellt Layer für die Markierungen"""
layer_names = {
'Kreuzung': 'D-KREUZUNG',
'T-Verbindung': 'D-T_VERBINDUNG',
'Eckverbindung': 'D-ECKVERBINDUNG'
'T-Verbindung': 'D-T_VERBINDUNG'
}
colors = {
'Kreuzung': 1, # Rot
'T-Verbindung': 3, # Grün
'Eckverbindung': 5 # Blau
'T-Verbindung': 3 # Grün
}
for itype, layer_name in layer_names.items():
if layer_name not in self.doc.layers:
self.doc.layers.add(
@@ -280,9 +297,9 @@ class IntersectionAnalyzer:
msp = self.doc.modelspace()
radius = self.mark_radius
for itype, points in self.intersections.items():
for itype, points in self.display_intersections().items():
layer_name = layer_names[itype]
for point in points:
msp.add_circle(
center=(point.x, point.y),
@@ -326,21 +343,22 @@ class IntersectionAnalyzer:
f.write("SCHNITTPUNKT-STATISTIK\n")
f.write("-" * 60 + "\n\n")
total = sum(len(v) for v in self.intersections.values())
for itype in ['Kreuzung', 'T-Verbindung', 'Eckverbindung']:
count = len(self.intersections[itype])
display = self.display_intersections()
total = sum(len(v) for v in display.values())
for itype in ['Kreuzung', 'T-Verbindung']:
count = len(display[itype])
percentage = (count / total * 100) if total > 0 else 0
f.write(f"{itype:20s}: {count:5d} ({percentage:5.1f}%)\n")
f.write(f"\n{'GESAMT':20s}: {total:5d}\n\n")
f.write("-" * 60 + "\n")
f.write("DETAILS DER SCHNITTPUNKTE\n")
f.write("-" * 60 + "\n\n")
for itype in ['Kreuzung', 'T-Verbindung', 'Eckverbindung']:
points = self.intersections[itype]
for itype in ['Kreuzung', 'T-Verbindung']:
points = display[itype]
f.write(f"\n{itype} ({len(points)} Stück):\n")
f.write("-" * 40 + "\n")