OpenVDB
12.1.0
|
#include <openvdb/points/impl/PrincipalComponentAnalysisImpl.h>
Inherits VolumeTransfer< PointDataTreeT >, and InterruptableTransfer.
Inherited by CovarianceTransfer< PointDataTreeT >, and WeightPosSumsTransfer< PointDataTreeT >.
Public Types | |
using | BaseT = VolumeTransfer< PointDataTreeT > |
using | LeafNodeType = typename PointDataTreeT::LeafNodeType |
using | PositionHandleT = points::AttributeHandle< Vec3d, NullCodec > |
using | TreeTupleT = std::tuple< TreeTypes *... > |
using | TreeType = typename std::tuple_element< Idx, std::tuple< TreeTypes... >>::type |
using | ValueType = typename TreeType< Idx >::ValueType |
using | NodeMaskT = typename TreeType< 0 >::LeafNodeType::NodeMaskType |
Public Member Functions | |
PcaTransfer (const AttrIndices &indices, const PcaSettings &settings, const Real vs, tree::LeafManager< PointDataTreeT > &manager, util::NullInterrupter *interrupt) | |
PcaTransfer (const PcaTransfer &other) | |
float | searchRadius () const |
size_t | neighbourThreshold () const |
size_t | maxSourcePointsPerVoxel () const |
size_t | maxTargetPointsPerVoxel () const |
Vec3i | range (const Coord &, size_t) const |
Vec3i | range () const |
LeafNodeType * | initialize (const Coord &origin, const size_t idx, const CoordBBox &bounds) |
bool | startPointLeaf (const typename PointDataTreeT::LeafNodeType &leaf) |
bool | endPointLeaf (const typename PointDataTreeT::LeafNodeType &) |
TreeType< 0 > & | topology () |
ValueType< Idx > * | buffer () |
const ValueType< Idx > * | buffer () const |
NodeMaskT * | mask () |
NodeMaskT * | mask (const size_t idx) |
const NodeMaskT * | mask () const |
const NodeMaskT * | mask (const size_t idx) const |
void | foreach (const FunctorT &functor) |
bool | interrupted () const |
Static Public Attributes | |
static const size_t | Size |
Protected Attributes | |
const AttrIndices & | mIndices |
const PcaSettings & | mSettings |
const Real | mDxInv |
const tree::LeafManager< PointDataTreeT > & | mManager |
std::unique_ptr< PositionHandleT > | mTargetPosition |
std::unique_ptr< PositionHandleT > | mSourcePosition |
The double loop technique was chosen to better handle the computation of anisotropy for all points and all neighbourhoods (i.e. no limiting via the max point per voxel (MPPV) options). It makes the PCA method extremely memory efficient for all MPPV and radius values. However it might be worth falling back to a gather stlye approach when the MPPV and radius values are relatively small. We should investigate this in the future.
using BaseT = VolumeTransfer<PointDataTreeT> |
using LeafNodeType = typename PointDataTreeT::LeafNodeType |
using PositionHandleT = points::AttributeHandle<Vec3d, NullCodec> |
|
inherited |
|
inherited |
|
inline |
|
inline |
|
inlineinherited |
|
inlineinherited |
|
inline |
|
inlineinherited |
|
inline |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineinherited |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
staticinherited |