导出高程等高线至DXF时线条错误连接问题求助
解决等高线DXF导出错误连接问题
问题根源
matplotlib的contour生成的Path对象中,同一高程的多个独立等高线(比如“岛”)会被打包成一个Path,直接读取path.vertices会把不同子路径的顶点错误拼接,导致DXF中出现不必要的连接线。
修复方案
使用path.to_polygons()拆分每个独立的子路径,为每个子路径创建单独的DXF多段线实体,确保同一高程的不同等高线是独立对象。
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import griddata import ezdxf # 提取数据列 x = cut_out_df['x'].values y = cut_out_df['y'].values z = cut_out_df['z'].values # 创建插值网格 grid_x, grid_y = np.mgrid[min(x):max(x):200j, min(y):max(y):200j] grid_z = griddata((x, y), z, (grid_x, grid_y), method='linear') # 生成等高线 contour_levels = np.linspace(np.min(grid_z), np.max(grid_z), 10) # 补全绘图对象,原代码缺失此部分 fig, ax = plt.subplots() contour_data = ax.contour(grid_x, grid_y, grid_z, levels=contour_levels) # 导出到DXF doc = ezdxf.new() msp = doc.modelspace() # 遍历等高线层级和对应集合 for level, collection in zip(contour_levels, contour_data.collections): layer_name = f'Contour_{level:.2f}' # 提前创建图层,避免重复创建警告 if not doc.layers.has_entry(layer_name): doc.layers.new(name=layer_name) for path in collection.get_paths(): # 拆分路径为独立的子路径 for polygon in path.to_polygons(): # 过滤无效短路径 if len(polygon) < 2: continue # 为每个独立子路径创建多段线 polyline = msp.add_lwpolyline(polygon, close=False) polyline.dxf.layer = layer_name # 保存DXF文件 doc.saveas('contours.dxf')
关键修改说明
- 拆分独立子路径:用
path.to_polygons()将单个Path拆分为多个独立顶点数组,每个数组对应一条独立等高线,彻底解决错误连接问题。 - 图层预处理:提前创建对应高程的图层,避免重复创建引发的DXF格式警告。
- 过滤无效路径:跳过顶点数不足2的无效路径,防止生成错误的DXF实体。
- 补全绘图依赖:原代码缺失
fig, ax = plt.subplots(),修复后保证代码可正常运行。
内容的提问来源于stack exchange,提问作者OnitKra
相关产品推荐
相关产品推荐

