 |
My Project
|
Go to the documentation of this file.
24 #ifndef OPENSUBDIV3_VTR_FVAR_LEVEL_H
25 #define OPENSUBDIV3_VTR_FVAR_LEVEL_H
27 #include "../version.h"
29 #include "../sdc/types.h"
30 #include "../sdc/crease.h"
31 #include "../sdc/options.h"
32 #include "../vtr/types.h"
33 #include "../vtr/level.h"
41 namespace OPENSUBDIV_VERSION {
90 void clear() { std::memset(
this, 0,
sizeof(
ETag)); }
141 std::memcpy(
this, &bits,
sizeof(bits));
145 std::memcpy(&bits,
this,
sizeof(bits));
256 Level const & _level;
262 bool _hasLinearBoundaries;
263 bool _hasDependentSharpness;
278 std::vector<Index> _faceVertValues;
281 std::vector<ETag> _edgeTags;
284 std::vector<Sibling> _vertSiblingCounts;
285 std::vector<int> _vertSiblingOffsets;
286 std::vector<Sibling> _vertFaceSiblings;
289 std::vector<Index> _vertValueIndices;
290 std::vector<ValueTag> _vertValueTags;
291 std::vector<CreaseEndPair> _vertValueCreaseEnds;
309 return IndexArray(&_faceVertValues[vOffset], vCount);
324 return SiblingArray(&_vertFaceSiblings[vOffset], vCount);
339 return IndexArray(&_vertValueIndices[vOffset], vCount);
375 if (_level.
getDepth() > 0)
return valueIndex;
378 while (_vertValueIndices[vvIndex] != valueIndex) {
399 if (this->_mismatch) {
407 if (this->isCorner()) {
412 if (this->isCrease() || this->isSemiSharp()) {
419 levelTag.
_corner = !this->_infIrregular && !this->_infSharpEdges;
436 using namespace OPENSUBDIV_VERSION;
FVarLevel(Level const &level)
CreaseEndPair getValueCreaseEndPair(Index valueIndex) const
bool hasCreaseEnds() const
ValueTag getFaceCompositeValueTag(Index faceIndex) const
Index getVertexValueOffset(Index v, Sibling i=0) const
int getOffsetOfFaceVertices(Index faceIndex) const
Level const & getLevel() const
void getEdgeFaceValues(Index eIndex, int fIncToEdge, Index valuesPerVert[2]) const
Index getVertexValue(Index v, Sibling i=0) const
bool valueTopologyMatches(Index valueIndex) const
Level::ETag combineWithLevelETag(Level::ETag) const
ConstSiblingArray getVertexFaceSiblings(Index vIndex) const
ETag getEdgeTag(Index eIndex) const
ValueTagSize _nonManifold
unsigned short LocalIndex
ConstValueTagArray getVertexValueTags(Index vIndex) const
int getNumFaceValuesTotal() const
Index findVertexValueIndex(Index vertexIndex, Index valueIndex) const
All supported options applying to subdivision scheme.
ValueTagSize _infSharpEdges
void initializeFaceValuesFromVertexFaceSiblings()
void getVertexCreaseEndValues(Index vIndex, Sibling sibling, Index endValues[2]) const
Sdc::Options getOptions() const
bool hasInfIrregularity() const
int getNumFaceVertices(Index faceIndex) const
bool hasInfSharpEdges() const
int getNumVertexValues(Index v) const
Array< Index > IndexArray
Vtr::Array< ValueTag > ValueTagArray
ConstCreaseEndPairArray getVertexValueCreaseEnds(Index vIndex) const
Level::VTag combineWithLevelVTag(Level::VTag) const
bool edgeTopologyMatches(Index eIndex) const
void resizeVertexValues(int numVertexValues)
int getNumVertexFaces(Index vertIndex) const
bool hasLinearBoundaries() const
Vtr::ConstArray< CreaseEndPair > ConstCreaseEndPairArray
void getVertexEdgeValues(Index vIndex, Index valuesPerEdge[]) const
ConstLocalIndexArray ConstSiblingArray
ValueTag getValueTag(Index valueIndex) const
Vtr::ConstArray< ValueTag > ConstValueTagArray
ValueTag(ValueTagSize bits)
ConstIndexArray getVertexValues(Index vIndex) const
void buildFaceVertexSiblingsFromVertexFaceSiblings(std::vector< Sibling > &fvSiblings) const
ValueTagSize _infIrregular
int getOffsetOfVertexFaces(Index vertIndex) const
Vtr::Array< CreaseEndPair > CreaseEndPairArray
ConstArray< Index > ConstIndexArray
LocalIndexArray SiblingArray
bool hasSmoothBoundaries() const
void setOptions(Sdc::Options const &options)
void getFaceValueTags(Index faceIndex, ValueTag valueTags[]) const
bool hasCreaseEnds() const
ConstIndexArray getFaceValues(Index fIndex) const
void resizeValues(int numValues)
void completeTopologyFromFaceValues(int regBoundaryValence)
void initializeFaceValuesFromFaceVertices()
ValueTagSize getBits() const
unsigned char ValueTagSize
void gatherValueSpans(Index vIndex, ValueSpan *vValueSpans) const