Определить пересечение между поверхностями двух 3D-сеток одна внутри другой - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть две сетки, которые центрированы в начале координат осей, одна внутри другой.Я реализовал простую функцию в vtk для масштабирования внутренней сетки.Идея состоит в том, чтобы остановить этот цикл, когда поверхность внутренней сетки вступает в контакт с поверхностью внешней.Я пытался использовать библиотеки vtk, но ничего не нашел.Логическое пересечение vtk работает хорошо, но кажется бесполезным.

У вас есть идеи, чтобы решить эту проблему?
Есть ли в vtk функция, которая могла бы сделать это?

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете проверить пересечение с помощью 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

Я видел, что у вас возникли проблемы с установкой vtkInterface для Mac OS.С тех пор я обновил источник и загрузил 0.11.3 в PyPi.Пожалуйста, переустановите с:

pip install vtkInterface --upgrade
...