3.3.3.43. NXcg_face_list_data_structure

Status:

base class, extends NXobject

Description:

Computational geometry description of geometric primitives via a face and edge l ...

Computational geometry description of geometric primitives via a face and edge list.

Primitives must not be degenerated or self-intersect. Such descriptions of primitives are frequently used for triangles and polyhedra to store them on disk for visualization purposes. Although storage efficient, such a description is not well suited for topological and neighborhood queries of especially meshes that are built from primitives.

In this case, scientists may need a different view on the primitives which is better represented for instance with a half_edge_data_structure instance. The reason to split thus the geometric description of primitives, sets, and specifically meshes of primitives is to keep the structure simple enough for users without these computational geometry demands but also enable those more computational geometry savy users the storing of the additionally relevant data structure.

This is beneficial and superior over NXoff_geometry because for instance a half_edge_data_structure instance can be immediately use to reinstantiate the set without having to recompute the half_edge_structure from the vertex and face-list based representation and thus offer a more efficient route to serve applications where topological and graph-based operations are key.

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:

dimensionality: (optional) NX_POSINT {units=NX_UNITLESS}

Dimensionality.

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

Array which specifies of how many vertices each face is built. ...

Array which specifies of how many vertices each face is built. Each entry represent the total number of vertices for face, irrespectively whether vertices are shared among faces/are unique or not.

number_of_edges: (optional) NX_POSINT {units=NX_UNITLESS}

Number of edges.

number_of_faces: (optional) NX_POSINT {units=NX_UNITLESS}

Number of faces.

vertex_identifier_offset: (optional) NX_INT {units=NX_UNITLESS}

Integer which specifies the first index to be used for distinguishing ...

Integer which specifies the first index to be used for distinguishing identifiers for vertices. Identifiers are defined either implicitly or explicitly. For implicit indexing the identifiers are defined on the interval [identifier_offset, identifier_offset+c-1]. For explicit indexing the identifier array has to be defined.

The identifier_offset field can for example be used to communicate if identifiers are expected to start from 1 (referred to as Fortran-/Matlab-) or from 0 (referred to as C-, Python-style index notation) respectively.

edge_identifier_offset: (optional) NX_INT {units=NX_UNITLESS}

Integer which specifies the first index to be used for distinguishing ...

Integer which specifies the first index to be used for distinguishing identifiers for edges. Identifiers are defined either implicitly or explicitly. For implicit indexing the identifiers are defined on the interval [identifier_offset, identifier_offset+c-1]. For explicit indexing the identifier array has to be defined.

The identifier_offset field can for example be used to communicate if identifiers are expected to start from 1 (referred to as Fortran-/Matlab-) or from 0 (referred to as C-, Python-style index notation) respectively.

face_identifier_offset: (optional) NX_INT {units=NX_UNITLESS}

Integer which specifies the first index to be used for distinguishing ...

Integer which specifies the first index to be used for distinguishing identifiers for faces. Identifiers are defined either implicitly or explicitly. For implicit indexing the identifiers are defined on the interval [identifier_offset, identifier_offset+c-1]. For explicit indexing the identifier array has to be defined.

The identifier_offset field can for example be used to communicate if identifiers are expected to start from 1 (referred to as Fortran-/Matlab-) or from 0 (referred to as C-, Python-style index notation) respectively.

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

Integer used to distinguish vertices explicitly.

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

Integer used to distinguish edges explicitly.

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

Integer used to distinguish faces explicitly.

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

Positions of the vertices. ...

Positions of the vertices.

Users are encouraged to reduce the vertices to unique set of positions and vertices as this supports 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 one for example stores each vertex of a triangle mesh even though many vertices are shared between triangles and thus the positions of these vertices do not have to be duplicated.

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

The edges are stored as a pairs of vertex identifier values.

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

Array of identifiers from vertices which describe each face. ...

Array of identifiers from vertices which describe each face.

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 twice.

edges_are_unique: (optional) NX_BOOLEAN

If true indicates that no edge is stored twice. Users are encouraged to ...

If true indicates that no edge is stored twice. Users are encouraged to consider and use the half_edge_data_structure instead as this will work towards achieving a cleaner graph-based description if relevant and possible.

faces_are_unique: (optional) NX_BOOLEAN

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/nexusformat/definitions/blob/main/contributed_definitions/NXcg_face_list_data_structure.nxdl.xml