2.3.3.3.57. NXcg_face_list_data_structure

Status:

base class, extends NXcg_primitive_set

Description:

Computational geometry of primitives via a face-and-edge-list data structure. ...

Computational geometry of primitives via a face-and-edge-list data structure.

Primitives must neither be degenerated nor self-intersect but can differ in their properties. A face-and-edge-list-based description of primitives is frequently used for triangles and polyhedra to store them on disk for visualization purposes (see OFF, PLY, VTK, or STL file formats).

Although this description is storage efficient it is not well suited for topological analyses though. In this case, scientists may need a different view on the primitives which is better represented with e.g. a half_edge_data_structure.

Having an own base class for the data structure how primitives are stored is useful to embrace both users with small or very detailed specification demands.

Symbols:

The symbols used in the schema to specify e.g. dimensions of arrays.

d: The dimensionality, which has to be at least 2.

n_v: The number of vertices.

n_e: The number of edges.

n_f: The number of faces.

n_total: The total number of vertices of all faces. Faces are polygons.

n_weinberg: The total number of Weinberg vector values of all faces.

Groups cited:

none

Structure:

number_of_vertices: (optional) NX_INT (Rank: 1, Dimensions: [n_f]) {units=NX_UNITLESS}

Number of vertices for each face. ...

Number of vertices for each face.

Each entry represents the total number of vertices for that face, irrespectively whether vertices are shared among faces or not.

number_of_edges: (optional) NX_INT (Rank: 1, Dimensions: [n_e]) {units=NX_UNITLESS}

Number of edges for each face. ...

Number of edges for each face.

Each entry represents the total number of edges for that face, irrespectively whether edges are shared across faces or not.

number_of_faces: (optional) NX_INT {units=NX_UNITLESS}

Number of faces of the primitives.

vertex_identifier_offset: (optional) NX_INT {units=NX_UNITLESS}

Integer offset whereby the identifier of the first member ...

Integer offset whereby the identifier of the first member of the vertices differs from zero.

Identifier can be defined explicitly or implicitly. Inspect the definition of NXcg_primitive_set for further details.

edge_identifier_offset: (optional) NX_INT {units=NX_UNITLESS}

Integer offset whereby the identifier of the first member ...

Integer offset whereby the identifier of the first member of the edges differs from zero.

Identifier can be defined explicitly or implicitly. Inspect the definition of NXcg_primitive_set for further details.

face_identifier_offset: (optional) NX_INT {units=NX_UNITLESS}

Integer offset whereby the identifier of the first member ...

Integer offset whereby the identifier of the first member of the faces differs from zero.

Identifier can be defined explicitly or implicitly. Inspect the definition of NXcg_primitive_set for further details.

vertex_identifier: (optional) NX_INT (Rank: 1, Dimensions: [n_v]) {units=NX_UNITLESS}

Integer identifier to distinguish all vertices explicitly.

edge_identifier: (optional) NX_INT (Rank: 1, Dimensions: [n_e]) {units=NX_UNITLESS}

Integer used to distinguish all edges explicitly.

face_identifier: (optional) NX_INT (Rank: 1, Dimensions: [n_f]) {units=NX_UNITLESS}

Integer used to distinguish all faces explicitly.

vertices: (optional) NX_NUMBER (Rank: 2, Dimensions: [n_v, d]) {units=NX_ANY}

Positions of the vertices. ...

Positions of the vertices.

Users are encouraged to reduce the vertices to a unique set as this may result in a more efficient storage of the geometry data. It is also possible though to store the vertex positions naively in which case vertices_are_unique is likely False. Naively here means that each vertex is stored even though many share the same positions.

edges: (optional) NX_INT (Rank: 2, Dimensions: [n_e, 2]) {units=NX_UNITLESS}

The edges are stored as pairs of vertex identifier.

faces: (optional) NX_INT (Rank: 1, Dimensions: [n_total]) {units=NX_UNITLESS}

The faces are stored as a concatenated array of vertex identifier tuples. ...

The faces are stored as a concatenated array of vertex identifier tuples.

The first entry is the identifier of the start vertex of the first face, followed by the second vertex of the first face, until the last vertex of the first face. Thereafter, the start vertex of the second face, the second vertex of the second face, and so on and so forth.

Therefore, summating over the number_of_vertices, allows to extract the vertex identifiers for the i-th face on the following index interval of the faces array: \([\sum_{i = 0}^{i = n-1}, \sum_{i=0}^{i = n}]\).

vertices_are_unique: (optional) NX_BOOLEAN

If true, indicates that the vertices are all placed at different positions ...

If true, indicates that the vertices are all placed at different positions and have different identifiers, i.e. no points overlap or are counted more than once.

edges_are_unique: (optional) NX_BOOLEAN

If true, indicates that no edge is stored more than once. ...

If true, indicates that no edge is stored more than once.

Users are encouraged to consider using a half_edge_data_structure instead.

faces_are_unique: (optional) NX_BOOLEAN

If true, indicates that no face is stored more than once.

winding_order: (optional) NX_INT (Rank: 1, Dimensions: [n_f]) {units=NX_UNITLESS}

Specifies for each face which winding order was used if any: ...

Specifies for each face which winding order was used if any:

  • 0 - undefined

  • 1 - counter-clockwise (CCW)

  • 2 - clock-wise (CW)

Hypertext Anchors

List of hypertext anchors for all groups, fields, attributes, and links defined in this class.

NXDL Source:

https://github.com/FAIRmat-NFDI/nexus_definitions/tree/fairmat/contributed_definitions/NXcg_face_list_data_structure.nxdl.xml