DNA Calib 1.1
Project brief
Public Member Functions | Protected Attributes | Private Member Functions | List of all members
dnac::LODMapping Class Reference

#include <LODMapping.h>

Inheritance diagram for dnac::LODMapping:
Inheritance graph
Collaboration diagram for dnac::LODMapping:
Collaboration graph

Public Member Functions

 LODMapping (MemoryResource *memRes_)
 
std::uint16_t getLODCount () const
 
void resetIndices ()
 
void resetLODs ()
 
void reset ()
 
void setLODCount (std::uint16_t lodCount)
 
void discardLODs (const LODConstraint &lodConstraint)
 
ConstArrayView< std::uint16_t > getIndices (std::uint16_t lod) const
 
std::uint16_t getIndexListCount () const
 
void clearIndices (std::uint16_t index)
 
void addIndices (std::uint16_t index, const std::uint16_t *source, std::uint16_t count)
 
void associateLODWithIndices (std::uint16_t lod, std::uint16_t index)
 
void mapIndices (std::function< std::uint16_t(std::uint16_t)> mapper)
 
void filterIndices (std::function< bool(std::uint16_t)> filterer)
 
UnorderedSet< std::uint16_t > getCombinedDistinctIndices (MemoryResource *memRes) const
 

Protected Attributes

Vector< std::uint16_t > lods
 
Matrix< std::uint16_t > indices
 

Private Member Functions

void cleanupIndices ()
 

Constructor & Destructor Documentation

◆ LODMapping()

dnac::LODMapping::LODMapping ( MemoryResource memRes_)
explicit
23 :
24 lods{memRes_},
25 indices{memRes_} {
26}
Vector< std::uint16_t > lods
Definition: dnacalib/dna/LODMapping.h:52
Matrix< std::uint16_t > indices
Definition: dnacalib/dna/LODMapping.h:53

Member Function Documentation

◆ addIndices()

void dnac::LODMapping::addIndices ( std::uint16_t  index,
const std::uint16_t *  source,
std::uint16_t  count 
)
91 {
92 if (index >= indices.size()) {
93 indices.resize(index + 1ul);
94 }
95 indices[index].reserve(count);
96 indices[index].insert(indices[index].end(), source, source + count);
97}

References indices.

Referenced by dnac::DenormalizedData< Reader >::populateJointVariableAttributeIndices(), and dnac::DenormalizedData< Reader >::populateMeshBlendShapeMappingIndices().

◆ associateLODWithIndices()

void dnac::LODMapping::associateLODWithIndices ( std::uint16_t  lod,
std::uint16_t  index 
)
119 {
120 if (lod >= lods.size()) {
121 lods.resize(lod + 1ul);
122 }
123 if (index >= indices.size()) {
124 indices.resize(index + 1ul);
125 }
126 lods[lod] = index;
127}

References indices, and lods.

Referenced by dnac::DenormalizedData< Reader >::populateJointVariableAttributeIndices(), and dnac::DenormalizedData< Reader >::populateMeshBlendShapeMappingIndices().

◆ cleanupIndices()

void dnac::LODMapping::cleanupIndices ( )
private
56 {
57 for (std::size_t i = indices.size(); i > 0ul; --i) {
58 const auto idx = (i - 1ul);
59 if (std::find(lods.begin(), lods.end(), idx) == lods.end()) {
60 indices.erase(extd::advanced(indices.begin(), idx));
61 for (auto& l2i : lods) {
62 if (l2i > idx) {
63 --l2i;
64 }
65 }
66 }
67 }
68}
TIterator advanced(TIterator source, TDistance distance)
Definition: utils/Extd.h:128

References extd::advanced(), indices, and lods.

Referenced by discardLODs().

◆ clearIndices()

void dnac::LODMapping::clearIndices ( std::uint16_t  index)
83 {
84 if (index < indices.size()) {
85 indices[index].clear();
86 } else {
87 indices.resize(index + 1ul);
88 }
89}

References indices.

◆ discardLODs()

void dnac::LODMapping::discardLODs ( const LODConstraint lodConstraint)
51 {
52 lodConstraint.applyTo(lods);
54}
void cleanupIndices()
Definition: dnacalib/dna/LODMapping.cpp:56

References dnac::LODConstraint::applyTo(), cleanupIndices(), and lods.

◆ filterIndices()

void dnac::LODMapping::filterIndices ( std::function< bool(std::uint16_t)>  filterer)
107 {
108 for (auto& row : indices) {
109 for (auto it = row.begin(); it != row.end();) {
110 if (filterer(*it)) {
111 ++it;
112 } else {
113 it = row.erase(it);
114 }
115 }
116 }
117}

References indices.

◆ getCombinedDistinctIndices()

UnorderedSet< std::uint16_t > dnac::LODMapping::getCombinedDistinctIndices ( MemoryResource memRes) const
129 {
130 UnorderedSet<std::uint16_t> distinctIndices{memRes};
131 for (const auto& row : indices) {
132 distinctIndices.insert(row.begin(), row.end());
133 }
134 return distinctIndices;
135}

References indices.

◆ getIndexListCount()

std::uint16_t dnac::LODMapping::getIndexListCount ( ) const
79 {
80 return static_cast<std::uint16_t>(indices.size());
81}

References indices.

◆ getIndices()

ConstArrayView< std::uint16_t > dnac::LODMapping::getIndices ( std::uint16_t  lod) const
70 {
71 if (lod >= lods.size()) {
72 return {};
73 }
74 assert(lods[lod] < indices.size());
75 const auto it = extd::advanced(indices.cbegin(), lods[lod]);
76 return (it == indices.cend() ? ConstArrayView<std::uint16_t>{} : ConstArrayView<std::uint16_t>{it->data(), it->size()});
77}

References extd::advanced(), indices, and lods.

◆ getLODCount()

std::uint16_t dnac::LODMapping::getLODCount ( ) const
28 {
29 return static_cast<std::uint16_t>(lods.size());
30}

References lods.

◆ mapIndices()

void dnac::LODMapping::mapIndices ( std::function< std::uint16_t(std::uint16_t)>  mapper)
99 {
100 for (auto& row : indices) {
101 for (auto& value : row) {
102 value = mapper(value);
103 }
104 }
105}

References indices.

Referenced by dnac::AnimatedMapFilter::apply(), dnac::BlendShapeFilter::apply(), dnac::JointFilter::apply(), and dnac::MeshFilter::apply().

◆ reset()

void dnac::LODMapping::reset ( )
40 {
41 lods.clear();
42 indices.clear();
43}

References indices, and lods.

Referenced by dnac::DNACalibDNAReaderImpl::removeMesh(), and setLODCount().

◆ resetIndices()

void dnac::LODMapping::resetIndices ( )
32 {
33 indices.clear();
34}

References indices.

◆ resetLODs()

void dnac::LODMapping::resetLODs ( )
36 {
37 lods.clear();
38}

References lods.

◆ setLODCount()

void dnac::LODMapping::setLODCount ( std::uint16_t  lodCount)
45 {
46 reset();
47 lods.resize(lodCount);
48 indices.resize(lodCount);
49}
void reset()
Definition: dnacalib/dna/LODMapping.cpp:40

References indices, lods, and reset().

Referenced by dnac::DenormalizedData< Reader >::populateJointVariableAttributeIndices(), and dnac::DenormalizedData< Reader >::populateMeshBlendShapeMappingIndices().

Member Data Documentation

◆ indices

Matrix<std::uint16_t> dnac::LODMapping::indices
protected

◆ lods

Vector<std::uint16_t> dnac::LODMapping::lods
protected

The documentation for this class was generated from the following files: