24 #ifndef OPENSUBDIV3_VTR_REFINEMENT_H 25 #define OPENSUBDIV3_VTR_REFINEMENT_H 27 #include "../version.h" 29 #include "../sdc/types.h" 30 #include "../sdc/options.h" 31 #include "../vtr/types.h" 32 #include "../vtr/level.h" 40 namespace OPENSUBDIV_VERSION {
192 unsigned char _selected : 1;
193 unsigned char _transitional : 4;
199 unsigned char _incomplete : 1;
200 unsigned char _parentType : 2;
201 unsigned char _indexInParent : 2;
282 unsigned int _faceVertices : 1;
283 unsigned int _faceEdges : 1;
284 unsigned int _edgeVertices : 1;
285 unsigned int _edgeFaces : 1;
286 unsigned int _vertexFaces : 1;
287 unsigned int _vertexEdges : 1;
290 _faceVertices = enable;
292 _edgeVertices = enable;
294 _vertexFaces = enable;
295 _vertexEdges = enable;
453 using namespace OPENSUBDIV_VERSION;
void populateVertexTagVectors()
int _firstChildFaceFromFace
Array< Index > IndexArray
int _childFaceFromFaceCount
Sdc::Split getSplitType() const
int _childEdgeFromFaceCount
void markSparseEdgeChildren()
Index getFirstChildVertexFromVertices() const
IndexVector _faceChildVertIndex
Index getEdgeChildVertex(Index e) const
virtual void markSparseFaceChildren()=0
virtual void populateFaceVertexRelation()=0
ChildTag const & getChildEdgeTag(Index e) const
void refine(Options options=Options())
std::vector< SparseTag > _parentEdgeTag
int _firstChildVertFromFace
int getNumChildVerticesFromFaces() const
void populateChildToParentMapping()
void populateEdgeParentVectors(ChildTag const initialChildTags[2][4])
SparseTag const & getParentVertexSparseTag(Index v) const
std::vector< ChildTag > _childEdgeTag
virtual void populateEdgeVertexRelation()=0
Level const & child() const
ChildTag const & getChildFaceTag(Index f) const
ConstIndexArray getFaceChildFaces(Index parentFace) const
unsigned int _minimalTopology
SparseTag & getParentVertexSparseTag(Index v)
Index getChildVertexParentIndex(Index v) const
All supported options applying to subdivision scheme.
SparseTag & getParentFaceSparseTag(Index f)
IndexVector _childEdgeParentIndex
std::vector< ChildTag > _childFaceTag
unsigned int _faceVertsFirst
int _firstChildVertFromEdge
ConstIndexArray getEdgeChildEdges(Index parentEdge) const
int _childEdgeFromEdgeCount
std::vector< Index > IndexVector
void populateEdgeParentFromParentEdges(ChildTag const initialChildTags[2][4])
Index getFirstChildEdgeFromFaces() const
void populateEdgeParentFromParentFaces(ChildTag const initialChildTags[2][4])
SparseTag & getParentEdgeSparseTag(Index e)
void populateEdgeTagVectors()
void populateEdgeTagsFromParentEdges()
void populateFaceTagsFromParentFaces()
void populateParentChildIndices()
Index getFirstChildVertexFromEdges() const
void populateParentToChildMapping()
void markSparseVertexChildren()
Index getVertexChildVertex(Index v) const
Index getChildEdgeParentIndex(Index e) const
virtual void populateFaceEdgeRelation()=0
void propagateComponentTags()
ChildTag & getChildEdgeTag(Index e)
IndexVector _childVertexParentIndex
std::vector< ChildTag > _childVertexTag
void populateEdgeTagsFromParentFaces()
std::vector< FVarRefinement * > _fvarChannels
void populateVertexTagsFromParentEdges()
Split
Enumerated type for all face splitting scheme.
void populateVertexParentFromParentEdges(ChildTag const initialChildTags[2][4])
IndexVector _edgeChildEdgeIndices
virtual void populateVertexFaceRelation()=0
IndexArray _faceChildFaceCountsAndOffsets
int _firstChildEdgeFromEdge
int getNumFVarChannels() const
virtual void populateEdgeFaceRelation()=0
void reclassifySemisharpVertices()
ConstIndexArray getFaceChildEdges(Index parentFace) const
Index getChildFaceParentFace(Index f) const
int getRegularFaceSize() const
int getNumChildFacesFromFaces() const
IndexArray _faceChildEdgeCountsAndOffsets
int getNumChildEdgesFromFaces() const
SparseTag const & getParentEdgeSparseTag(Index e) const
IndexVector _childFaceParentIndex
int _firstChildEdgeFromFace
FVarRefinement const & getFVarRefinement(int c) const
void print(const Refinement *parentRefinement=0) const
int _childVertFromEdgeCount
void subdivideSharpnessValues()
IndexVector _vertChildVertIndex
Level const & parent() const
IndexVector _faceChildFaceIndices
void populateFaceParentVectors(ChildTag const initialChildTags[2][4])
void populateFaceParentFromParentFaces(ChildTag const initialChildTags[2][4])
ConstArray< Index > ConstIndexArray
void populateVertexTagsFromParentVertices()
void subdivideVertexSharpness()
std::vector< SparseTag > _parentFaceTag
void populateFaceTagVectors()
ChildTag const & getChildVertexTag(Index v) const
Index getFirstChildFaceFromFaces() const
bool hasFaceVerticesFirst() const
IndexVector _faceChildEdgeIndices
int getChildFaceInParentFace(Index f) const
int getNumChildVerticesFromEdges() const
int getNumChildVerticesFromVertices() const
IndexVector _edgeChildVertIndex
void populateVertexParentFromParentVertices(ChildTag const initialChildTags[2][4])
void subdivideFVarChannels()
ChildTag & getChildVertexTag(Index v)
int _childVertFromVertCount
Index getFirstChildEdgeFromEdges() const
void populateVertexParentVectors(ChildTag const initialChildTags[2][4])
void subdivideEdgeSharpness()
void printParentToChildMapping() const
void initializeSparseSelectionTags()
void markSparseChildComponentIndices()
void subdivideTopology(Relations const &relationsToSubdivide)
virtual void allocateParentChildIndices()=0
void initializeChildComponentCounts()
ChildTag & getChildFaceTag(Index f)
std::vector< SparseTag > _parentVertexTag
virtual void populateVertexEdgeRelation()=0
int _childVertFromFaceCount
Sdc::Options getOptions() const
int _firstChildVertFromVert
int getNumChildEdgesFromEdges() const
void populateVertexTagsFromParentFaces()
bool isChildVertexComplete(Index v) const
SparseTag const & getParentFaceSparseTag(Index f) const
Refinement(Level const &parent, Level &child, Sdc::Options const &schemeOptions)
void populateVertexParentFromParentFaces(ChildTag const initialChildTags[2][4])
Index getFirstChildVertexFromFaces() const
Index getFaceChildVertex(Index f) const