Source code for geomfum.wrap.polyscope
"""Wraps polyscope functions."""
import polyscope as ps
import geomstats.backend as gs
from geomfum.plot import ShapePlotter
[docs]
class PsMeshPlotter(ShapePlotter):
"""Plotting object to display meshes."""
# NB: for now assumes only one mesh is plotted
def __init__(self, colormap="viridis", backend=""):
super().__init__()
self.colormap = colormap
self._plotter = ps
self._name = "Mymesh"
self._plotter.init(backend)
[docs]
def add_mesh(self, mesh):
"""Add mesh to plot.
Parameters
----------
mesh : TriangleMesh
Mesh to be plotted.
"""
self._plotter.register_surface_mesh(self._name, gs.to_numpy(mesh.vertices), gs.to_numpy( mesh.faces))
return self
[docs]
def set_vertex_scalars(self, scalars, name="scalars"):
"""Set vertex scalars on mesh.
Parameters
----------
scalars : array-like
Value at each vertex.
name : str
Scalar field name.
"""
ps.get_surface_mesh(self._name).add_scalar_quantity(
name,
scalars,
defined_on="vertices",
cmap=self.colormap,
enabled=True,
)
return self
[docs]
def highlight_vertices(self, coords, color=(1.0, 0.0, 0.0), size=0.01,):
"""
Highlight vertices on a mesh using Polyscope by adding a point cloud.
Parameters
----------
coords : array-like, shape = [n_vertices, 3]
Coordinates of vertices to highlight.
color : tuple
Color of the highlighted vertices (e.g., (1.0, 0.0, 0.0)).
radius : float
Radius of the rendered points (visual size).
"""
name = 'Highlighted_points'
self._plotter.register_point_cloud(name, coords, radius = size, color = color)
return self
[docs]
def show(self):
"""Display plot."""
self._plotter.show()