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])
[ ]: