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

PyVista合并拉伸多边形时侧壁消失问题求助

问题原因

PyVista中+=运算符执行的是带自动清理的合并操作,等价于调用merge(merge_points=True)。当多个拉伸后的几何体存在位置重叠且法向相反的面(比如两个拉伸体的侧壁刚好贴合),或者重复添加了同一个几何体(你的代码中第一个拉伸体被手动赋值后,循环又从x=0开始再次添加,导致完全重叠的面),合并过程会将这些面判定为冗余面并删除,最终表现为侧壁消失。

解决建议

1. 修复重复添加的问题

你的代码先将第一个拉伸体赋值给merged,随后循环又从x=0开始再次添加该几何体,导致完全重叠的面被清理。修改循环起始索引,跳过已添加的第一个几何体:

# 原循环:
# for x in range(len(data_x)):
# 修改为:
for x in range(1, len(data_x)):

2. 禁用自动顶点合并(或调整合并公差)

如果需要保留重叠面,改用merge方法并关闭merge_points参数,避免自动删除冗余面:

# 替换 merged += extrusion 为:
merged = merged.merge(extrusion, merge_points=False)

如果希望合并顶点但保留必要的面,可以调整merge_tol参数(控制顶点合并的距离公差),比如设置merge_tol=1e-6,避免误合并非重叠顶点:

merged = merged.merge(extrusion, merge_points=True, merge_tol=1e-6)

3. 使用MultiBlock容器先收集再合并

先将所有拉伸体存入pv.MultiBlock,再统一合并,这种方式更可控:

# 替换原有合并逻辑
block = pv.MultiBlock()
for x in range(len(data_x)):
    z = np.zeros_like(data_x[x])
    points_3d = np.column_stack((data_x[x], data_y[x], z))
    face = [len(data_x[x])] + list(range(len(data_x[x])))
    polygon = pv.PolyData(points_3d, faces=[face])
    extrusion = polygon.extrude((0, 0, 1), capping=True)
    block.append(extrusion)

merged = block.merge(merge_points=False)  # 按需设置merge_points

验证方法

修改后可在Colab中添加可视化代码,确认侧壁是否保留:

plotter = pv.Plotter()
plotter.add_mesh(merged, color='lightblue', show_edges=True)
plotter.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:32:17