1

所以我有一个封闭的网格和一个单点。如何检查一个是否在另一个内部?

我试过了:

def is_inside(point):
    points = pv.PolyData([point,])  
    point_in_question = points.points[0]
    select = mesh_model.select_enclosed_points(points)
    inside = select.threshold(0.5)
    if len(inside.points) >0:
            print(len(inside.points))
            print(f"inside atom {i}")
    else:
            print("outside")

但我在len(inside.points). 那么如何检查一个点是否在网格内?

4

1 回答 1

2

正如我在评论中建议的那样,您应该将点查询网格和封闭曲面交换为过滤器:

import pyvista as pv

mesh_model = pv.Sphere()
points = [[0, 0, 0], [10, 10, 10]]
points_poly = pv.PolyData(points)
select = points_poly.select_enclosed_points(mesh_model)

现在select有一个'SelectedPoints'点数组,第一个点(内部)为 1,第二个点(外部)为 0:

>>> select['SelectedPoints']
array([1, 0], dtype=uint8)

如果您收到有关表面未关闭的错误(如您在评论中指出的那样),则表示您mesh_model未关闭。你可以检查

mesh_model.n_open_edges

对于流形网格,它应该是 0。

于 2021-07-05T11:05:41.467 回答