| 775 | } |
| 776 | |
| 777 | void excludeFullySelectedComponents( const Mesh& mesh, VertBitSet& selection ) |
| 778 | { |
| 779 | MR_TIMER; |
| 780 | |
| 781 | auto unionFindStruct = getUnionFindStructureVerts( mesh ); |
| 782 | const auto& allRoots = unionFindStruct.roots(); |
| 783 | auto [uniqueRootsMap, k] = getUniqueRootIds( allRoots, mesh.topology.getValidVerts() ); |
| 784 | RegionBitSet remainKeysBitSets( k ); |
| 785 | for ( VertId v( 0 ); v < uniqueRootsMap.size(); ++v ) |
| 786 | { |
| 787 | if ( selection.test( v ) ) |
| 788 | continue; |
| 789 | if ( auto rId = uniqueRootsMap[v] ) |
| 790 | remainKeysBitSets.set( rId ); |
| 791 | } |
| 792 | for ( auto v : selection ) |
| 793 | { |
| 794 | if ( !remainKeysBitSets.test( uniqueRootsMap[v] ) ) |
| 795 | selection.reset( v ); |
| 796 | } |
| 797 | } |
| 798 | |
| 799 | BaseUnionFind<FaceId> getUnionFindStructureFacesPerEdge( const MeshTopology& topology, const FaceBitSet* region, const UndirectedEdgeBitSet * isCompBd ) |
| 800 | { |
no test coverage detected