Python 如何在多个多边形数据中获取点

Python 如何在多个多边形数据中获取点,python,3d,vtk,Python,3d,Vtk,我使用vtkAppendPolyData将多个polydata合并为一个polydata,并使用vtkSelectEnclosedPoints获取polydata中的点 下面是使用tvtk.api的python代码: from tvtk.api import tvtk # create some random points points = np.random.randn(9999, 3) pd_points = tvtk.PolyData() pd_points.points = poin

我使用
vtkAppendPolyData
将多个polydata合并为一个polydata,并使用
vtkSelectEnclosedPoints
获取polydata中的点

下面是使用
tvtk.api
的python代码:

from tvtk.api import tvtk

# create some random points

points = np.random.randn(9999, 3)
pd_points = tvtk.PolyData()
pd_points.points = points
pd_points.verts = np.arange(len(points)).reshape(-1, 1)

# create two polydata

cube1 = tvtk.CubeSource()
cube1.update()
cube2 = tvtk.CubeSource()
cube2.center = (0.5, 0, 0)
cube2.update()

# merge the two polydata into one:

append = tvtk.AppendPolyData()
append.add_input_data(cube1.output)
append.add_input_data(cube2.output)
append.update()

# select points inside polydata

sep = tvtk.SelectEnclosedPoints()
sep.set_input_data(pd_points)
sep.set_surface_data(append.output)
sep.update()


# remove outside points

tp = tvtk.ThresholdPoints()
tp.threshold_by_upper(0.5)
tp.set_input_data(sep.output)
tp.update()
res = tp.output
res.point_data.remove_array(0)
结果如下:

如您所见,两个多边形数据内的点不包括在内


我不想使用for循环,因为我有很多polydata来剪裁数据。

您创建的曲面不是流形,并且
vtkSelectEnclosedPoints
仅适用于流形。 尝试将
vtkBooleanOperationPolyDataFilter
SetOperationToUnion()
一起使用,而不是
VTKApendPolyData