24 #ifndef OPENSUBDIV3_FAR_TOPOLOGY_REFINER_H
25 #define OPENSUBDIV3_FAR_TOPOLOGY_REFINER_H
27 #include "../version.h"
29 #include "../sdc/types.h"
30 #include "../sdc/options.h"
31 #include "../far/types.h"
32 #include "../far/topologyLevel.h"
38 namespace OPENSUBDIV_VERSION {
40 namespace Vtr {
namespace internal {
class SparseSelector; } }
41 namespace Far {
namespace internal {
class FeatureMask; } }
45 template <
typename REAL>
class PrimvarRefinerReal;
222 template <
class MESH>
228 template <
typename REAL>
236 Vtr::internal::Level &
getLevel(
int l) {
return *_levels[l]; }
237 Vtr::internal::Level
const &
getLevel(
int l)
const {
return *_levels[l]; }
239 Vtr::internal::Refinement &
getRefinement(
int l) {
return *_refinements[l]; }
240 Vtr::internal::Refinement
const &
getRefinement(
int l)
const {
return *_refinements[l]; }
245 TopologyRefiner & operator=(TopologyRefiner
const &) {
return *
this; }
247 void selectFeatureAdaptiveComponents(Vtr::internal::SparseSelector& selector,
248 internal::FeatureMask
const & mask,
250 void selectLinearIrregularFaces(Vtr::internal::SparseSelector& selector,
253 void initializeInventory();
254 void updateInventory(Vtr::internal::Level
const & newLevel);
256 void appendLevel(Vtr::internal::Level & newLevel);
257 void appendRefinement(Vtr::internal::Refinement & newRefinement);
258 void assembleFarLevels();
265 unsigned int _isUniform : 1;
266 unsigned int _hasHoles : 1;
267 unsigned int _hasIrregFaces : 1;
268 unsigned int _regFaceSize : 3;
269 unsigned int _maxLevel : 4;
272 UniformOptions _uniformOptions;
273 AdaptiveOptions _adaptiveOptions;
279 int _totalFaceVertices;
283 bool _baseLevelOwned;
285 std::vector<Vtr::internal::Level *> _levels;
286 std::vector<Vtr::internal::Refinement *> _refinements;
288 std::vector<TopologyLevel> _farLevels;
295 return _levels[0]->getNumFVarChannels();
300 return _levels[0]->getFVarOptions(channel).GetFVarLinearInterpolation();
306 using namespace OPENSUBDIV_VERSION;
friend class PatchTableBuilder
void SetIsolationLevel(int level)
Set isolation level.
int GetNumFVarChannels() const
Returns the number of face-varying channels in the tables.
Adaptive refinement options.
unsigned int useInfSharpPatch
unsigned int considerFVarChannels
unsigned int secondaryLevel
unsigned int refinementLevel
Number of refinement iterations.
int GetNumFacesTotal() const
Returns the total number of edges in all levels.
int GetNumFaceVerticesTotal() const
Returns the total number of face vertices in all levels.
bool IsUniform() const
Returns true if uniform refinement has been applied.
Factory for constructing TopologyRefiners from specific mesh classes.
void RefineUniform(UniformOptions options)
Refine the topology uniformly.
Vtr::internal::Level const & getLevel(int l) const
Sdc::Options GetSchemeOptions() const
Returns the subdivision options.
UniformOptions GetUniformOptions() const
Returns the options specified on refinement.
void SetRefinementLevel(int level)
Set uniform refinement level.
Object used to compute and query ptex face indices.
unsigned int orderVerticesFromFacesFirst
Vtr::internal::Refinement & getRefinement(int l)
Vtr::ConstIndexArray ConstIndexArray
Stores topology data for a specified set of refinement options.
unsigned int fullTopologyInLastLevel
Sdc::Options::FVarLinearInterpolation GetFVarLinearInterpolation(int channel=0) const
Returns the face-varying interpolation rule set for a given channel.
All supported options applying to subdivision scheme.
unsigned int orderVerticesFromFacesFirst
Vtr::internal::Refinement const & getRefinement(int l) const
int GetNumVerticesTotal() const
Returns the total number of vertices in all levels.
AdaptiveOptions(int level)
void RefineAdaptive(AdaptiveOptions options, ConstIndexArray selectedFaces=ConstIndexArray())
Feature Adaptive topology refinement.
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
void SetSecondaryLevel(int level)
Set secondary isolation level.
int GetNumEdgesTotal() const
Returns the total number of edges in all levels.
int GetNumLevels() const
Returns the number of refinement levels.
Uniform refinement options.
void Unrefine()
Unrefine the topology, keeping only the base level.
AdaptiveOptions GetAdaptiveOptions() const
Returns the options specified on refinement.
Applies refinement operations to generic primvar data.
friend class PatchBuilder
int GetNumFVarValuesTotal(int channel=0) const
Returns the total number of face-varying values in all levels.
Vtr::internal::Level & getLevel(int l)
unsigned int useSingleCreasePatch
Sdc::SchemeType GetSchemeType() const
Returns the subdivision scheme.
UniformOptions(int level)
An interface for accessing data in a specific level of a refined topology hierarchy.
unsigned int isolationLevel
TopologyLevel const & GetLevel(int level) const
Returns a handle to access data specific to a particular level.
Private base class of Factories for constructing TopologyRefiners.
bool HasHoles() const
Returns true if faces have been tagged as holes.
~TopologyRefiner()
Destructor.
int GetMaxLevel() const
Returns the highest level of refinement.
int GetMaxValence() const
Returns the maximum vertex valence in all levels.