如何切割连接到低于pyvista中某个值的点的顶点和面?
How to cut vertices and faces connected to points lower than some value in pyvista?
因此,当从 Grass GIS 导出 r.out.vtk
时,我们会得到一个带有 -99999 点而不是空点的糟糕表面:
我想删除它们,但是一个简单的剪辑是不够的:
pd = pv.read('./pid1.vtk')
pd = pd.clip((0,1,1), invert=False).extract_surface()
p.add_mesh(pd ) #add atoms to scene
p.show()
导致:
所以我想知道如何使用 pyvista 只保留顶部(> -999)点和连接的顶点 - 以便只获得顶部平面(实际上是 curved\not 平面)?
link 到 example .vtk
有一种简单的方法可以做到这一点,但没有...
只要您只有一组标量,您就可以将 pyvista 的 threshold
过滤器与 all_scalars=True
一起使用:
import pyvista as pv
pd = pv.read('./pid1.vtk')
pd = pd.threshold(-999, all_scalars=True)
plotter = pv.Plotter()
plotter.add_mesh(pd) #add atoms to scene
plotter.show()
由于 all_scalars
开始基于每个标量数组进行过滤,因此这只会在没有其他标量的情况下执行您期望的操作。此外,不幸的是,似乎有 a bug in pyvista(预计将在 0.32.0 版中修复)这使得无法使用此关键字。
同时(如果您不想在发布修复程序之前使用 pyvista 的主分支)可以做的是使用 numpy 自己对数据进行阈值处理:
import pyvista as pv
pd = pv.read('./pid1.vtk')
scalars = pd.active_scalars
keep_inds = (scalars > -999).nonzero()[0]
pd = pd.extract_points(keep_inds, adjacent_cells=False)
plotter = pv.Plotter()
plotter.add_mesh(pd) #add atoms to scene
plotter.show()
all_scalars
(在threshold
中)和adjacent_cells
(在extract_points
中)的要点是只保留每个点都满足条件的单元格。
通过以上两项,我使用您的数据得到下图:
因此,当从 Grass GIS 导出 r.out.vtk
时,我们会得到一个带有 -99999 点而不是空点的糟糕表面:
我想删除它们,但是一个简单的剪辑是不够的:
pd = pv.read('./pid1.vtk')
pd = pd.clip((0,1,1), invert=False).extract_surface()
p.add_mesh(pd ) #add atoms to scene
p.show()
导致:
所以我想知道如何使用 pyvista 只保留顶部(> -999)点和连接的顶点 - 以便只获得顶部平面(实际上是 curved\not 平面)?
link 到 example .vtk
有一种简单的方法可以做到这一点,但没有...
只要您只有一组标量,您就可以将 pyvista 的 threshold
过滤器与 all_scalars=True
一起使用:
import pyvista as pv
pd = pv.read('./pid1.vtk')
pd = pd.threshold(-999, all_scalars=True)
plotter = pv.Plotter()
plotter.add_mesh(pd) #add atoms to scene
plotter.show()
由于 all_scalars
开始基于每个标量数组进行过滤,因此这只会在没有其他标量的情况下执行您期望的操作。此外,不幸的是,似乎有 a bug in pyvista(预计将在 0.32.0 版中修复)这使得无法使用此关键字。
同时(如果您不想在发布修复程序之前使用 pyvista 的主分支)可以做的是使用 numpy 自己对数据进行阈值处理:
import pyvista as pv
pd = pv.read('./pid1.vtk')
scalars = pd.active_scalars
keep_inds = (scalars > -999).nonzero()[0]
pd = pd.extract_points(keep_inds, adjacent_cells=False)
plotter = pv.Plotter()
plotter.add_mesh(pd) #add atoms to scene
plotter.show()
all_scalars
(在threshold
中)和adjacent_cells
(在extract_points
中)的要点是只保留每个点都满足条件的单元格。
通过以上两项,我使用您的数据得到下图: