OpenSubdiv

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 facevertices, 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.  
int  GetNumFaces () const 
Return the number of faces in this level.  
int  GetNumEdges () const 
Return the number of edges in this level.  
int  GetNumFaceVertices () const 
Return the total number of facevertices, i.e. the sum of all vertices for all faces.  
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.  
ConstIndexArray  GetFaceEdges (Index f) const 
Access the edges incident a given face.  
ConstIndexArray  GetEdgeVertices (Index e) const 
Access the vertices incident a given edge.  
ConstIndexArray  GetEdgeFaces (Index e) const 
Access the faces incident a given edge.  
ConstIndexArray  GetVertexFaces (Index v) const 
Access the faces incident a given vertex.  
ConstIndexArray  GetVertexEdges (Index v) const 
Access the edges incident a given vertex.  
ConstLocalIndexArray  GetVertexFaceLocalIndices (Index v) const 
Access the local indices of a vertex with respect to its incident faces.  
ConstLocalIndexArray  GetVertexEdgeLocalIndices (Index v) const 
Access the local indices of a vertex with respect to its incident edges.  
ConstLocalIndexArray  GetEdgeFaceLocalIndices (Index e) const 
Access the local indices of an edge with respect to its incident faces.  
Index  FindEdge (Index v0, Index v1) const 
Identify the edge matching the given vertex pair.  
Methods to inspect other topological properties of individual components:  
bool  IsEdgeNonManifold (Index e) const 
Return if the edge is nonmanifold.  
bool  IsVertexNonManifold (Index v) const 
Return if the vertex is nonmanifold.  
bool  IsEdgeBoundary (Index e) const 
Return if the edge is a boundary (only one incident face)  
bool  IsVertexBoundary (Index v) const 
Return if the vertex is on a boundary (at least one incident boundary edge)  
bool  IsVertexCorner (Index v) const 
Return if the vertex is a corner (only one incident face)  
bool  IsVertexValenceRegular (Index v) const 
Return if the valence of the vertex is regular (must be manifold)  
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.  
float  GetVertexSharpness (Index v) const 
Return the sharpness assigned a given vertex.  
bool  IsEdgeInfSharp (Index e) const 
Return if the edge is infinitelysharp.  
bool  IsVertexInfSharp (Index v) const 
Return if the vertex is infinitelysharp.  
bool  IsEdgeSemiSharp (Index e) const 
Return if the edge is semisharp.  
bool  IsVertexSemiSharp (Index v) const 
Return if the vertex is semisharp.  
bool  IsFaceHole (Index f) const 
Return if a given face has been tagged as a hole.  
Sdc::Crease::Rule  GetVertexRule (Index v) const 
Return the subdivision rule assigned a given vertex specific to this level.  
Methods to inspect facevarying data:  
Facevarying data is organized into topologically independent channels, each with an integer identifier. Access to facevarying 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 facevarying 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 numvertices  1), facevarying values are also referenced by index (ranging from 0 to numvalues 1). The facevarying 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 facevarying 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 facevarying values are assigned around a vertex on a boundary in a way that appears to match, but the facevarying interpolation option requires sharpening of that vertex in facevarying 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 facevarying channels (should be same for all levels)  
int  GetNumFVarValues (int channel=0) const 
Return the total number of facevarying values in a particular channel (the upper bound of a facevarying value index)  
ConstIndexArray  GetFaceFVarValues (Index f, int channel=0) const 
Access the facevarying values associated with a particular face.  
bool  DoesVertexFVarTopologyMatch (Index v, int channel=0) const 
Return if facevarying topology around a vertex matches.  
bool  DoesEdgeFVarTopologyMatch (Index e, int channel=0) const 
Return if facevarying topology across the edge only matches.  
bool  DoesFaceFVarTopologyMatch (Index f, int channel=0) const 
Return if facevarying topology around a face matches.  
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.  
ConstIndexArray  GetFaceChildEdges (Index f) const 
Access the child edges (in the next level) of a given face.  
ConstIndexArray  GetEdgeChildEdges (Index e) const 
Access the child edges (in the next level) of a given edge.  
Index  GetFaceChildVertex (Index f) const 
Return the child vertex (in the next level) of a given face.  
Index  GetEdgeChildVertex (Index e) const 
Return the child vertex (in the next level) of a given edge.  
Index  GetVertexChildVertex (Index v) const 
Return the child vertex (in the next level) of a given vertex.  
Index  GetFaceParentFace (Index f) const 
Return the parent face (in the previous level) of a given face.  
Debugging aides:  
class  TopologyRefiner 
bool  ValidateTopology () const 
void  PrintTopology (bool children=true) const 
TopologyLevel ()  
~TopologyLevel ()  
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 constreferences 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 rerefined, any references to TopoologyLevels are invalidated.
Definition at line 49 of file topologyLevel.h.

inline 
Definition at line 300 of file topologyLevel.h.

inline 
Definition at line 301 of file topologyLevel.h.

inline 
Return if facevarying topology across the edge only matches.
Definition at line 247 of file topologyLevel.h.

