# Mesh Data Structure¶

class pymesh.Mesh(raw_mesh)

A generic representation of a surface or volume mesh.

vertices

A $$(N_v \times D)$$ array of vertex coordinates, where $$N_v$$ is the number of vertices, $$D$$ is the dimention of the embedding space ($$D$$ must be either 2 or 3).

faces

A $$(N_f \times F_d)$$ array of vertex indices that represents a generalized array of faces, where $$N_f$$ is the number of faces, $$F_d$$ is the number of vertex per face. Only triangles ($$F_d=3$$) and quad ($$F_d=4$$) faces are supported.

voxels

A $$(N_V \times V_d)$$ array of vertex indices that represents an array of generalized voxels, where $$N_V$$ is the number of voxels, $$V_d$$ is the number of vertex per voxel. Only tetrahedron ($$V_d=4$$) and hexahedron ($$V_d=8$$) are supported for now.

num_vertices

Number of vertices ($$N_v$$).

num_faces

Number of faces ($$N_f$$).

num_voxels

Number of voxels ($$N_V$$).

dim

Dimention of the embedding space ($$D$$).

vertex_per_face

Number of vertices in each face ($$F_d$$).

vertex_per_voxel

Number of vertices in each voxel ($$V_d$$).

attribute_names

Names of all attribute associated with this mesh.

bbox

A $$(2 \times D)$$ array where the first row is the minimum values of each vertex coordinates, and the second row is the maximum values.

nodes

Same as vertices.

elements

Array of elements of the mesh. Same as faces for surface mesh, or voxels for volume mesh.

num_nodes

Number of nodes.

num_elements

Number of elements.

nodes_per_element

Number of nodes in each element.

element_volumes

An array representing volumes of each element.

num_components

Number of vertex-connected_components.

num_surface_components

Number of edge-connected components.

num_volume_components

Number of face-connected components.

add_attribute(name)

Add an attribute to mesh.

has_attribute(name)

Check if an attribute exists.

get_attribute(name)

Return attribute values in a flattened array.

get_vertex_attribute(name)

Same as get_attribute() but reshaped to have num_vertices rows.

get_face_attribute(name)

Same as get_attribute() but reshaped to have num_faces rows.

get_voxel_attribute(name)

Same as get_attribute() but reshaped to have num_voxels rows.

set_attribute(name, val)

Set attribute to the given value.

remove_attribute(name)

Remove attribute from mesh.

get_attribute_names()

Get names of all attributes associated with this mesh.

is_manifold()

Return true iff this mesh is both vertex-manifold and edge-manifold.

is_vertex_manifold()

Return true iff this mesh is vertex-manifold.

A mesh is vertex-manifold if the 1-ring neighborhood of each vertex is a topological disk.

is_edge_manifold()

Return true iff this mesh is edge-manifold.

A mesh is edge-manifold if there are exactly 2 incident faces for all non-border edges. Border edges, by definition, only have 1 incident face.

is_closed()

Return true iff this mesh is closed.

A closed mesh constains no border. I.e. all edges have at least 2 incident faces.

is_oriented()

Return true iff the mesh is consistently oriented.

That is all non-bonary edges must represent locally 2-manifold or intersection of 2-manifold surfaces.