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.
|
Sammelt alle Symbole aus allen Boundaries einer Renamer-Gruppe.
|
||||||
Prüft auf Duplikate (Symbole in mehreren Bereichen).
|
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
|
group_blocks: Liste von (insert, boundary, attributes, is_rectangle) Tupeln
|
||||||
block_name: Name des Renamer-Blocks (für Fehlermeldungen)
|
block_name: Name des Renamer-Blocks (für Fehlermeldungen)
|
||||||
error_collector: ErrorCollector für Fehlerbehandlung
|
error_collector: ErrorCollector für Fehlerbehandlung
|
||||||
|
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Liste aller eindeutigen Symbole
|
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:
|
for insert, boundary, attributes, is_rectangle in group_blocks:
|
||||||
# Finde Symbole innerhalb dieses Bereichs
|
# 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
|
# Füge Symbole hinzu, aber nur wenn das Entity noch nicht gesehen wurde
|
||||||
for symbol in symbols:
|
for symbol in symbols:
|
||||||
@@ -875,11 +876,14 @@ def collect_symbols_from_group(doc, msp, renamer_layers, group_blocks, block_nam
|
|||||||
return all_symbols
|
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.
|
Zweiter Pass: Verarbeitet jede Renamer-Block-Gruppe.
|
||||||
Sammelt Symbole, sortiert sie und nummeriert sie.
|
Sammelt Symbole, sortiert sie und nummeriert sie.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Liste aller umbenannten Symbole
|
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)")
|
print(f"\n Verarbeite Gruppe: {block_name} ({len(group_blocks)} Renamer-Blöcke)")
|
||||||
|
|
||||||
# Sammle Symbole aus ALLEN Boundaries dieser Gruppe
|
# 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")
|
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
|
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.
|
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
|
boundary: Polygon-Punkte des Renamer-Bereichs
|
||||||
attributes: Attribute des Renamer-Blocks
|
attributes: Attribute des Renamer-Blocks
|
||||||
renamer_pos: Position des Renamer-Blocks
|
renamer_pos: Position des Renamer-Blocks
|
||||||
|
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Tuple (in_boundary, wrong_layer_info):
|
Tuple (in_boundary, wrong_layer_info):
|
||||||
@@ -988,7 +993,7 @@ def check_symbol_in_boundary(symbol, boundary, attributes, renamer_pos):
|
|||||||
|
|
||||||
if is_polyline_path:
|
if is_polyline_path:
|
||||||
# Für POLYLINE_PATH: Prüfe Nähe zur Polylinie
|
# 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
|
return False, None
|
||||||
else:
|
else:
|
||||||
# Für Rechtecke: Prüfe ob innerhalb des Polygons
|
# 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.
|
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("\n" + "="*60)
|
||||||
print("Prüfe ob alle Symbole mit '@' im IO in einem Renamer-Bereich liegen")
|
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
|
wrong_layer_info = None
|
||||||
|
|
||||||
for boundary, attributes, renamer_pos in all_boundaries:
|
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:
|
if is_in_boundary:
|
||||||
# Layer passt auch - alles OK
|
# 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")
|
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.
|
Verarbeitet alle Renamer-Blöcke auf den angegebenen Layern.
|
||||||
Gruppiert Blöcke mit identischer Konfiguration und nummeriert alle Symbole
|
Gruppiert Blöcke mit identischer Konfiguration und nummeriert alle Symbole
|
||||||
aus allen Blöcken einer Gruppe gemeinsam.
|
aus allen Blöcken einer Gruppe gemeinsam.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Tuple (all_renamed, renamer_groups):
|
Tuple (all_renamed, renamer_groups):
|
||||||
- all_renamed: Liste der umbenannten Symbole
|
- 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)
|
check_overlapping_renamer_blocks(renamer_groups, error_collector)
|
||||||
|
|
||||||
# Zweiter Pass: Verarbeite jede Gruppe
|
# 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
|
# 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
|
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.
|
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_groups: Dictionary mit gruppierten Renamer-Blöcken
|
||||||
renamer_layers: Liste der Layer mit Renamer-Blöcken
|
renamer_layers: Liste der Layer mit Renamer-Blöcken
|
||||||
error_collector: ErrorCollector für Fehlerbehandlung
|
error_collector: ErrorCollector für Fehlerbehandlung
|
||||||
|
polyline_max_distance: Maximale Distanz zur Polylinie (aus Config)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Liste aller gefundenen Symbole mit 'entity', 'position', 'attributes', 'layer'
|
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:
|
for insert, boundary, attributes, is_rectangle in group_blocks:
|
||||||
# Finde Symbole innerhalb dieses Bereichs
|
# 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
|
# Füge Symbole hinzu, aber nur wenn das Entity noch nicht gesehen wurde
|
||||||
for symbol in symbols:
|
for symbol in symbols:
|
||||||
@@ -1325,6 +1337,11 @@ if __name__ == '__main__':
|
|||||||
print("Keine Layer in der Konfiguration gefunden")
|
print("Keine Layer in der Konfiguration gefunden")
|
||||||
exit(1)
|
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
|
# Lese DXF-Datei
|
||||||
if dxf_is_binary(dxf_path):
|
if dxf_is_binary(dxf_path):
|
||||||
print("DXF-Datei ist binär. Lese komplette Datei. Achten Sie auf RAM-Nutzung.")
|
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("Starte Verarbeitung der Renamer-Blöcke")
|
||||||
print("="*60 + "\n")
|
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("\n" + "="*60)
|
||||||
print(f"Verarbeitung abgeschlossen: {len(renamed_symbols)} Symbole nummeriert")
|
print(f"Verarbeitung abgeschlossen: {len(renamed_symbols)} Symbole nummeriert")
|
||||||
@@ -1354,7 +1371,7 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
# Zeichne Symbol-Rahmen wenn gewünscht
|
# Zeichne Symbol-Rahmen wenn gewünscht
|
||||||
if args.show_symbol_frames:
|
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:
|
if all_symbols:
|
||||||
draw_symbol_frames(doc, msp, all_symbols)
|
draw_symbol_frames(doc, msp, all_symbols)
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user