A connectivity class for triangle mesh geometry and their attributes. More...
#include <itriangle_connectivity.h>
Public Member Functions | |
Methods related to the mapping represented by the connectivity | |
virtual Uint32 | triangles_size () const =0 |
Returns the number of triangles. More... | |
virtual Sint32 | set_triangle_indices (Triangle_handle_struct t, const Uint32 *indices, Size n=1)=0 |
Sets the vertex indices of a triangle (or a range of triangles). More... | |
virtual Sint32 | set_triangle_indices (Triangle_handle_struct t, Uint32 v0, Uint32 v1, Uint32 v2)=0 |
Sets the vertex indices of a triangle. More... | |
virtual Sint32 | set_triangle_indices (Triangle_handle_struct t, const Triangle_point_indices_struct &triangle)=0 |
Sets the vertex indices of a triangle. More... | |
virtual Uint32 | get_triangle_index (Triangle_handle_struct t, Uint32 vertex) const =0 |
Returns the index at the vertex vertex of triangle t . More... | |
virtual Triangle_point_indices_struct | triangle_point_indices (Triangle_handle_struct t) const =0 |
Returns the indices for all three vertices of triangle t . More... | |
virtual bool | is_valid_connectivity () const =0 |
Indicates whether this connectivity is valid. More... | |
Methods related to the attached mesh attributes | |
virtual bool | has_attribute (Mesh_attribute_name name) const =0 |
Indicates whether the connectivity has a particular mesh attribute. More... | |
virtual IAttribute_vector * | create_attribute_vector (Mesh_attribute_name name, Uint32 dim=1) const =0 |
Creates a non-per-primitive mesh attribute. More... | |
virtual const IAttribute_vector * | access_attribute_vector (Mesh_attribute_name name) const =0 |
Returns a non-per-primitive mesh attribute. More... | |
virtual IAttribute_vector * | edit_attribute_vector (Mesh_attribute_name name)=0 |
Detaches and returns a non-per-primitive mesh attribute. More... | |
virtual Sint32 | attach_attribute_vector (IAttribute_vector *attr)=0 |
Attaches a given non-per-primitive mesh attribute to the mesh. More... | |
virtual Sint32 | remove_attribute_vector (Mesh_attribute_name name)=0 |
Removes a non-per-primitive mesh attribute. More... | |
Miscellaneous methods | |
virtual Connectivity_map_type | get_map_type () const =0 |
Returns the type of the connectivity. More... | |
![]() | |
virtual Uint32 | retain () const =0 |
Increments the reference count. More... | |
virtual Uint32 | release () const =0 |
Decrements the reference count. More... | |
virtual const IInterface * | get_interface (const Uuid &interface_id) const =0 |
Acquires a const interface from another. More... | |
template<class T> | |
const T * | get_interface () const |
Acquires a const interface from another. More... | |
virtual IInterface * | get_interface (const Uuid &interface_id)=0 |
Acquires a mutable interface from another. More... | |
template<class T> | |
T * | get_interface () |
Acquires a mutable interface from another. More... | |
virtual Uuid | get_iid () const =0 |
Returns the interface ID of the most derived interface. More... | |
Additional Inherited Members | |
![]() | |
using | Self = Interface_declare< id1, ... > |
Own type. More... | |
using | IID = Uuid_t< id1, ... > |
Declares the interface ID (IID) of this interface. More... | |
![]() | |
using | IID = Uuid_t<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0> |
Declares the interface ID (IID) of this interface. More... | |
![]() | |
static bool | compare_iid (const Uuid &iid) |
Compares the interface ID iid against the interface ID of this interface and of its ancestors. More... | |
![]() | |
static bool | compare_iid (const Uuid &iid) |
Compares the interface ID iid against the interface ID of this interface. More... | |
A connectivity class for triangle mesh geometry and their attributes.
A triangle connectivity maps vertices of a triangle mesh to indices. The vertices of the triangle mesh are identified by a pair of a triangle handle and a (local) vertex index in [0,3). Connectivities may have attached attribute vectors which use the connectivity information.
The meaning of the index associated with each vertex of the mesh is as follows: If the connectivity is the mesh connectivity, then this index identifies the point that belongs to a given vertex. Otherwise, the connectivity is called custom connectivity, and the index identifies an entry in an attribute vector that is associated with the given vertex. Note that attribute vectors can also be attached to the mesh connectivity (in which case an entry in the attribute vector is associated with the point mapped to the given vertex).
Attributes that have the same topological layout as the geometry typically use the mesh connectivity, e.g., normals for every point in the mesh. It is also possible to use an attribute connectivity with the same mapping as the mesh connectivity, however, using the mesh connectivity is more efficient. The use of a separate custom connectivity is necessary if the topological layout of the attribute is different from the geometry, e.g., for texture spaces with seams. Custom connectivities can also be useful to reduce the size of the attribute vector by sharing the same attribute value, e.g., for sharing the same normal between many points because of flat regions in the mesh.
Since the number of triangles is dictated by the mesh that the connectivity is associated with, it can only be changed by corresponding calls to the mi::neuraylib::ITriangle_mesh instance. It is possible to add points and triangles and to set the indices of the connectivities in alternating order, if so desired. The only constraint is that the largest connectivity index is smaller than the number of points (for the mesh connectivity) and smaller than the sizes of the attached attribute vectors (for all connectivities).
To create mesh attributes with the same connectivity, you can use a single connectivity and attach all these attributes to the same connectivity. However, when the mesh is retrieved from the DB no guarantee is given whether the attributes still share the connectivity or not.
|
pure virtual |
Returns a non-per-primitive mesh attribute.
name | The name of the attribute, see Mesh_attribute_name. The attribute must not be a per-primitive attribute. |
nullptr
in case of failure.
|
pure virtual |
Attaches a given non-per-primitive mesh attribute to the mesh.
The attribute vector must not be used any longer after it has been attached.
nullptr
).
|
pure virtual |
Creates a non-per-primitive mesh attribute.
The attribute is not yet attached to the connectivity. It needs to be attached before it is released.
name | The name of the attribute, see Mesh_attribute_name. The attribute must not be a per-primitive attribute. |
dim | Dimension of an attribute value. Only used for those attributes that have user specifiable dimensions. |
nullptr
in case of failure.
|
pure virtual |
Detaches and returns a non-per-primitive mesh attribute.
The attribute needs to be reattached before it is released. Otherwise, the attribute is effectively removed from the connectivity.
name | The name of the attribute, see Mesh_attribute_name. The attribute must not be a per-primitive attribute. |
nullptr
in case of failure.
|
pure virtual |
Returns the type of the connectivity.
Currently, only one type is supported.
|
pure virtual |
Returns the index at the vertex vertex
of triangle t
.
t
is out of bounds, or vertex
is not in the range [0,3).
|
pure virtual |
Indicates whether the connectivity has a particular mesh attribute.
name | The name of the attribute to query, see Mesh_attribute_name. |
true
if the connectivity has this attribute, false
otherwise.
|
pure virtual |
Indicates whether this connectivity is valid.
A connectivity becomes invalid after it has been (re)attached to the corresponding mesh and may no longer been used.
|
pure virtual |
Removes a non-per-primitive mesh attribute.
name | The name of the attribute, see Mesh_attribute_name. The attribute must not be a per-primitive attribute. |
|
pure virtual |
Sets the vertex indices of a triangle.
t | The triangle to modify. |
triangle | The new indices for triangle t . |
t
is out of bounds.
|
pure virtual |
Sets the vertex indices of a triangle (or a range of triangles).
t | The triangle to modify. |
indices | The new indices for triangle t . |
n | The number of triangles to modify. |
nullptr
).t
is out of bounds.n
is too large, i.e., t+n-1
is out of bounds.
|
pure virtual |
Sets the vertex indices of a triangle.
t | The triangle to modify. |
v0 | The first new index of triangle t . |
v1 | The second new index of triangle t . |
v2 | The third new index of triangle t . |
t
is out of bounds.
|
pure virtual |
Returns the indices for all three vertices of triangle t
.
t
is out of bounds.
|
pure virtual |
Returns the number of triangles.