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

Method operator()

src/IECoreScene/MeshAlgoResample.cpp:157–199  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

155 }
156
157 template<typename From> ReturnType operator()( const From* data )
158 {
159 typename From::Ptr result = static_cast< From* >( Object::create( data->typeId() ).get() );
160 typename From::ValueType &trg = result->writable();
161 const typename From::ValueType &src = data->readable();
162
163 size_t numVerts = m_mesh->variableSize( PrimitiveVariable::Vertex );
164 std::vector<int> count( numVerts, 0 );
165 trg.resize( numVerts, typename From::ValueType::value_type( 0.0f ) );
166
167 const std::vector<int>& vertexIds = m_mesh->vertexIds()->readable();
168 std::vector<int>::const_iterator vertexIdIt = vertexIds.begin();
169 typename From::ValueType::const_iterator srcIt = src.begin(), srcEnd = src.end();
170
171 int cancelTestCounter = 0;
172 for( ; srcIt != srcEnd ; ++srcIt, ++vertexIdIt )
173 {
174 if( cancelTestCounter++ == 1000 )
175 {
176 Canceller::check( m_canceller );
177 cancelTestCounter = 0;
178 }
179 trg[ *vertexIdIt ] += *srcIt;
180 ++count[ *vertexIdIt ];
181 }
182
183 std::vector<int>::const_iterator cIt = count.begin();
184 typename From::ValueType::iterator trgIt = trg.begin(), trgEnd = trg.end();
185 for( trgIt = trg.begin(); trgIt != trgEnd ; ++trgIt, ++cIt )
186 {
187 if( cancelTestCounter++ == 1000 )
188 {
189 Canceller::check( m_canceller );
190 cancelTestCounter = 0;
191 }
192 *trgIt /= *cIt;
193 }
194
195 IECoreScene::PrimitiveVariableAlgos::GeometricInterpretationCopier<From> copier;
196 copier( data, result.get() );
197
198 return result;
199 }
200
201 const MeshPrimitive *m_mesh;
202 const Canceller *m_canceller;

Callers

nothing calls this directly

Calls 10

createFunction · 0.85
typeIdMethod · 0.80
readableMethod · 0.80
vertexIdsMethod · 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