3DCoat  3D-COAT 4.9.xx
3DCoat is the one application that has all the tools you need to take your 3D idea from a block of digital clay all the way to a production ready, fully textured organic or hard surface model.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
OpenSubdiv::v3_4_3::Far::TopologyLevel Class Reference

An interface for accessing data in a specific level of a refined topology hierarchy. More...

#include <topologyLevel.h>

Public Member Functions

Methods to inspect the overall inventory of components:

All three main component types are indexed locally within each level. For some topological relationships – notably face-vertices, which is often the only relationship of interest – the total number of entries is also made available.

int GetNumVertices () const
 Return the number of vertices in this level. More...
 
int GetNumFaces () const
 Return the number of faces in this level. More...
 
int GetNumEdges () const
 Return the number of edges in this level. More...
 
int GetNumFaceVertices () const
 Return the total number of face-vertices, i.e. the sum of all vertices for all faces. More...
 
Methods to inspect topological relationships for individual components:

With three main component types (vertices, faces and edges), for each of the three components the TopologyLevel stores the incident/adjacent components of the other two types. So there are six relationships available for immediate inspection. All are accessed by methods that return an array of fixed size containing the indices of the incident components.

For some of the relations, i.e. those for which the incident components are of higher order or 'contain' the component itself (e.g. a vertex has incident faces that contain it), an additional 'local index' is available that identifies the component within each of its neighbors. For example, if vertex V is the k'th vertex in some face F, then when F occurs in the set of incident vertices of V, the local index corresponding to F will be k. The ordering of local indices matches the ordering of the incident component to which it corresponds.

ConstIndexArray GetFaceVertices (Index f) const
 Access the vertices incident a given face. More...
 
ConstIndexArray GetFaceEdges (Index f) const
 Access the edges incident a given face. More...
 
ConstIndexArray GetEdgeVertices (Index e) const
 Access the vertices incident a given edge. More...
 
ConstIndexArray GetEdgeFaces (Index e) const
 Access the faces incident a given edge. More...
 
ConstIndexArray GetVertexFaces (Index v) const
 Access the faces incident a given vertex. More...
 
ConstIndexArray GetVertexEdges (Index v) const
 Access the edges incident a given vertex. More...
 
ConstLocalIndexArray GetVertexFaceLocalIndices (Index v) const
 Access the local indices of a vertex with respect to its incident faces. More...
 
ConstLocalIndexArray GetVertexEdgeLocalIndices (Index v) const
 Access the local indices of a vertex with respect to its incident edges. More...
 
ConstLocalIndexArray GetEdgeFaceLocalIndices (Index e) const
 Access the local indices of an edge with respect to its incident faces. More...
 
Index FindEdge (Index v0, Index v1) const
 Identify the edge matching the given vertex pair. More...
 
Methods to inspect other topological properties of individual components:
bool IsEdgeNonManifold (Index e) const
 Return if the edge is non-manifold. More...
 
bool IsVertexNonManifold (Index v) const
 Return if the vertex is non-manifold. More...
 
bool IsEdgeBoundary (Index e) const
 Return if the edge is a boundary. More...
 
bool IsVertexBoundary (Index v) const
 Return if the vertex is a boundary. More...
 
Methods to inspect feature tags for individual components:

While only a subset of components may have been tagged with features such as sharpness, all such features have a default value and so all components can be inspected.

float GetEdgeSharpness (Index e) const
 Return the sharpness assigned a given edge. More...
 
float GetVertexSharpness (Index v) const
 Return the sharpness assigned a given vertex. More...
 
bool IsFaceHole (Index f) const
 Return if a given face has been tagged as a hole. More...
 
Sdc::Crease::Rule GetVertexRule (Index v) const
 Return the subdivision rule assigned a given vertex specific to this level. More...
 
Methods to inspect face-varying data:

Face-varying data is organized into topologically independent channels, each with an integer identifier. Access to face-varying data generally requires the specification of a channel, though with a single channel being a common situation the first/only channel will be assumed if unspecified.

