PyVista:使用附加点更新 PolyData

PyVista: Update PolyData with additional points

我想向绘图仪中的 pyvista.PolyData 添加点(和单元格)。我尝试使用 Plotter.update_coordinates 函数,但这仅对大小相等的点数据有用:

import numpy as np
import pyvista as pv
import pyvistaqt

points = np.array([[1, 0, 0],
                   [2, 0, 0],
                   [3, 0, 0]])


point_cloud = pv.PolyData(points)

plotter = pyvistaqt.BackgroundPlotter()
a = plotter.add_points(point_cloud)
plotter.show()

new_points = np.array([[1, 0, 0],
                       [2, 0, 0],
                       [5, 0, 0], 
                       [7, 0, 0]])  # Not updated in the plotter

plotter.update_coordinates(new_points, point_cloud, render=True)

似乎更新了点,但没有更新单元格。因此,绘图仪中仅修改了相应的单元格。

更新包含新(附加)点的 PolyData 的最佳做法是什么?

你说

I would like to add points (and cells) to the pyvista.PolyData in the plotter

但这对我来说不是很清楚。您有两种选择:向 PolyData 添加更多点,然后绘制该网格,或者您可以向同一绘图仪添加两个不同的 PolyData 对象。

这里有两个选项:

import pyvista as pv

sphere_a = pv.Sphere()
sphere_b = sphere_a.translate((1, 0, 0), inplace=False)

# option 1: merge the PolyData
spheres = sphere_a + sphere_b
# alternatively: sphere_a += sphere_b for an in-place operation
spheres.plot()  # plot the two spheres in one PolyData
# we could also use a Plotter for this

# option 2: add both PolyData to the same plotter
plotter = pv.Plotter()
plotter.add_mesh(sphere_a)  # or add_points() for a point cloud
plotter.add_mesh(sphere_b)
plotter.show()  # show the two spheres from two PolyData

附带说明一下,如果您只有点云(即没有单元格),则应考虑使用 the new PointSet class。这需要 PyVista 0.34.0 和 VTK 9.1.0 或更高版本。