我使用vtkAppendPolyData
将多个polydata合并到一个polydata中,并使用vtkSelectEnclosedPoints
来获取polydata中的点。
以下是使用tvtk.api
:
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来剪辑数据。
答案 0 :(得分:1)
您创建的曲面不是流形,vtkBooleanOperationPolyDataFilter
仅适用于流形。
尝试将SetOperationToUnion()
与vtkAppendPolyData
一起使用,而不是SurfaceView.setZOrderOnTop
。