A face-varying channel is composed of a set of values that may be shared by faces meeting at a common vertex. Just as there are sets of vertices that are associated with faces by index (ranging from 0 to num-vertices - 1), face-varying values are also referenced by index (ranging from 0 to num-values -1).

The face-varying values associated with a face are accessed similarly to the way in which vertices associated with the face are accessed – an array of fixed size containing the indices for each corner is provided for inspection, iteration, etc.

When the face-varying topology around a vertex "matches", it has the same limit properties and so results in the same limit surface when collections of adjacent vertices match. Like other references to "topology", this includes consideration of sharpness. So it may be that face-varying values are assigned around a vertex on a boundary in a way that appears to match, but the face-varying interpolation option requires sharpening of that vertex in face-varying space – the difference in the topology of the resulting limit surfaces leading to the query returning false for the match. The edge case is simpler in that it only considers continuity across the edge, not the entire neighborhood around each end vertex.

int GetNumFVarChannels () const
 Return the number of face-varying channels (should be same for all levels) More...
 
int GetNumFVarValues (int channel=0) const
 Return the total number of face-varying values in a particular channel (the upper bound of a face-varying value index) More...
 
ConstIndexArray GetFaceFVarValues (Index f, int channel=0) const
 Access the face-varying values associated with a particular face. More...
 
bool DoesVertexFVarTopologyMatch (Index v, int channel=0) const
 Return if face-varying topology around a vertex matches. More...
 
bool DoesEdgeFVarTopologyMatch (Index e, int channel=0) const
 Return if face-varying topology across the edge only matches. More...
 
bool DoesFaceFVarTopologyMatch (Index f, int channel=0) const
 Return if face-varying topology around a face matches. More...
 
Methods to identify parent or child components in adjoining levels of refinement:
ConstIndexArray GetFaceChildFaces (Index f) const
 Access the child faces (in the next level) of a given face. More...
 
ConstIndexArray GetFaceChildEdges (Index f) const
 Access the child edges (in the next level) of a given face. More...
 
ConstIndexArray GetEdgeChildEdges (Index e) const
 Access the child edges (in the next level) of a given edge. More...
 
Index GetFaceChildVertex (Index f) const
 Return the child vertex (in the next level) of a given face. More...
 
Index GetEdgeChildVertex (Index e) const
 Return the child vertex (in the next level) of a given edge. More...
 
Index GetVertexChildVertex (Index v) const
 Return the child vertex (in the next level) of a given vertex. More...
 
Index GetFaceParentFace (Index f) const
 Return the parent face (in the previous level) of a given face. More...
 
Debugging aides:
bool ValidateTopology () const
 
void PrintTopology (bool children=true) const
 

Detailed Description

An interface for accessing data in a specific level of a refined topology hierarchy.

TopologyLevel provides an interface to data in a specific level of a topology hierarchy. Instances of TopologyLevel are created and owned by a TopologyRefiner, which will return const-references to them. Such references are only valid during the lifetime of the TopologyRefiner that created and returned them, and only for a given refinement, i.e. if the TopologyRefiner is re-refined, any references to TopoologyLevels are invalidated.

Member Function Documentation

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::DoesEdgeFVarTopologyMatch ( Index  e,
int  channel = 0 
) const
inline

Return if face-varying topology across the edge only matches.

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::DoesFaceFVarTopologyMatch ( Index  f,
int  channel = 0 
) const
inline

Return if face-varying topology around a face matches.

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::DoesVertexFVarTopologyMatch ( Index  v,
int  channel = 0 
) const
inline

Return if face-varying topology around a vertex matches.

Index OpenSubdiv::v3_4_3::Far::TopologyLevel::FindEdge ( Index  v0,
Index  v1 
) const
inline

Identify the edge matching the given vertex pair.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetEdgeChildEdges ( Index  e) const
inline

Access the child edges (in the next level) of a given edge.

Index OpenSubdiv::v3_4_3::Far::TopologyLevel::GetEdgeChildVertex ( Index  e) const
inline

Return the child vertex (in the next level) of a given edge.

ConstLocalIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetEdgeFaceLocalIndices ( Index  e) const
inline

