My Project
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
35namespace OpenSubdiv {
36namespace OPENSUBDIV_VERSION {
37
38namespace Far {
39
50
51public:
53
60
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
90 //
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
126
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
146
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
191
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
223
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
248
249 bool ValidateTopology() const { return _level->validateTopology(); }
250 void PrintTopology(bool children = true) const { _level->print((children && _refToChild) ? _refToChild : 0); }
252
253
254private:
255 friend class TopologyRefiner;
256
257 Vtr::internal::Level const * _level;
258 Vtr::internal::Refinement const * _refToParent;
259 Vtr::internal::Refinement const * _refToChild;
260
261public:
262 // Not intended for public use, but required by std::vector, etc...
265};
266
267} // end namespace Far
268
269} // end namespace OPENSUBDIV_VERSION
270using namespace OPENSUBDIV_VERSION;
271} // end namespace OpenSubdiv
272
273#endif /* OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H */
An interface for accessing data in a specific level of a refined topology hierarchy.
Definition: topologyLevel.h:49
Index GetFaceParentFace(Index f) const
Return the parent face (in the previous level) of a given face.
float GetEdgeSharpness(Index e) const
Return the sharpness assigned a given edge.
bool DoesFaceFVarTopologyMatch(Index f, int channel=0) const
Return if face-varying topology around a face matches.
Sdc::Crease::Rule GetVertexRule(Index v) const
Return the subdivision rule assigned a given vertex specific to this level.
Index GetVertexChildVertex(Index v) const
Return the child vertex (in the next level) of a given vertex.
ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const
Access the local indices of an edge with respect to its incident faces.
ConstIndexArray GetFaceChildEdges(Index f) const
Access the child edges (in the next level) of a given face.
bool DoesEdgeFVarTopologyMatch(Index e, int channel=0) const
Return if face-varying topology across the edge only matches.
void PrintTopology(bool children=true) const
ConstIndexArray GetFaceVertices(Index f) const
Access the vertices incident a given face.
Definition: topologyLevel.h:93
ConstIndexArray GetFaceChildFaces(Index f) const
Access the child faces (in the next level) of a given face.
int GetNumEdges() const
Return the number of edges in this level.
Definition: topologyLevel.h:68
bool IsEdgeNonManifold(Index e) const
Return if the edge is non-manifold.
bool IsFaceHole(Index f) const
Return if a given face has been tagged as a hole.
ConstIndexArray GetVertexEdges(Index v) const
Access the edges incident a given vertex.
Index GetFaceChildVertex(Index f) const
Return the child vertex (in the next level) of a given face.
bool DoesVertexFVarTopologyMatch(Index v, int channel=0) const
Return if face-varying topology around a vertex matches.
ConstIndexArray GetEdgeChildEdges(Index e) const
Access the child edges (in the next level) of a given edge.
ConstIndexArray GetVertexFaces(Index v) const
Access the faces incident a given vertex.
Index FindEdge(Index v0, Index v1) const
Identify the edge matching the given vertex pair.
ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident edges.
ConstIndexArray GetFaceEdges(Index f) const
Access the edges incident a given face.
Definition: topologyLevel.h:96
int GetNumFaces() const
Return the number of faces in this level.
Definition: topologyLevel.h:65
bool IsVertexBoundary(Index v) const
Return if the vertex is a boundary.
int GetNumFVarChannels() const
Return the number of face-varying channels (should be same for all levels)
int GetNumVertices() const
Return the number of vertices in this level.
Definition: topologyLevel.h:62
ConstIndexArray GetEdgeFaces(Index e) const
Access the faces incident a given edge.
ConstIndexArray GetFaceFVarValues(Index f, int channel=0) const
Access the face-varying values associated with a particular face.
ConstIndexArray GetEdgeVertices(Index e) const
Access the vertices incident a given edge.
Definition: topologyLevel.h:99
float GetVertexSharpness(Index v) const
Return the sharpness assigned a given vertex.
Index GetEdgeChildVertex(Index e) const
Return the child vertex (in the next level) of 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
bool IsVertexNonManifold(Index v) const
Return if the vertex is non-manifold.
bool IsEdgeBoundary(Index e) const
Return if the edge is a boundary.
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...
ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident faces.
Stores topology data for a specified set of refinement options.
bool doesFaceFVarTopologyMatch(Index fIndex, int fvarChannel) const
ConstIndexArray getVertexEdges(Index vertIndex) const
Definition: level.h:641
ConstLocalIndexArray getEdgeFaceLocalIndices(Index edgeIndex) const
Definition: level.h:710
bool isFaceHole(Index faceIndex) const
Definition: level.h:770
ConstIndexArray getEdgeVertices(Index edgeIndex) const
Definition: level.h:685
bool validateTopology(ValidationCallback callback=0, void const *clientData=0) const
ConstIndexArray getFaceEdges(Index faceIndex) const
Definition: level.h:590
float getEdgeSharpness(Index edgeIndex) const
Definition: level.h:740
ETag const & getEdgeTag(Index edgeIndex) const
Definition: level.h:280
ConstIndexArray getFaceFVarValues(Index faceIndex, int channel) const
void print(const Refinement *parentRefinement=0) const
ConstIndexArray getVertexFaces(Index vertIndex) const
Definition: level.h:604
ConstLocalIndexArray getVertexEdgeLocalIndices(Index vertIndex) const
Definition: level.h:652
Sdc::Crease::Rule getVertexRule(Index vertIndex) const
Definition: level.h:758
bool doesVertexFVarTopologyMatch(Index vIndex, int fvarChannel) const
Index findEdge(Index v0Index, Index v1Index) const
bool isVertexNonManifold(Index vertIndex) const
Definition: level.h:791
ConstLocalIndexArray getVertexFaceLocalIndices(Index vertIndex) const
Definition: level.h:615
float getVertexSharpness(Index vertIndex) const
Definition: level.h:749
ConstIndexArray getEdgeFaces(Index edgeIndex) const
Definition: level.h:697
bool isEdgeNonManifold(Index edgeIndex) const
Definition: level.h:782
bool doesEdgeFVarTopologyMatch(Index eIndex, int fvarChannel) const
VTag const & getVertexTag(Index vertIndex) const
Definition: level.h:279
ConstIndexArray getFaceVertices(Index faceIndex) const
Definition: level.h:560
ConstIndexArray getFaceChildEdges(Index parentFace) const
Definition: refinement.h:425
ConstIndexArray getEdgeChildEdges(Index parentEdge) const
Definition: refinement.h:438
ConstIndexArray getFaceChildFaces(Index parentFace) const
Definition: refinement.h:411