import ezdxf import argparse from pathlib import Path def diagnose_blocks(dxf_file: Path): """ 加载一个DXF文件,并打印出其模型空间中所有顶层块参照的名称。 """ if not dxf_file.is_file(): print(f"错误: 文件不存在 -> {dxf_file}") return try: doc = ezdxf.readfile(dxf_file) except IOError: print(f"错误: 无法读取文件 -> {dxf_file}") return except ezdxf.DXFStructureError as e: print(f"DXF 文件结构错误: {e}") return msp = doc.modelspace() top_level_blocks = msp.query('INSERT') print(f"\n--- 在 '{dxf_file.name}' 的模型空间中找到的顶层块参照 ---") if not top_level_blocks: print("未找到任何顶层的块参照 (INSERT entities)。") return # 为了更好的可读性,我们统计一下每个块名出现的次数 from collections import Counter block_names = [block.dxf.name for block in top_level_blocks] block_counts = Counter(block_names) print(f"共找到 {len(top_level_blocks)} 个块参照,涉及 {len(block_counts)} 个不同的块定义。") print("-" * 50) for name, count in block_counts.items(): print(f" 块名: '{name}' \t (在模型空间中出现了 {count} 次)") print("-" * 50) if __name__ == "__main__": parser = argparse.ArgumentParser( description="诊断DXF文件,列出其模型空间中所有顶层的块参照名称。" ) parser.add_argument("input_dxf", type=Path, help="要诊断的源DXF文件的路径。") args = parser.parse_args() diagnose_blocks(args.input_dxf)