确定两个3D网格的表面之间的相交

时间:2018-11-13 20:28:46

标签: python 3d mesh vtk surface

我有两个以轴的原点为中心的网格,一个在另一个内部。我已经在vtk中实现了一个简单的功能来缩放内部网格。这个想法是当内部网格的表面与外部网格的表面接触时停止此循环。我尝试使用vtk库,但没有发现任何问题。 vtk布尔交集工作正常,但似乎没有用。

您有解决此问题的想法吗?
vtk中是否有一个功能可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以测试与vtkInterface的交集:

import numpy as np
import vtkInterface as vtki

# create a test sphere
sphere = vtki.Sphere(radius=1.0)

# generate a cylinder inside the sphere and change its height
# and test for an intersection
for height in np.linspace(1, 3, 50):
    cylinder = vtki.Cylinder([0, 0, 0], [1, 0, 0],
                             0.2, height).TriFilter()

    # test intersection
    cut_mesh = cylinder.BooleanCut(sphere)

    # cut_mesh will be empty when there's no intersection
    if cut_mesh.GetNumberOfPoints():
        break


plotter = vtki.PlotClass()
plotter.AddMesh(sphere, style='wireframe')
plotter.AddMesh(cylinder, 'b', opacity=0.2, showedges=False)
plotter.AddMesh(cut_mesh, 'r', showedges=False)
plotter.Plot()

当圆柱体的高度为2.11时此相交并生成以下图:

Intersection Screenshot

我看到您在Mac OS上安装vtkInterface遇到麻烦。此后,我更新了源代码并将0.11.3上传到PyPi。请重新安装:

pip install vtkInterface --upgrade