"""
An example showing nearest point queries, sampling the
volume of box primitives generated from the oriented bounds
and using PointCloud objects for visualization.
"""
'\nAn example showing nearest point queries, sampling the\nvolume of box primitives generated from the oriented bounds\nand using PointCloud objects for visualization.\n'
import trimesh
import numpy as np
# load a large- ish PLY model with colors
mesh = trimesh.load('../models/cycloidal.ply')
# we can sample the volume of Box primitives
points = mesh.bounding_box_oriented.sample_volume(count=10)
# find the closest point on the mesh to each random point
(closest_points,
distances,
triangle_id) = mesh.nearest.on_surface(points)
print('Distance from point to surface of mesh:\n{}'.format(distances))
Distance from point to surface of mesh: [0.00642205 0.01678556 0.05131083 0.00165325 0.14430209 0.00258569 0.02573756 0.03039422 0.14947908 0.00025018]
# create a PointCloud object out of each (n,3) list of points
cloud_original = trimesh.points.PointCloud(points)
cloud_close = trimesh.points.PointCloud(closest_points)
# create a unique color for each point
cloud_colors = np.array([trimesh.visual.random_color() for i in points])
# set the colors on the random point and its nearest point to be the same
cloud_original.vertices_color = cloud_colors
cloud_close.vertices_color = cloud_colors
# create a scene containing the mesh and two sets of points
scene = trimesh.Scene([mesh,
cloud_original,
cloud_close])
# show the scene wusing
scene.show()