Access the local indices of an edge with respect to its incident faces.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetEdgeFaces ( Index  e) const
inline

Access the faces incident a given edge.

float OpenSubdiv::v3_4_3::Far::TopologyLevel::GetEdgeSharpness ( Index  e) const
inline

Return the sharpness assigned a given edge.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetEdgeVertices ( Index  e) const
inline

Access the vertices incident a given edge.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetFaceChildEdges ( Index  f) const
inline

Access the child edges (in the next level) of a given face.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetFaceChildFaces ( Index  f) const
inline

Access the child faces (in the next level) of a given face.

Index OpenSubdiv::v3_4_3::Far::TopologyLevel::GetFaceChildVertex ( Index  f) const
inline

Return the child vertex (in the next level) of a given face.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetFaceEdges ( Index  f) const
inline

Access the edges incident a given face.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetFaceFVarValues ( Index  f,
int  channel = 0 
) const
inline

Access the face-varying values associated with a particular face.

Index OpenSubdiv::v3_4_3::Far::TopologyLevel::GetFaceParentFace ( Index  f) const
inline

Return the parent face (in the previous level) of a given face.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetFaceVertices ( Index  f) const
inline

Access the vertices incident a given face.

int OpenSubdiv::v3_4_3::Far::TopologyLevel::GetNumEdges ( ) const
inline

Return the number of edges in this level.

int OpenSubdiv::v3_4_3::Far::TopologyLevel::GetNumFaces ( ) const
inline

Return the number of faces in this level.

int OpenSubdiv::v3_4_3::Far::TopologyLevel::GetNumFaceVertices ( ) const
inline

Return the total number of face-vertices, i.e. the sum of all vertices for all faces.

int OpenSubdiv::v3_4_3::Far::TopologyLevel::GetNumFVarChannels ( ) const
inline

Return the number of face-varying channels (should be same for all levels)

int OpenSubdiv::v3_4_3::Far::TopologyLevel::GetNumFVarValues ( int  channel = 0) const
inline

Return the total number of face-varying values in a particular channel (the upper bound of a face-varying value index)

Referenced by OpenSubdiv::v3_4_3::Far::StencilTableFactoryReal< REAL >::Create(), and OpenSubdiv::v3_4_3::Far::LimitStencilTableFactoryReal< REAL >::Create().

int OpenSubdiv::v3_4_3::Far::TopologyLevel::GetNumVertices ( ) const
inline
Index OpenSubdiv::v3_4_3::Far::TopologyLevel::GetVertexChildVertex ( Index  v) const
inline

Return the child vertex (in the next level) of a given vertex.

ConstLocalIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetVertexEdgeLocalIndices ( Index  v) const
inline

Access the local indices of a vertex with respect to its incident edges.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetVertexEdges ( Index  v) const
inline

Access the edges incident a given vertex.

ConstLocalIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetVertexFaceLocalIndices ( Index  v) const
inline

Access the local indices of a vertex with respect to its incident faces.

ConstIndexArray OpenSubdiv::v3_4_3::Far::TopologyLevel::GetVertexFaces ( Index  v) const
inline

Access the faces incident a given vertex.

Sdc::Crease::Rule OpenSubdiv::v3_4_3::Far::TopologyLevel::GetVertexRule ( Index  v) const
inline

Return the subdivision rule assigned a given vertex specific to this level.

float OpenSubdiv::v3_4_3::Far::TopologyLevel::GetVertexSharpness ( Index  v) const
inline

Return the sharpness assigned a given vertex.

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::IsEdgeBoundary ( Index  e) const
inline

Return if the edge is a boundary.

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::IsEdgeNonManifold ( Index  e) const
inline

Return if the edge is non-manifold.

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::IsFaceHole ( Index  f) const
inline

Return if a given face has been tagged as a hole.

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::IsVertexBoundary ( Index  v) const
inline

Return if the vertex is a boundary.

bool OpenSubdiv::v3_4_3::Far::TopologyLevel::IsVertexNonManifold ( Index  v) const
inline

Return if the vertex is non-manifold.


The documentation for this class was generated from the following file: