虽然大多数功能可以简化,但并非所有功能都可以不丢失功能或性能地简化。
在碰撞过滤器中,我们演示了如何计算两个网格之间的碰撞。例如:
code.matlab
import pyvista as pv
# 创建默认球体和偏移球体
mesh_a = pv.Sphere()
mesh_b = pv.Sphere(center=(-0.4, 0, 0))
out, n_coll = mesh_a.collision(mesh_b, generate_scalars=True, contact_mode=2)
pl = pv.Plotter()
pl.add_mesh(out)
pl.add_mesh(mesh_b, style='wireframe', color='k')
pl.camera_position = 'xy'
pl.show()
\[\]
在底层,碰撞过滤器使用定向边界框(OBB)树检测网格碰撞。对于单个碰撞,此过滤器与 VTK 对应项性能相同,但在计算相同网格的多次碰撞时,如在碰撞示例中,使用 vtkCollisionDetectionFilter 更有效,因为 OBB 树为每个网格计算一次。在大多数情况下,纯 PyVista 对大多数数据科学足够了,但有时您可能希望直接使用 VTK 类。
注意,没有什么能阻止您使用 VTK 类然后将输出包装为 PyVista。例如:
code.matlab
import vtk
import pyvista as pv
# 使用 vtk 创建圆
polygonSource = vtk.vtkRegularPolygonSource()
polygonSource.GeneratePolygonOff()
polygonSource.SetNumberOfSides(50)
polygonSource.SetRadius(5.0)
polygonSource.SetCenter(0.0, 0.0, 0.0)
polygonSource.Update()
# 包装并使用 pyvista 绘制
mesh = pv.wrap(polygonSource.GetOutput())
mesh.plot(line_width=3, cpos='xy', color='k')
\[\]
通过这种方式,如果您需要 PyVista 的灵活性和 VTK 的原始功能,您可以获得“两全其美”。
注意
您可以使用 pyvista.Polygon() 作为上述 VTK 代码的一行替换。