# Examples from pyvista.DataSet.point_neighbors_levels
# ====================================================

# Get the point neighbors IDs starting from the 0-th point
# up until the third level.
import pyvista as pv
mesh = pv.Sphere(theta_resolution=10)
pt_nbr_levels = mesh.point_neighbors_levels(0, 3)
pt_nbr_levels = list(pt_nbr_levels)
pt_nbr_levels[0]
pt_nbr_levels[1]
pt_nbr_levels[2]

# Visualize these points IDs.
from functools import partial
pl = pv.Plotter()
_ = pl.add_mesh(mesh, show_edges=True)

# Define partial function to add point labels
add_point_labels = partial(
    pl.add_point_labels,
    text_color='white',
    font_size=40,
    point_size=10,
    always_visible=True,
)

# Add the first point label
_ = add_point_labels(mesh.points[0], labels=['0'], text_color='blue')

# Add the neighbors to the plot
neighbors = mesh.point_neighbors_levels(0, n_levels=3)
for i, ids in enumerate(neighbors, start=1):
    _ = add_point_labels(
        mesh.points[ids],
        labels=[f'{i}'] * len(ids),
        text_color='red',
    )

pl.view_xy()
pl.camera.zoom(4.0)
pl.show()

# ----------------------------------------------------------------------
# Generated by sphinx-examples-as-code https://github.com/pyvista/sphinx-examples-as-code

