MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ within_radius()

template<typename PointT >
std::vector< QueryResult > MayaFlux::Kinesis::SpatialIndex< PointT >::within_radius ( const PointT &  center,
float  radius 
) const

Find all entities within a radius of a point.

Parameters
centerQuery origin.
radiusSearch radius (same units as positions).
Returns
Unsorted results with squared distances. Empty if no snapshot published.

Definition at line 236 of file SpatialIndex.cpp.

239{
240 std::vector<QueryResult> results;
241 float radius_sq = radius * radius;
242
243#ifdef MAYAFLUX_PLATFORM_MACOS
244 auto [snap, slot] = acquire_snapshot();
245 if (!snap) {
246 return results;
247 }
248#else
249 auto snap_ptr = m_snapshot.load(std::memory_order_acquire);
250 if (!snap_ptr) {
251 return results;
252 }
253 const auto* snap = snap_ptr.get();
254#endif
255
256 if (m_use_grid) {
257 query_grid(*snap, center, radius_sq, results);
258 } else {
259 query_brute(*snap, center, radius_sq, results);
260 }
261
262#ifdef MAYAFLUX_PLATFORM_MACOS
263 release_snapshot(slot);
264#endif
265
266 return results;
267}
Range radius
void query_grid(const SpatialSnapshot< PointT > &snap, const PointT &center, float radius_sq, std::vector< QueryResult > &out) const
void query_brute(const SpatialSnapshot< PointT > &snap, const PointT &center, float radius_sq, std::vector< QueryResult > &out) const
std::atomic< std::shared_ptr< const SpatialSnapshot< PointT > > > m_snapshot

References radius.