|
| void | pack (const Vec3T< T > *a_positions, const uint32_t *a_pointIds, uint32_t a_count) noexcept |
| | Pack a_count (position, point id) pairs into this group.
|
| |
| Array< T, W > | getDistances2 (const Vec3T< T > &a_point) const noexcept |
| | Squared unsigned distances from a_point to every one of the W lane points.
|
| |
| Array< T, W > | getDistances (const Vec3T< T > &a_point) const noexcept |
| | Unsigned distances from a_point to every one of the W lane points.
|
| |
| T | getMinimumDistance2 (const Vec3T< T > &a_point) const noexcept |
| | Shortest squared unsigned distance from a_point to the closest point in this group.
|
| |
| T | getMinimumDistance (const Vec3T< T > &a_point) const noexcept |
| | Shortest unsigned distance from a_point to the closest point in this group.
|
| |
| T | getMaximumDistance2 (const Vec3T< T > &a_point) const noexcept |
| | Largest squared unsigned distance from a_point to the farthest point in this group.
|
| |
| T | getMaximumDistance (const Vec3T< T > &a_point) const noexcept |
| | Largest unsigned distance from a_point to the farthest point in this group.
|
| |
| uint32_t | getPointId (size_t a_lane) const noexcept |
| | Get the id of the point in one lane of this group.
|
| |
| uint32_t | numValid () const noexcept |
| | Number of real (non-padded) points in this group.
|
| |
| template<class BV > |
| BV | computeBoundingVolume () const noexcept |
| | Compute the bounding volume enclosing all valid points in this group.
|
| |
template<class T, size_t W = PointSoA::DefaultWidth<T>()>
struct EBGeometry::PointAoSoA< T, W >
A PointSoAT<T, W> group that also carries each point's cloud index.
Structurally this is an AoSoA (Array of Structures of Arrays): PointSoAT<T, W> itself is true SoA (one flat array per coordinate, no per-point structure at all), and PointAoSoA adds exactly one more member – an Array<uint32_t, W> of point ids – alongside it. The two are never merged or interleaved: the distance queries (getMinimumDistance2(), getMaximumDistance2(), getDistances2(), and their sqrt forms – all delegated straight through to the embedded PointSoAT) never read the ids at all, so a pure position-only distance traversal over PointAoSoA-packed leaves touches exactly the same bytes it would touch over bare PointSoAT-packed leaves – an id is only ever read afterward, once a query already knows which lane (and therefore which point) it cares about, via getPointId(). This is the point counterpart of TriangleAoSoA, which carries face ids the same way.
- Template Parameters
-
template<class T , size_t W = PointSoA::DefaultWidth<T>()>
Shortest squared unsigned distance from a_point to the closest point in this group.
Delegates entirely to the embedded PointSoAT<T, W>; never touches the ids. Avoids the sqrt that getMinimumDistance() pays – prefer it whenever the caller only needs the distance for comparison, not its actual magnitude.
- Parameters
-
| [in] | a_point | Query point. Must be finite. |
- Returns
- Squared distance from a_point to the closest valid point in this group.
template<class T , size_t W = PointSoA::DefaultWidth<T>()>
Pack a_count (position, point id) pairs into this group.
Pads lanes a_count..W-1 by repeating the last real position and id, matching PointSoAT::pack()'s own padding convention, so all W lanes hold valid data. Scans that must see each point once stop at numValid().
- Parameters
-
| [in] | a_positions | Source position array with at least a_count elements. Must not be null. |
| [in] | a_pointIds | Source id array (typically cloud indices) with at least a_count elements, same order and length as a_positions. Must not be null. |
| [in] | a_count | Number of valid (position, id) pairs to pack. Must satisfy 1 <= a_count <= W. |