Skip to content

Instantly share code, notes, and snippets.

@GuillaumeFavelier
Last active May 17, 2021 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GuillaumeFavelier/72fff939a521de8a31789db1980e517c to your computer and use it in GitHub Desktop.
Save GuillaumeFavelier/72fff939a521de8a31789db1980e517c to your computer and use it in GitHub Desktop.
PyVista demo of rasterization
import numpy as np
import pyvista as pv
from matplotlib.colors import ListedColormap
def add_vertex(plotter, point):
vertex = pv.Sphere(center=point)
plotter.add_mesh(
mesh=vertex,
color='white',
specular=1.0,
smooth_shading=True,
show_scalar_bar=False,
)
def add_edge(plotter, point_a, point_b, show_vertex=True):
edge = pv.Line(pointa=point_a, pointb=point_b)
edge = edge.tube(radius=0.3)
plotter.add_mesh(
mesh=edge,
color='white',
specular=1.0,
smooth_shading=True,
show_scalar_bar=False,
)
if show_vertex:
add_vertex(plotter, point_a)
add_vertex(plotter, point_b)
def add_triangle(plotter, point_a, point_b, point_c, show_vertex=True):
add_edge(plotter, point_a, point_b, show_vertex=False)
add_edge(plotter, point_a, point_c, show_vertex=False)
add_edge(plotter, point_b, point_c, show_vertex=False)
vertices = np.array([point_a, point_b, point_c])
faces = np.hstack([[3, 0, 1, 2]])
surf = pv.PolyData(vertices, faces)
plotter.add_mesh(
mesh=surf,
color='white',
specular=1.0,
smooth_shading=True,
show_scalar_bar=False,
)
if show_vertex:
add_vertex(plotter, point_a)
add_vertex(plotter, point_b)
add_vertex(plotter, point_c)
def new_plotter():
plotter = pv.Plotter(
point_smoothing=True,
polygon_smoothing=True,
)
plotter.enable_anti_aliasing()
plotter.set_background('white')
plotter.enable_parallel_projection()
plotter.view_xy()
plotter.camera_position = [
(4.152619223710567, 4.788850261289111, 1.0),
(4.152619223710567, 4.788850261289111, 0.0),
(0.0, 1.0, 0.0)
]
return plotter
# raw data
plotter = new_plotter()
zpos = -1
vertex = (2.5, 2.5, zpos)
edge = [
(5, 0, zpos),
(10, 5, zpos),
]
triangle = [
(0, 5, zpos),
(5, 5, zpos),
(2.5, 10, zpos),
]
add_vertex(plotter, vertex)
add_edge(plotter, edge[0], edge[1])
add_triangle(plotter, triangle[0], triangle[1], triangle[2])
plotter.show()
# rasterized
plotter = new_plotter()
cmap = [
(0, 0, 0, 0),
(255, 255, 255, 255),
]
ctable = np.round(cmap).astype(np.uint8)
ctable = ListedColormap(ctable / 255.)
grid = pv.UniformGrid()
grid.dimensions = (11, 11, 1)
grid.origin = (0, 0, 0)
grid.spacing = (1, 1, 1)
ncells = grid.number_of_cells
scalars = np.array([0] * ncells)
# vertex
scalars[22] = 1
# edge
for i in range(5):
scalars[5 + i*10 + i] = 1
# triangle
for i in range(5):
scalars[50 + i] = 1
for i in range(5):
scalars[60 + i] = 1
scalars[71] = 1
scalars[72] = 1
scalars[73] = 1
scalars[81] = 1
scalars[82] = 1
scalars[83] = 1
scalars[92] = 1
grid.cell_arrays["data"] = scalars
plotter.add_mesh(
mesh=grid,
scalars="data",
cmap=ctable,
show_scalar_bar=False,
)
# grid
edges = grid.extract_all_edges()
plotter.add_mesh(edges, color='black', line_width=4)
plotter.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment