All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
topologyLevel.h
Go to the documentation of this file.
1 //
2 // Copyright 2015 DreamWorks Animation LLC.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 #ifndef OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H
25 #define OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H
26 
27 #include "../version.h"
28 
29 #include "../vtr/level.h"
30 #include "../vtr/refinement.h"
31 #include "../far/types.h"
32 
33 #include <vector>
34 
35 namespace OpenSubdiv {
36 namespace OPENSUBDIV_VERSION {
37 
38 namespace Far {
39 
50 
51 public:
53 
62  int GetNumVertices() const { return _level->getNumVertices(); }
63 
65  int GetNumFaces() const { return _level->getNumFaces(); }
66 
68  int GetNumEdges() const { return _level->getNumEdges(); }
69 
71  int GetNumFaceVertices() const { return _level->getNumFaceVerticesTotal(); }
73 
75  //
91 
93  ConstIndexArray GetFaceVertices(Index f) const { return _level->getFaceVertices(f); }
94 
96  ConstIndexArray GetFaceEdges(Index f) const { return _level->getFaceEdges(f); }
97 
99  ConstIndexArray GetEdgeVertices(Index e) const { return _level->getEdgeVertices(e); }
100 
102  ConstIndexArray GetEdgeFaces(Index e) const { return _level->getEdgeFaces(e); }
103 
105  ConstIndexArray GetVertexFaces(Index v) const { return _level->getVertexFaces(v); }
106 
108  ConstIndexArray GetVertexEdges(Index v) const { return _level->getVertexEdges(v); }
109 
112 
115 
118 
120  Index FindEdge(Index v0, Index v1) const { return _level->findEdge(v0, v1); }
122 
124 
128  bool IsEdgeNonManifold(Index e) const { return _level->isEdgeNonManifold(e); }
129 
131  bool IsVertexNonManifold(Index v) const { return _level->isVertexNonManifold(v); }
132 
134  bool IsEdgeBoundary(Index e) const { return _level->getEdgeTag(e)._boundary; }
135 
137  bool IsVertexBoundary(Index v) const { return _level->getVertexTag(v)._boundary; }
139 
141 
148  float GetEdgeSharpness(Index e) const { return _level->getEdgeSharpness(e); }
149 
151  float GetVertexSharpness(Index v) const { return _level->getVertexSharpness(v); }
152 
154  bool IsFaceHole(Index f) const { return _level->isFaceHole(f); }
155 
157  Sdc::Crease::Rule GetVertexRule(Index v) const { return _level->getVertexRule(v); }
159 
161 
193  int GetNumFVarChannels() const { return _level->getNumFVarChannels(); }
194 
197  int GetNumFVarValues(int channel = 0) const { return _level->getNumFVarValues(channel); }
198 
200  ConstIndexArray GetFaceFVarValues(Index f, int channel = 0) const {
201  return _level->getFaceFVarValues(f, channel);
202  }
203 
205  bool DoesVertexFVarTopologyMatch(Index v, int channel = 0) const {
206  return _level->doesVertexFVarTopologyMatch(v, channel);
207  }
208 
210  bool DoesEdgeFVarTopologyMatch(Index e, int channel = 0) const {
211  return _level->doesEdgeFVarTopologyMatch(e, channel);
212  }
213 
215  bool DoesFaceFVarTopologyMatch(Index f, int channel = 0) const {
216  return _level->doesFaceFVarTopologyMatch(f, channel);
217  }
218 
220 
222 
225  ConstIndexArray GetFaceChildFaces(Index f) const { return _refToChild->getFaceChildFaces(f); }
226 
228  ConstIndexArray GetFaceChildEdges(Index f) const { return _refToChild->getFaceChildEdges(f); }
229 
231  ConstIndexArray GetEdgeChildEdges(Index e) const { return _refToChild->getEdgeChildEdges(e); }
232 
234  Index GetFaceChildVertex( Index f) const { return _refToChild->getFaceChildVertex(f); }
235 
237  Index GetEdgeChildVertex( Index e) const { return _refToChild->getEdgeChildVertex(e); }
238 
240  Index GetVertexChildVertex(Index v) const { return _refToChild->getVertexChildVertex(v); }
241 
243  Index GetFaceParentFace(Index f) const { return _refToParent->getChildFaceParentFace(f); }
245 
247 
249  bool ValidateTopology() const { return _level->validateTopology(); }
250  void PrintTopology(bool children = true) const { _level->print((children && _refToChild) ? _refToChild : 0); }
252 
253 
254 private:
255  friend class TopologyRefiner;
256 
257  Vtr::internal::Level const * _level;
258  Vtr::internal::Refinement const * _refToParent;
259  Vtr::internal::Refinement const * _refToChild;
260 
261 public:
262  // Not intended for public use, but required by std::vector, etc...
265 };
266 
267 } // end namespace Far
268 
269 } // end namespace OPENSUBDIV_VERSION
270 using namespace OPENSUBDIV_VERSION;
271 } // end namespace OpenSubdiv
272 
273 #endif /* OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H */
bool validateTopology(ValidationCallback callback=0, void const *clientData=0) const
int GetNumEdges() const
Return the number of edges in this level.
Definition: topologyLevel.h:68
Index FindEdge(Index v0, Index v1) const
Identify the edge matching the given vertex pair.
ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident faces.
ConstIndexArray GetFaceFVarValues(Index f, int channel=0) const
Access the face-varying values associated with a particular face.
Sdc::Crease::Rule getVertexRule(Index vertIndex) const
Definition: level.h:746
int GetNumVertices() const
Return the number of vertices in this level.
Definition: topologyLevel.h:62
bool IsEdgeBoundary(Index e) const
Return if the edge is a boundary.
bool IsEdgeNonManifold(Index e) const
Return if the edge is non-manifold.
ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident edges.
Index GetFaceParentFace(Index f) const
Return the parent face (in the previous level) of a given face.
float GetVertexSharpness(Index v) const
Return the sharpness assigned a given vertex.
ConstIndexArray getFaceFVarValues(Index faceIndex, int channel) const
bool IsVertexBoundary(Index v) const
Return if the vertex is a boundary.
ConstLocalIndexArray getEdgeFaceLocalIndices(Index edgeIndex) const
Definition: level.h:698
Index GetVertexChildVertex(Index v) const
Return the child vertex (in the next level) of a given vertex.
ConstLocalIndexArray getVertexFaceLocalIndices(Index vertIndex) const
Definition: level.h:603
bool DoesFaceFVarTopologyMatch(Index f, int channel=0) const
Return if face-varying topology around a face matches.
float getEdgeSharpness(Index edgeIndex) const
Definition: level.h:728
ConstIndexArray GetVertexEdges(Index v) const
Access the edges incident a given vertex.
bool isFaceHole(Index faceIndex) const
Definition: level.h:758
bool doesEdgeFVarTopologyMatch(Index eIndex, int fvarChannel) const
bool isEdgeNonManifold(Index edgeIndex) const
Definition: level.h:770
Stores topology data for a specified set of refinement options.
int GetNumFVarValues(int channel=0) const
Return the total number of face-varying values in a particular channel (the upper bound of a face-var...
ConstIndexArray GetFaceVertices(Index f) const
Access the vertices incident a given face.
Definition: topologyLevel.h:93
ConstIndexArray GetFaceEdges(Index f) const
Access the edges incident a given face.
Definition: topologyLevel.h:96
bool IsVertexNonManifold(Index v) const
Return if the vertex is non-manifold.
ConstIndexArray getEdgeChildEdges(Index parentEdge) const
Definition: refinement.h:438
ConstIndexArray GetFaceChildEdges(Index f) const
Access the child edges (in the next level) of a given face.
ConstIndexArray getVertexFaces(Index vertIndex) const
Definition: level.h:592
ETag const & getEdgeTag(Index edgeIndex) const
Definition: level.h:268
ConstIndexArray GetVertexFaces(Index v) const
Access the faces incident a given vertex.
Index findEdge(Index v0Index, Index v1Index) const
VTag const & getVertexTag(Index vertIndex) const
Definition: level.h:267
ConstIndexArray GetFaceChildFaces(Index f) const
Access the child faces (in the next level) of a given face.
bool doesVertexFVarTopologyMatch(Index vIndex, int fvarChannel) const
ConstIndexArray GetEdgeChildEdges(Index e) const
Access the child edges (in the next level) of a given edge.
ConstIndexArray getFaceVertices(Index faceIndex) const
Definition: level.h:548
void print(const Refinement *parentRefinement=0) const
Sdc::Crease::Rule GetVertexRule(Index v) const
Return the subdivision rule assigned a given vertex specific to this level.
Index GetFaceChildVertex(Index f) const
Return the child vertex (in the next level) of a given face.
ConstIndexArray getEdgeFaces(Index edgeIndex) const
Definition: level.h:685
An interface for accessing data in a specific level of a refined topology hierarchy.
Definition: topologyLevel.h:49
int GetNumFVarChannels() const
Return the number of face-varying channels (should be same for all levels)
ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const
Access the local indices of an edge with respect to its incident faces.
int GetNumFaces() const
Return the number of faces in this level.
Definition: topologyLevel.h:65
bool DoesEdgeFVarTopologyMatch(Index e, int channel=0) const
Return if face-varying topology across the edge only matches.
ConstIndexArray getVertexEdges(Index vertIndex) const
Definition: level.h:629
ConstLocalIndexArray getVertexEdgeLocalIndices(Index vertIndex) const
Definition: level.h:640
float getVertexSharpness(Index vertIndex) const
Definition: level.h:737
void PrintTopology(bool children=true) const
bool DoesVertexFVarTopologyMatch(Index v, int channel=0) const
Return if face-varying topology around a vertex matches.
ConstIndexArray getFaceEdges(Index faceIndex) const
Definition: level.h:578
bool IsFaceHole(Index f) const
Return if a given face has been tagged as a hole.
float GetEdgeSharpness(Index e) const
Return the sharpness assigned a given edge.
int GetNumFaceVertices() const
Return the total number of face-vertices, i.e. the sum of all vertices for all faces.
Definition: topologyLevel.h:71
ConstIndexArray getFaceChildFaces(Index parentFace) const
Definition: refinement.h:411
bool doesFaceFVarTopologyMatch(Index fIndex, int fvarChannel) const
Index GetEdgeChildVertex(Index e) const
Return the child vertex (in the next level) of a given edge.
bool isVertexNonManifold(Index vertIndex) const
Definition: level.h:779
ConstIndexArray getFaceChildEdges(Index parentFace) const
Definition: refinement.h:425
ConstIndexArray getEdgeVertices(Index edgeIndex) const
Definition: level.h:673
ConstIndexArray GetEdgeVertices(Index e) const
Access the vertices incident a given edge.
Definition: topologyLevel.h:99
ConstIndexArray GetEdgeFaces(Index e) const
Access the faces incident a given edge.