Schalter --show_symbol_frames dazugemacht.
This commit is contained in:
+58
-5
@@ -4,6 +4,7 @@ from pathlib import Path
|
||||
|
||||
from error_collector import ErrorCollector, write_json_file
|
||||
from utils import check_environment_var, check_file_in_work, dxf_is_binary, get_dxf_file
|
||||
from symbol_frames import draw_symbol_frames
|
||||
|
||||
|
||||
"""
|
||||
@@ -491,6 +492,7 @@ def collect_and_group_renamer_blocks(doc, msp, renamer_layers, error_collector):
|
||||
continue
|
||||
|
||||
print(f" Boundary gefunden mit {len(boundary)} Punkten (Rechteck: {is_rectangle})")
|
||||
print(f" Eckpunkte: {', '.join([f'({p[0]:.2f}, {p[1]:.2f})' for p in boundary])}")
|
||||
|
||||
# Validiere DIRECTION gegen Geometrie
|
||||
direction = attributes.get("DIRECTION", "LEFT_RIGHT")
|
||||
@@ -679,17 +681,59 @@ def process_renamer_blocks(doc, msp, renamer_layers, error_collector):
|
||||
Verarbeitet alle Renamer-Blöcke auf den angegebenen Layern.
|
||||
Gruppiert Blöcke mit identischer Konfiguration und nummeriert alle Symbole
|
||||
aus allen Blöcken einer Gruppe gemeinsam.
|
||||
|
||||
Returns:
|
||||
Tuple (all_renamed, renamer_groups):
|
||||
- all_renamed: Liste der umbenannten Symbole
|
||||
- renamer_groups: Dictionary der gruppierten Renamer-Blöcke
|
||||
"""
|
||||
# Erster Pass: Sammle und gruppiere alle Renamer-Blöcke
|
||||
renamer_groups = collect_and_group_renamer_blocks(doc, msp, renamer_layers, error_collector)
|
||||
|
||||
|
||||
# Zweiter Pass: Verarbeite jede Gruppe
|
||||
all_renamed = process_renamer_groups(doc, msp, renamer_layers, renamer_groups, error_collector)
|
||||
|
||||
|
||||
# Dritter Pass: Prüfe ob alle Symbole mit "@" im IO in einem Renamer-Bereich liegen
|
||||
check_symbols_in_boundaries(doc, msp, renamer_groups, error_collector)
|
||||
|
||||
return all_renamed
|
||||
|
||||
return all_renamed, renamer_groups
|
||||
|
||||
|
||||
def collect_all_symbols_from_groups(doc, msp, renamer_groups, renamer_layers, error_collector):
|
||||
"""
|
||||
Sammelt alle Symbole aus allen Renamer-Gruppen für Visualisierungszwecke.
|
||||
|
||||
Args:
|
||||
doc: DXF-Dokument
|
||||
msp: Modelspace
|
||||
renamer_groups: Dictionary mit gruppierten Renamer-Blöcken
|
||||
renamer_layers: Liste der Layer mit Renamer-Blöcken
|
||||
error_collector: ErrorCollector für Fehlerbehandlung
|
||||
|
||||
Returns:
|
||||
Liste aller gefundenen Symbole mit 'entity', 'position', 'attributes', 'layer'
|
||||
"""
|
||||
all_symbols = []
|
||||
seen_entities = set() # Verhindere Duplikate
|
||||
|
||||
for config_key, group_blocks in renamer_groups.items():
|
||||
if not group_blocks:
|
||||
continue
|
||||
|
||||
reference_attributes = group_blocks[0][2]
|
||||
|
||||
for insert, boundary, attributes, is_rectangle in group_blocks:
|
||||
# Finde Symbole innerhalb dieses Bereichs
|
||||
symbols = find_symbols_in_boundary(doc, msp, boundary, renamer_layers, attributes, error_collector)
|
||||
|
||||
# Füge Symbole hinzu, aber nur wenn das Entity noch nicht gesehen wurde
|
||||
for symbol in symbols:
|
||||
entity_id = id(symbol['entity'])
|
||||
if entity_id not in seen_entities:
|
||||
seen_entities.add(entity_id)
|
||||
all_symbols.append(symbol)
|
||||
|
||||
return all_symbols
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
@@ -726,6 +770,7 @@ if __name__ == '__main__':
|
||||
parser.add_argument('-e', '--errorfile', action='store', required=False, help='JSON-Datei für Fehler und Warnungen', metavar='errors.json')
|
||||
parser.add_argument('-w', '--write', action='store', help='Schreibe Ergebnisse der Nummerierung in eine JSON-Datei')
|
||||
parser.add_argument('-d', '--dryrun', action='store_true', help='Symbole nicht in der DXF-Datei überschreiben, nur Ausgabe auf Konsole')
|
||||
parser.add_argument('--show_symbol_frames', action='store_true', help='Zeichne Rahmen um jedes Symbol, um die Grenze des Symbols zu visualisieren')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -770,7 +815,7 @@ if __name__ == '__main__':
|
||||
print("Starte Verarbeitung der Renamer-Blöcke")
|
||||
print("="*60 + "\n")
|
||||
|
||||
renamed_symbols = process_renamer_blocks(doc, msp, renamer_layers, error_collector)
|
||||
renamed_symbols, renamer_groups = process_renamer_blocks(doc, msp, renamer_layers, error_collector)
|
||||
|
||||
print("\n" + "="*60)
|
||||
print(f"Verarbeitung abgeschlossen: {len(renamed_symbols)} Symbole nummeriert")
|
||||
@@ -782,6 +827,14 @@ if __name__ == '__main__':
|
||||
for item in renamed_symbols:
|
||||
print(f" {item['old_value']} -> {item['new_value']} (Layer: {item['layer']}, Pos: {item['position']})")
|
||||
|
||||
# Zeichne Symbol-Rahmen wenn gewünscht
|
||||
if args.show_symbol_frames:
|
||||
all_symbols = collect_all_symbols_from_groups(doc, msp, renamer_groups, renamer_layers, error_collector)
|
||||
if all_symbols:
|
||||
draw_symbol_frames(doc, msp, all_symbols)
|
||||
else:
|
||||
print("\nKeine Symbole für Rahmen-Zeichnung gefunden")
|
||||
|
||||
# Speichere DXF-Datei wenn nicht dry-run
|
||||
if not args.dryrun:
|
||||
output_path = dxf_path.parent / f"{dxf_path.stem}_numbered{dxf_path.suffix}"
|
||||
|
||||
Reference in New Issue
Block a user