You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导出高程等高线至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')

关键修改说明

  1. 拆分独立子路径:用path.to_polygons()将单个Path拆分为多个独立顶点数组,每个数组对应一条独立等高线,彻底解决错误连接问题。
  2. 图层预处理:提前创建对应高程的图层,避免重复创建引发的DXF格式警告。
  3. 过滤无效路径:跳过顶点数不足2的无效路径,防止生成错误的DXF实体。
  4. 补全绘图依赖:原代码缺失fig, ax = plt.subplots(),修复后保证代码可正常运行。

内容的提问来源于stack exchange,提问作者OnitKra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:30:57