""" Diagnose: Inhalt jedes VF_n/GF_n-Wrapper-Blocks in Baureihenfolge ausgeben. Zeigt fuer jeden Wrapper (VF_n/GF_n) alle direkt in seiner Blockdefinition enthaltenen Sub-INSERTs (rekursiv, wie ssg-collect-nested-inserts es tut) in der Reihenfolge, in der sie in der Blockdefinition stehen - inkl. Blockname und lokalem Einfuegepunkt. Damit sichtbar wird, welche Foerderer-/ Gefaellestrecke-Segmente (VF-Baustein-Bloecke vs. GF-Baustein-Bloecke) tatsaechlich zwischen den verpackten Separator_SP-Symbolen liegen - ein einzelner VF_n-Wrapper kann intern mehrfach zwischen Foerderer- und Gefaellestrecke-Abschnitten wechseln, sein Blockname (VF_n) sagt darueber nichts aus. Aufruf: python dump_vf_wrapper_inhalt.py """ import sys import ezdxf # Muster grob nach Herkunft eingeteilt, rein zur Anzeige - keine # Export-Klassifikation. GF-Baustein-Bloecke tragen "Staustrecke"/"Gefaelle" # im Namen (siehe Gefaellestrecke.lsp/vf_linienzug.lsp GF-Zweige), reine # VF-Bausteine div. Praefixe (siehe vf_standard.lsp/vf_etage.lsp/ # vf_linienzug.lsp horizontale/geneigte Foerderer-Bloecke). def klassifiziere(block_name): bn = block_name.upper() if bn.startswith("STAUSTRECKE_SEPARATOR"): return "SEP (Trennsteg)" if "SEPARATOR_SP" in bn: return "SEP (Symbol)" if bn.startswith(("AS_ELEMENT", "ES_ELEMENT")): return "AS/ES" if "GEFAELLE" in bn or bn.startswith("STAUSTRECKE"): return "GF-Baustein" if bn.startswith(("VARIO_", "VF_", "UMLENK", "MOTOR", "ANTRIEB")): return "VF-Baustein" return "" def dump_block(doc, block_name, tiefe=0): block = doc.blocks.get(block_name) if block is None: print(" " * tiefe + f"[Blockdefinition {block_name} nicht gefunden]") return for e in block: if e.dxftype() != "INSERT": continue name = e.dxf.name x, y, z = e.dxf.insert klasse = klassifiziere(name) klasse_str = f" <- {klasse}" if klasse else "" print(" " * tiefe + f"{name:40s} x={x:10.2f} y={y:10.2f}{klasse_str}") # rekursiv absteigen (verschachtelte Wrapper/Zwischenbloecke) if doc.blocks.get(name) is not None: dump_block(doc, name, tiefe + 1) def main(): if len(sys.argv) != 2: print(f"Aufruf: python {sys.argv[0]} ") sys.exit(1) pfad = sys.argv[1] doc = ezdxf.readfile(pfad) msp = doc.modelspace() wrapper = [ e for e in msp.query("INSERT") if e.dxf.name.startswith(("VF_", "GF_")) ] wrapper.sort(key=lambda e: e.dxf.name) if not wrapper: print("Keine VF_n/GF_n-Wrapper-Bloecke im Modellraum gefunden.") return for e in wrapper: print(f"\n=== {e.dxf.name} (handle={e.dxf.handle}) ===") dump_block(doc, e.dxf.name) if __name__ == "__main__": main()