hole den maximal möglichen Abstand eines Symbols aus der Config
This commit is contained in:
+32
-15
@@ -826,7 +826,7 @@ def create_no_symbols_found_error_message(block_name, direction, layer_names, gr
|
||||
)
|
||||
|
||||
|
||||
def collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_name, error_collector):
|
||||
def collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_name, error_collector, polyline_max_distance=500.0):
|
||||
"""
|
||||
Sammelt alle Symbole aus allen Boundaries einer Renamer-Gruppe.
|
||||
Prüft auf Duplikate (Symbole in mehreren Bereichen).
|
||||
@@ -838,6 +838,7 @@ def collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_nam
|
||||
group_blocks: Liste von (insert, boundary, attributes, is_rectangle) Tupeln
|
||||
block_name: Name des Renamer-Blocks (für Fehlermeldungen)
|
||||
error_collector: ErrorCollector für Fehlerbehandlung
|
||||
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||
|
||||
Returns:
|
||||
Liste aller eindeutigen Symbole
|
||||
@@ -847,7 +848,7 @@ def collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_nam
|
||||
|
||||
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)
|
||||
symbols = find_symbols_in_boundary(doc, msp, boundary, renamer_layers, attributes, error_collector, polyline_max_distance)
|
||||
|
||||
# Füge Symbole hinzu, aber nur wenn das Entity noch nicht gesehen wurde
|
||||
for symbol in symbols:
|
||||
@@ -875,11 +876,14 @@ def collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_nam
|
||||
return all_symbols
|
||||
|
||||
|
||||
def process_renamer_groups(doc, msp, renamer_layers, renamer_groups, error_collector):
|
||||
def process_renamer_groups(doc, msp, renamer_layers, renamer_groups, error_collector, polyline_max_distance=500.0):
|
||||
"""
|
||||
Zweiter Pass: Verarbeitet jede Renamer-Block-Gruppe.
|
||||
Sammelt Symbole, sortiert sie und nummeriert sie.
|
||||
|
||||
Args:
|
||||
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||
|
||||
Returns:
|
||||
Liste aller umbenannten Symbole
|
||||
"""
|
||||
@@ -897,7 +901,7 @@ def process_renamer_groups(doc, msp, renamer_layers, renamer_groups, error_colle
|
||||
print(f"\n Verarbeite Gruppe: {block_name} ({len(group_blocks)} Renamer-Blöcke)")
|
||||
|
||||
# Sammle Symbole aus ALLEN Boundaries dieser Gruppe
|
||||
all_symbols = collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_name, error_collector)
|
||||
all_symbols = collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_name, error_collector, polyline_max_distance)
|
||||
|
||||
print(f" Gesamt {len(all_symbols)} eindeutige Template-Symbole aus {len(group_blocks)} Blöcken")
|
||||
|
||||
@@ -967,7 +971,7 @@ def find_symbols_with_at_in_io(doc, msp, error_collector):
|
||||
return symbols_with_at
|
||||
|
||||
|
||||
def check_symbol_in_boundary(symbol, boundary, attributes, renamer_pos):
|
||||
def check_symbol_in_boundary(symbol, boundary, attributes, renamer_pos, polyline_max_distance=500.0):
|
||||
"""
|
||||
Prüft ob ein Symbol geometrisch und vom Layer her in einem Renamer-Bereich liegt.
|
||||
|
||||
@@ -976,6 +980,7 @@ def check_symbol_in_boundary(symbol, boundary, attributes, renamer_pos):
|
||||
boundary: Polygon-Punkte des Renamer-Bereichs
|
||||
attributes: Attribute des Renamer-Blocks
|
||||
renamer_pos: Position des Renamer-Blocks
|
||||
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||
|
||||
Returns:
|
||||
Tuple (in_boundary, wrong_layer_info):
|
||||
@@ -988,7 +993,7 @@ def check_symbol_in_boundary(symbol, boundary, attributes, renamer_pos):
|
||||
|
||||
if is_polyline_path:
|
||||
# Für POLYLINE_PATH: Prüfe Nähe zur Polylinie
|
||||
if not point_near_polyline(symbol['position'], boundary, max_distance=500.0):
|
||||
if not point_near_polyline(symbol['position'], boundary, max_distance=polyline_max_distance):
|
||||
return False, None
|
||||
else:
|
||||
# Für Rechtecke: Prüfe ob innerhalb des Polygons
|
||||
@@ -1042,9 +1047,12 @@ def create_wrong_layer_warning(symbol, wrong_layer_info):
|
||||
)
|
||||
|
||||
|
||||
def check_symbols_in_boundaries(doc, msp, renamer_groups, error_collector):
|
||||
def check_symbols_in_boundaries(doc, msp, renamer_groups, error_collector, polyline_max_distance=500.0):
|
||||
"""
|
||||
Dritter Pass: Prüft ob alle Symbole mit "@" im IO in einem Renamer-Bereich liegen.
|
||||
|
||||
Args:
|
||||
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||
"""
|
||||
print("\n" + "="*60)
|
||||
print("Prüfe ob alle Symbole mit '@' im IO in einem Renamer-Bereich liegen")
|
||||
@@ -1066,7 +1074,7 @@ def check_symbols_in_boundaries(doc, msp, renamer_groups, error_collector):
|
||||
wrong_layer_info = None
|
||||
|
||||
for boundary, attributes, renamer_pos in all_boundaries:
|
||||
is_in_boundary, layer_info = check_symbol_in_boundary(symbol, boundary, attributes, renamer_pos)
|
||||
is_in_boundary, layer_info = check_symbol_in_boundary(symbol, boundary, attributes, renamer_pos, polyline_max_distance)
|
||||
|
||||
if is_in_boundary:
|
||||
# Layer passt auch - alles OK
|
||||
@@ -1193,12 +1201,15 @@ def check_overlapping_renamer_blocks(renamer_groups, error_collector):
|
||||
print(f"\nOK: Keine Überlappungen zwischen {len(rectangle_renamers)} Renamer-Rechtecken gefunden")
|
||||
|
||||
|
||||
def process_renamer_blocks(doc, msp, renamer_layers, error_collector):
|
||||
def process_renamer_blocks(doc, msp, renamer_layers, error_collector, polyline_max_distance=500.0):
|
||||
"""
|
||||
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.
|
||||
|
||||
Args:
|
||||
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||
|
||||
Returns:
|
||||
Tuple (all_renamed, renamer_groups):
|
||||
- all_renamed: Liste der umbenannten Symbole
|
||||
@@ -1211,15 +1222,15 @@ def process_renamer_blocks(doc, msp, renamer_layers, error_collector):
|
||||
check_overlapping_renamer_blocks(renamer_groups, error_collector)
|
||||
|
||||
# Zweiter Pass: Verarbeite jede Gruppe
|
||||
all_renamed = process_renamer_groups(doc, msp, renamer_layers, renamer_groups, error_collector)
|
||||
all_renamed = process_renamer_groups(doc, msp, renamer_layers, renamer_groups, error_collector, polyline_max_distance)
|
||||
|
||||
# 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)
|
||||
check_symbols_in_boundaries(doc, msp, renamer_groups, error_collector, polyline_max_distance)
|
||||
|
||||
return all_renamed, renamer_groups
|
||||
|
||||
|
||||
def collect_all_symbols_from_groups(doc, msp, renamer_groups, renamer_layers, error_collector):
|
||||
def collect_all_symbols_from_groups(doc, msp, renamer_groups, renamer_layers, error_collector, polyline_max_distance=500.0):
|
||||
"""
|
||||
Sammelt alle Symbole aus allen Renamer-Gruppen für Visualisierungszwecke.
|
||||
|
||||
@@ -1229,6 +1240,7 @@ def collect_all_symbols_from_groups(doc, msp, renamer_groups, renamer_layers, er
|
||||
renamer_groups: Dictionary mit gruppierten Renamer-Blöcken
|
||||
renamer_layers: Liste der Layer mit Renamer-Blöcken
|
||||
error_collector: ErrorCollector für Fehlerbehandlung
|
||||
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||
|
||||
Returns:
|
||||
Liste aller gefundenen Symbole mit 'entity', 'position', 'attributes', 'layer'
|
||||
@@ -1244,7 +1256,7 @@ def collect_all_symbols_from_groups(doc, msp, renamer_groups, renamer_layers, er
|
||||
|
||||
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)
|
||||
symbols = find_symbols_in_boundary(doc, msp, boundary, renamer_layers, attributes, error_collector, polyline_max_distance)
|
||||
|
||||
# Füge Symbole hinzu, aber nur wenn das Entity noch nicht gesehen wurde
|
||||
for symbol in symbols:
|
||||
@@ -1325,6 +1337,11 @@ if __name__ == '__main__':
|
||||
print("Keine Layer in der Konfiguration gefunden")
|
||||
exit(1)
|
||||
|
||||
# Lese Parameter aus Config
|
||||
config_parameters = read_config_parameters(config_path)
|
||||
polyline_max_distance = config_parameters.get('polyline_max_distance', 500.0)
|
||||
print(f"Parameter: polyline_max_distance = {polyline_max_distance}")
|
||||
|
||||
# Lese DXF-Datei
|
||||
if dxf_is_binary(dxf_path):
|
||||
print("DXF-Datei ist binär. Lese komplette Datei. Achten Sie auf RAM-Nutzung.")
|
||||
@@ -1340,7 +1357,7 @@ if __name__ == '__main__':
|
||||
print("Starte Verarbeitung der Renamer-Blöcke")
|
||||
print("="*60 + "\n")
|
||||
|
||||
renamed_symbols, renamer_groups = process_renamer_blocks(doc, msp, renamer_layers, error_collector)
|
||||
renamed_symbols, renamer_groups = process_renamer_blocks(doc, msp, renamer_layers, error_collector, polyline_max_distance)
|
||||
|
||||
print("\n" + "="*60)
|
||||
print(f"Verarbeitung abgeschlossen: {len(renamed_symbols)} Symbole nummeriert")
|
||||
@@ -1354,7 +1371,7 @@ if __name__ == '__main__':
|
||||
|
||||
# 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)
|
||||
all_symbols = collect_all_symbols_from_groups(doc, msp, renamer_groups, renamer_layers, error_collector, polyline_max_distance)
|
||||
if all_symbols:
|
||||
draw_symbol_frames(doc, msp, all_symbols)
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user