From b82c751ba9f97dd292a2a346fddbf674f2e3d926 Mon Sep 17 00:00:00 2001 From: mistangl Date: Mon, 26 Jan 2026 16:48:50 +0100 Subject: [PATCH] =?UTF-8?q?errorcollector=20f=C3=BCr=20Fehler=20und=20Warn?= =?UTF-8?q?ungen=20eingebaut.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/create_numbers.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/create_numbers.py b/lib/create_numbers.py index a449595..33d9ac0 100644 --- a/lib/create_numbers.py +++ b/lib/create_numbers.py @@ -79,7 +79,7 @@ def read_config_layers(config_path: Path) -> list: return layers -def extract_block_attributes(doc, insert) -> dict: +def extract_block_attributes(doc, insert, error_collector=None) -> dict: """ Extrahiert alle Attribute aus einem INSERT-Block. Unterstützt zweistufige Blockstruktur: @@ -89,6 +89,7 @@ def extract_block_attributes(doc, insert) -> dict: Args: doc: DXF-Dokument insert: INSERT-Entity des äußeren Blocks + error_collector: Optional ErrorCollector für Warnungen Returns: Dictionary mit allen gefundenen Attributen @@ -121,7 +122,9 @@ def extract_block_attributes(doc, insert) -> dict: attributes[tag] = value break # Nur das erste INSERT mit Attributen verwenden except Exception as e: - print(f" Warnung: Fehler beim Extrahieren der Attribute aus Block: {e}") + error_msg = f"Fehler beim Extrahieren der Attribute aus Block '{insert.dxf.name}': {e}" + if error_collector: + error_collector.add_warnings({"attribute_extraction_error": error_msg}) return attributes @@ -237,7 +240,7 @@ def point_in_polygon(point, polygon): return inside -def find_symbols_in_boundary(doc, msp, boundary, target_layers, attributes): +def find_symbols_in_boundary(doc, msp, boundary, target_layers, attributes, error_collector=None): """ Findet alle Symbole (INSERT-Blöcke) innerhalb des angegebenen Bereichs auf den Ziel-Layern. """ @@ -261,7 +264,7 @@ def find_symbols_in_boundary(doc, msp, boundary, target_layers, attributes): # Prüfe ob der Block Attribute hat (direkt oder in zweistufiger Struktur) # Verwende extract_block_attributes um beides zu unterstützen - symbol_attribs = extract_block_attributes(doc, entity) + symbol_attribs = extract_block_attributes(doc, entity, error_collector) if not symbol_attribs: continue @@ -461,7 +464,7 @@ def collect_and_group_renamer_blocks(doc, msp, renamer_layers, error_collector): # Finde alle INSERT-Blöcke auf diesem Layer for insert in msp.query(f'INSERT[layer=="{layer}"]'): # Extrahiere Attribute (unterstützt zweistufige Blockstruktur) - attributes = extract_block_attributes(doc, insert) + attributes = extract_block_attributes(doc, insert, error_collector) if not attributes: print(f" Block ohne Attribute gefunden an Position {insert.dxf.insert}") @@ -538,7 +541,7 @@ def process_renamer_groups(doc, msp, renamer_layers, renamer_groups, error_colle 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) + 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: @@ -615,7 +618,7 @@ def check_symbols_in_boundaries(doc, msp, renamer_groups, error_collector): # Finde alle Symbole mit "@" im IO-Attribut symbols_with_at = [] for entity in msp.query('INSERT'): - symbol_attribs = extract_block_attributes(doc, entity) + symbol_attribs = extract_block_attributes(doc, entity, error_collector) if not symbol_attribs: continue