coal  3.0.1
Coal, The Collision Detection Library. Previously known as HPP-FCL, fork of FCL -- The Flexible Collision Library
coal::BVSplitter< BV > Class Template Reference

A class describing the split rule that splits each BV node. More...

#include <coal/internal/BV_splitter.h>

Inheritance diagram for coal::BVSplitter< BV >:
Collaboration diagram for coal::BVSplitter< BV >:

Public Member Functions

 BVSplitter (SplitMethodType method)
 
virtual ~BVSplitter ()
 Default deconstructor. More...
 
void set (Vec3s *vertices_, Triangle *tri_indices_, BVHModelType type_)
 Set the geometry data needed by the split rule. More...
 
void computeRule (const BV &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 Compute the split rule according to a subset of geometry and the corresponding BV node. More...
 
bool apply (const Vec3s &q) const
 Apply the split rule on a given point. More...
 
void clear ()
 Clear the geometry data set before. More...
 
bool apply (const Vec3s &q) const
 
bool apply (const Vec3s &q) const
 
bool apply (const Vec3s &q) const
 
bool apply (const Vec3s &q) const
 

Protected Member Functions

void computeRule_bvcenter (const BV &bv, unsigned int *, unsigned int)
 Split algorithm 1: Split the node from center. More...
 
void computeRule_mean (const BV &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 Split algorithm 2: Split the node according to the mean of the data contained. More...
 
void computeRule_median (const BV &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 Split algorithm 3: Split the node according to the median of the data contained. More...
 
void computeRule_bvcenter (const OBB &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_mean (const OBB &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_median (const OBB &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_bvcenter (const RSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_mean (const RSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_median (const RSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_bvcenter (const kIOS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_mean (const kIOS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_median (const kIOS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_bvcenter (const OBBRSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_mean (const OBBRSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 
void computeRule_median (const OBBRSS &bv, unsigned int *primitive_indices, unsigned int num_primitives)
 

Protected Attributes

int split_axis
 The axis based on which the split decision is made. For most BV, the axis is aligned with one of the world coordinate, so only split_axis is needed. For oriented node, we can use a vector to make a better split decision. More...
 
Vec3s split_vector
 
Scalar split_value
 The split threshold, different primitives are splitted according whether their projection on the split_axis is larger or smaller than the threshold. More...
 
Vec3svertices
 The mesh vertices or points handled by the splitter. More...
 
Triangletri_indices
 The triangles handled by the splitter. More...
 
BVHModelType type
 Whether the geometry is mesh or point cloud. More...
 
SplitMethodType split_method
 The split algorithm used. More...
 

Detailed Description

template<typename BV>
class coal::BVSplitter< BV >

A class describing the split rule that splits each BV node.

Constructor & Destructor Documentation

◆ BVSplitter()

template<typename BV >
coal::BVSplitter< BV >::BVSplitter ( SplitMethodType  method)
inline

◆ ~BVSplitter()

template<typename BV >
virtual coal::BVSplitter< BV >::~BVSplitter ( )
inlinevirtual

Default deconstructor.

Member Function Documentation

◆ apply() [1/5]

template<typename BV >
bool coal::BVSplitter< BV >::apply ( const Vec3s q) const
inline

Apply the split rule on a given point.

◆ apply() [2/5]

bool coal::BVSplitter< OBB >::apply ( const Vec3s q) const

◆ apply() [3/5]

bool coal::BVSplitter< RSS >::apply ( const Vec3s q) const

◆ apply() [4/5]

bool coal::BVSplitter< kIOS >::apply ( const Vec3s q) const

◆ apply() [5/5]

bool coal::BVSplitter< OBBRSS >::apply ( const Vec3s q) const

◆ clear()

template<typename BV >
void coal::BVSplitter< BV >::clear ( )
inline

Clear the geometry data set before.

◆ computeRule()

template<typename BV >
void coal::BVSplitter< BV >::computeRule ( const BV &  bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
inline

Compute the split rule according to a subset of geometry and the corresponding BV node.

◆ computeRule_bvcenter() [1/5]

template<typename BV >
void coal::BVSplitter< BV >::computeRule_bvcenter ( const BV &  bv,
unsigned int *  ,
unsigned int   
)
inlineprotected

Split algorithm 1: Split the node from center.

◆ computeRule_bvcenter() [2/5]

void coal::BVSplitter< kIOS >::computeRule_bvcenter ( const kIOS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_bvcenter() [3/5]

void coal::BVSplitter< OBB >::computeRule_bvcenter ( const OBB bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_bvcenter() [4/5]

void coal::BVSplitter< OBBRSS >::computeRule_bvcenter ( const OBBRSS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_bvcenter() [5/5]

void coal::BVSplitter< RSS >::computeRule_bvcenter ( const RSS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_mean() [1/5]

template<typename BV >
void coal::BVSplitter< BV >::computeRule_mean ( const BV &  bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
inlineprotected

Split algorithm 2: Split the node according to the mean of the data contained.

◆ computeRule_mean() [2/5]

void coal::BVSplitter< kIOS >::computeRule_mean ( const kIOS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_mean() [3/5]

void coal::BVSplitter< OBB >::computeRule_mean ( const OBB bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_mean() [4/5]

void coal::BVSplitter< OBBRSS >::computeRule_mean ( const OBBRSS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_mean() [5/5]

void coal::BVSplitter< RSS >::computeRule_mean ( const RSS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_median() [1/5]

template<typename BV >
void coal::BVSplitter< BV >::computeRule_median ( const BV &  bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
inlineprotected

Split algorithm 3: Split the node according to the median of the data contained.

◆ computeRule_median() [2/5]

void coal::BVSplitter< kIOS >::computeRule_median ( const kIOS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_median() [3/5]

void coal::BVSplitter< OBB >::computeRule_median ( const OBB bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_median() [4/5]

void coal::BVSplitter< OBBRSS >::computeRule_median ( const OBBRSS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ computeRule_median() [5/5]

void coal::BVSplitter< RSS >::computeRule_median ( const RSS bv,
unsigned int *  primitive_indices,
unsigned int  num_primitives 
)
protected

◆ set()

template<typename BV >
void coal::BVSplitter< BV >::set ( Vec3s vertices_,
Triangle tri_indices_,
BVHModelType  type_ 
)
inline

Set the geometry data needed by the split rule.

Member Data Documentation

◆ split_axis

template<typename BV >
int coal::BVSplitter< BV >::split_axis
protected

The axis based on which the split decision is made. For most BV, the axis is aligned with one of the world coordinate, so only split_axis is needed. For oriented node, we can use a vector to make a better split decision.

◆ split_method

template<typename BV >
SplitMethodType coal::BVSplitter< BV >::split_method
protected

The split algorithm used.

◆ split_value

template<typename BV >
Scalar coal::BVSplitter< BV >::split_value
protected

The split threshold, different primitives are splitted according whether their projection on the split_axis is larger or smaller than the threshold.

◆ split_vector

template<typename BV >
Vec3s coal::BVSplitter< BV >::split_vector
protected

◆ tri_indices

template<typename BV >
Triangle* coal::BVSplitter< BV >::tri_indices
protected

The triangles handled by the splitter.

◆ type

template<typename BV >
BVHModelType coal::BVSplitter< BV >::type
protected

Whether the geometry is mesh or point cloud.

◆ vertices

template<typename BV >
Vec3s* coal::BVSplitter< BV >::vertices
protected

The mesh vertices or points handled by the splitter.


The documentation for this class was generated from the following files: