Entity Numbers#

The EntityNumbers renderer displays numeric labels at mesh entity positions. Supported entity types: vertices, edges, facets, surface_elements, volume_elements.

Positions are derived on the GPU from the mesh data buffer. For edges and facets, a small connectivity buffer is uploaded on demand.

Vertex Numbers#

[1]:
from ngsolve import *
from ngsolve_webgpu import *
from webgpu.jupyter import Draw

mesh = Mesh(unit_square.GenerateMesh(maxh=0.3))
meshdata = MeshData(mesh)
wireframe = MeshWireframe2d(meshdata)
numbers = EntityNumbers(meshdata, entity="vertices", font_size=15)
scene = Draw([wireframe, numbers])

Edge Numbers#

Edge numbers are displayed at the midpoint of each edge.

[2]:
from ngsolve import *
from ngsolve_webgpu import *
from webgpu.jupyter import Draw

mesh = Mesh(unit_square.GenerateMesh(maxh=0.3))
meshdata = MeshData(mesh)
wireframe = MeshWireframe2d(meshdata)
numbers = EntityNumbers(meshdata, entity="edges", font_size=12)
scene = Draw([wireframe, numbers])

Surface Element Numbers#

Numbers are placed at the centroid of each surface element (triangle/quad).

[3]:
from ngsolve import *
from ngsolve_webgpu import *
from webgpu.jupyter import Draw

mesh = Mesh(unit_square.GenerateMesh(maxh=0.3))
meshdata = MeshData(mesh)
surface = MeshElements2d(meshdata)
wireframe = MeshWireframe2d(meshdata)
numbers = EntityNumbers(meshdata, entity="surface_elements", font_size=12)
scene = Draw([surface, wireframe, numbers])

Facet Numbers#

Facets are the topological faces of elements. In 2D, facets coincide with edges. In 3D, facets are the triangular/quad faces shared between volume elements.

[4]:
from ngsolve import *
from ngsolve_webgpu import *
from webgpu.jupyter import Draw

mesh = Mesh(unit_cube.GenerateMesh(maxh=0.5))
meshdata = MeshData(mesh)
clipping = Clipping()
clipping.mode = clipping.Mode.PLANE
clipping.center = [0.5, 0.5, 0.5]
surface = MeshElements2d(meshdata, clipping=clipping)
wireframe = MeshWireframe2d(meshdata, clipping=clipping)
numbers = EntityNumbers(meshdata, entity="facets", font_size=10, clipping=clipping)
scene = Draw([surface, wireframe, numbers])

Volume Element Numbers#

For 3D meshes, volume element numbers are placed at element centroids. Use clipping to see interior elements.

[5]:
from ngsolve import *
from ngsolve_webgpu import *
from webgpu.jupyter import Draw

mesh = Mesh(unit_cube.GenerateMesh(maxh=0.5))
meshdata = MeshData(mesh)
clipping = Clipping()
clipping.mode = clipping.Mode.PLANE
clipping.center = [0.5, 0.5, 0.5]
vol = MeshElements3d(meshdata, clipping=clipping)
vol.shrink = 0.1
numbers = EntityNumbers(meshdata, entity="volume_elements", font_size=12, clipping=clipping)
scene = Draw([vol, numbers])

Combining Multiple Entity Types#

Multiple EntityNumbers renderers can be combined to show different numberings simultaneously.

[6]:
from ngsolve import *
from ngsolve_webgpu import *
from webgpu.jupyter import Draw

mesh = Mesh(unit_square.GenerateMesh(maxh=0.5))
meshdata = MeshData(mesh)
wireframe = MeshWireframe2d(meshdata)
vertex_nums = EntityNumbers(meshdata, entity="vertices", font_size=18)
edge_nums = EntityNumbers(meshdata, entity="edges", font_size=12)
scene = Draw([wireframe, vertex_nums, edge_nums])
[ ]: