MCPcopy Create free account
hub / github.com/ImageEngine/cortex / operator()

Method operator()

src/IECoreScene/MeshAlgoResample.cpp:108–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

106 }
107
108 template<typename From> ReturnType operator()( const From* data )
109 {
110 typename From::Ptr result = static_cast< From* >( Object::create( data->typeId() ).get() );
111 typename From::ValueType &trg = result->writable();
112 const typename From::ValueType &src = data->readable();
113
114 size_t numVerts = m_mesh->variableSize( PrimitiveVariable::Vertex );
115 std::vector<int> count( numVerts, 0 );
116 trg.resize( numVerts, typename From::ValueType::value_type( 0.0f ) );
117
118 typename From::ValueType::const_iterator srcIt = src.begin();
119 std::vector<int>::const_iterator vId = m_mesh->vertexIds()->readable().begin();
120 const std::vector<int> &verticesPerFace = m_mesh->verticesPerFace()->readable();
121 for( std::vector<int>::const_iterator it = verticesPerFace.begin(); it < verticesPerFace.end(); ++it, ++srcIt )
122 {
123 Canceller::check( m_canceller );
124
125 for( int j = 0; j < *it; ++j, ++vId )
126 {
127 trg[ *vId ] += *srcIt;
128 ++count[ *vId ];
129 }
130 }
131
132 std::vector<int>::const_iterator cIt = count.begin();
133 typename From::ValueType::iterator trgIt = trg.begin(), trgEnd = trg.end();
134 for( trgIt = trg.begin(); trgIt != trgEnd ; ++trgIt, ++cIt )
135 {
136 *trgIt /= *cIt;
137 }
138
139 IECoreScene::PrimitiveVariableAlgos::GeometricInterpretationCopier<From> copier;
140 copier( data, result.get() );
141
142 return result;
143 }
144
145 const MeshPrimitive *m_mesh;
146 const Canceller *m_canceller;

Callers

nothing calls this directly

Calls 11

createFunction · 0.85
typeIdMethod · 0.80
readableMethod · 0.80
vertexIdsMethod · 0.80
verticesPerFaceMethod · 0.80
getMethod · 0.45
writableMethod · 0.45
variableSizeMethod · 0.45
resizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected