我有两个以轴的原点为中心的网格,一个在另一个内部。我已经在vtk中实现了一个简单的功能来缩放内部网格。这个想法是当内部网格的表面与外部网格的表面接触时停止此循环。我尝试使用vtk库,但没有发现任何问题。 vtk布尔交集工作正常,但似乎没有用。
您有解决此问题的想法吗?
vtk中是否有一个功能可以做到这一点?
答案 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时此相交并生成以下图:
我看到您在Mac OS上安装vtkInterface遇到麻烦。此后,我更新了源代码并将0.11.3上传到PyPi。请重新安装:
pip install vtkInterface --upgrade