inline 
Return if facevarying topology around a face matches.
Definition at line 252 of file topologyLevel.h.

inline 
Return if facevarying topology around a vertex matches.
Definition at line 242 of file topologyLevel.h.
Identify the edge matching the given vertex pair.
Definition at line 120 of file topologyLevel.h.

inline 
Access the child edges (in the next level) of a given edge.
Definition at line 268 of file topologyLevel.h.
Return the child vertex (in the next level) of a given edge.
Definition at line 274 of file topologyLevel.h.

inline 
Access the local indices of an edge with respect to its incident faces.
Definition at line 117 of file topologyLevel.h.

inline 
Access the faces incident a given edge.
Definition at line 102 of file topologyLevel.h.

inline 
Return the sharpness assigned a given edge.
Definition at line 173 of file topologyLevel.h.

inline 
Access the vertices incident a given edge.
Definition at line 99 of file topologyLevel.h.

inline 
Access the child edges (in the next level) of a given face.
Definition at line 265 of file topologyLevel.h.

inline 
Access the child faces (in the next level) of a given face.
Definition at line 262 of file topologyLevel.h.
Return the child vertex (in the next level) of a given face.
Definition at line 271 of file topologyLevel.h.

inline 
Access the edges incident a given face.
Definition at line 96 of file topologyLevel.h.

inline 
Access the facevarying values associated with a particular face.
Definition at line 237 of file topologyLevel.h.
Return the parent face (in the previous level) of a given face.
Definition at line 280 of file topologyLevel.h.

inline 
Access the vertices incident a given face.
Definition at line 93 of file topologyLevel.h.

inline 
Return the number of edges in this level.
Definition at line 68 of file topologyLevel.h.

inline 
Return the number of faces in this level.
Definition at line 65 of file topologyLevel.h.

inline 
Return the total number of facevertices, i.e. the sum of all vertices for all faces.
Definition at line 71 of file topologyLevel.h.

inline 
Return the number of facevarying channels (should be same for all levels)
Definition at line 230 of file topologyLevel.h.

inline 
Return the total number of facevarying values in a particular channel (the upper bound of a facevarying value index)
Definition at line 234 of file topologyLevel.h.

inline 
Return the number of vertices in this level.
Definition at line 62 of file topologyLevel.h.
Return the child vertex (in the next level) of a given vertex.
Definition at line 277 of file topologyLevel.h.

inline 
Access the local indices of a vertex with respect to its incident edges.
Definition at line 114 of file topologyLevel.h.

inline 
Access the edges incident a given vertex.
Definition at line 108 of file topologyLevel.h.

inline 
Access the local indices of a vertex with respect to its incident faces.
Definition at line 111 of file topologyLevel.h.

inline 
Access the faces incident a given vertex.
Definition at line 105 of file topologyLevel.h.

inline 
Return the subdivision rule assigned a given vertex specific to this level.
Definition at line 194 of file topologyLevel.h.

inline 
Return the sharpness assigned a given vertex.
Definition at line 176 of file topologyLevel.h.

inline 
Return if the edge is a boundary (only one incident face)
Definition at line 134 of file topologyLevel.h.

inline 
Return if the edge is infinitelysharp.
Definition at line 179 of file topologyLevel.h.

inline 
Return if the edge is nonmanifold.
Definition at line 128 of file topologyLevel.h.

inline 
Return if the edge is semisharp.
Definition at line 185 of file topologyLevel.h.

inline 
Return if a given face has been tagged as a hole.
Definition at line 191 of file topologyLevel.h.

inline 
Return if the vertex is on a boundary (at least one incident boundary edge)
Definition at line 137 of file topologyLevel.h.

inline 
Return if the vertex is a corner (only one incident face)
Definition at line 140 of file topologyLevel.h.

inline 
Return if the vertex is infinitelysharp.
Definition at line 182 of file topologyLevel.h.

inline 
Return if the vertex is nonmanifold.
Definition at line 131 of file topologyLevel.h.

inline 
Return if the vertex is semisharp.
Definition at line 188 of file topologyLevel.h.

inline 
Return if the valence of the vertex is regular (must be manifold)
Note that this test only determines if the valence of the vertex is regular with respect to the assigned subdivision scheme – not if the neighborhood around the vertex is regular. The latter depends on a number of factors including the incident faces of the vertex (they must all be regular) and the presence of sharpness at the vertex itself or its incident edges.
The regularity of the valence is a necessary but not a sufficient condition in determining the regularity of the neighborhood. For example, while the valence of an interior vertex may be regular, its neighborhood is not if the vertex was made infinitely sharp. Conversely, a corner vertex is considered regular by its valence but its neighborhood is not if the vertex was not made infinitely sharp.
Whether the valence of the vertex is regular is also a property that remains the same for the vertex in all subdivision levels. In contrast, the regularity of the region around the vertex may change as the presence of irregular faces or semisharp features is reduced by subdivision.
Definition at line 162 of file topologyLevel.h.

inline 
Definition at line 287 of file topologyLevel.h.

inline 
Definition at line 286 of file topologyLevel.h.

friend 
Definition at line 292 of file topologyLevel.h.