MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / updateQueue_

Method updateQueue_

source/MRMesh/MRMeshDecimate.cpp:354–390  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

352}
353
354void MeshDecimator::updateQueue_()
355{
356 MR_TIMER;
357
358 Timer t( "compute" );
359 auto & vec = queue_.c;
360 // recompute errors for outdated edges
361 BitSet del( vec.size(), false );
362 BitSetParallelForAll( del, [&]( size_t i )
363 {
364 auto& qe = vec[i];
365 const auto ue = qe.uedgeId();
366 if ( !validInQueue_.test( ue ) )
367 return;
368 if ( !outdated_.test( ue ) )
369 return;
370 if ( auto n = computeQueueElement_( qe.uedgeId(), qe.x.edgeOp == EdgeOp::CollapseOptPos ) )
371 qe = *n;
372 else
373 del.set( i );
374 } );
375 outdated_.reset( 0_ue, outdated_.size() );
376 numOutdated_ = 0;
377
378 t.restart( "invalidate" );
379 // removed valid flag for outdated edges with failed computeQueueElement_
380 for ( auto i : del )
381 validInQueue_.reset( vec[i].uedgeId() );
382
383 t.restart( "remove deleted" );
384 // remove invalid and deleted edges from the queue
385 std::erase_if( vec, [&]( QueueElement & qe ) { return !validInQueue_.test( qe.uedgeId() ); } );
386
387 t.restart( "restore heap" );
388 // sort elements to restore heap property
389 std::make_heap( vec.begin(), vec.end() );
390}
391
392QuadraticForm3f MeshDecimator::collapseForm_( UndirectedEdgeId ue, const Vector3f & collapsePos ) const
393{

Callers

nothing calls this directly

Calls 9

BitSetParallelForAllFunction · 0.85
uedgeIdMethod · 0.80
sizeMethod · 0.45
testMethod · 0.45
setMethod · 0.45
resetMethod · 0.45
restartMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected