| 143 | } |
| 144 | |
| 145 | std::pair<AABBTreePoints::NodeVec, std::vector<AABBTreePoints::Point>> AABBTreePointsMaker::construct( |
| 146 | const VertCoords & points, const VertBitSet * validPoints ) |
| 147 | { |
| 148 | MR_TIMER; |
| 149 | |
| 150 | const int numPoints = validPoints ? int( validPoints->count() ) : int( points.size() ); |
| 151 | if ( numPoints <= 0 ) |
| 152 | return {}; |
| 153 | |
| 154 | orderedPoints_.resize( numPoints ); |
| 155 | int n = 0; |
| 156 | if ( validPoints ) |
| 157 | { |
| 158 | for ( auto v : *validPoints ) |
| 159 | orderedPoints_[n++] = { points[v], v }; |
| 160 | } |
| 161 | else |
| 162 | { |
| 163 | for ( auto v = 0_v; v < points.size(); ++v ) |
| 164 | orderedPoints_[n++] = { points[v], v }; |
| 165 | } |
| 166 | |
| 167 | nodes_.resize( getNumNodesPoints( numPoints ) ); |
| 168 | makeSubtree( SubtreePoints( AABBTreePoints::rootNodeId(), 0, numPoints ), std::thread::hardware_concurrency() ); |
| 169 | |
| 170 | return {std::move( nodes_ ),std::move( orderedPoints_ )}; |
| 171 | } |
| 172 | |
| 173 | AABBTreePoints::AABBTreePoints( const PointCloud& pointCloud ) |
| 174 | { |
no test coverage detected