如何用ezdxf筛选指定图层及named view内的DXF文本并存入DataFrame
从DXF模型空间的指定命名视图/图层提取文本并存入DataFrame
实现步骤
- 遍历DXF文件中所有命名视图,获取每个视图的边界框(
extmin为左下角坐标,extmax为右上角坐标) - 对每个视图,筛选出图层为"text"且插入点在视图边界框内的单行TEXT对象
- 收集每个视图的文本数据,最终存入Pandas DataFrame
完整代码
import ezdxf import pandas as pd filepath = "C:/MBS_JOBS-16/8741-22/8741-22_(DTL).dxf" doc = ezdxf.readfile(filepath) msp = doc.modelspace() # 存储所有视图的文本结果 all_view_data = [] # 遍历所有命名视图 for view in doc.views: # 获取视图的边界范围 view_min = view.dxf.extmin view_max = view.dxf.extmax view_name = view.dxf.name # 筛选符合条件的文本对象 for text_obj in msp.query('TEXT[layer=="text"]'): # 仅处理单行TEXT,需包含MTEXT可改回原查询语句 insert = text_obj.dxf.insert # 判断插入点是否在视图边界内 if (view_min.x <= insert.x <= view_max.x) and (view_min.y <= insert.y <= view_max.y): all_view_data.append({ "视图名称": view_name, "文本内容": text_obj.dxf.text, "插入点X": insert.x, "插入点Y": insert.y }) # 转换为DataFrame result_df = pd.DataFrame(all_view_data) print(result_df)
关键说明
doc.views:直接获取DXF文件中所有命名视图集合- 边界框判断:通过对比文本对象的
insert坐标与视图的extmin/extmax,精准筛选视图内的文本 - 数据结构:用字典存储每个文本的关联信息(视图名称、内容、坐标),便于后续DataFrame的结构化处理
- 可扩展性:若需包含MTEXT,只需将查询语句改回
'TEXT MTEXT[layer=="text"]'
内容的提问来源于stack exchange,提问作者Rand0mdude
相关产品推荐
相关产品推荐

