Source code for entente.trimesh_search

"""
On Mac OS:

.. code-block:: sh

    brew install spatialindex
    pip install rtree trimesh
"""
from __future__ import print_function


[docs]def require_trimesh_with_rtree(): """ Check that trimesh and rtree are installed and can be imported, and raise an error with a helpful error message if they are not. """ try: import rtree import trimesh # For flake8. assert rtree assert trimesh except ImportError: print( """ libspatialindex, rtree, and trimesh are not installed. On Mac OS: $ brew install spatialindex $ pip install rtree trimesh """ ) raise ImportError("trimesh, rtree, and spatialindex are not installed")
[docs]def faces_nearest_to_points(mesh, query_points, ret_points=False): """ Find the triangular faces on a mesh which are nearest to the given query points. Args: query_points (np.arraylike): The points to query, with shape `kx3` ret_points (bool): When `True`, return both the indices of the nearest faces and the closest points to the query points, which are not necessarily vertices. When `False`, return only the face indices. Returns: object: face indices as `kx1 np.ndarray`, or when `ret_points` is `True`, a tuple also including the coordinates of the closest points as `kx3 np.ndarray`. """ import trimesh trimesh_mesh = trimesh.Trimesh(vertices=mesh.v, faces=mesh.f) closest_points, _, face_indices = trimesh_mesh.nearest.on_surface(query_points) return (face_indices, closest_points) if ret_points else face_indices