Go to the documentation of this file.
38 #ifndef HPP_FCL_BV_SPLITTER_H
39 #define HPP_FCL_BV_SPLITTER_H
58 template <
typename BV>
76 void computeRule(
const BV& bv,
unsigned int* primitive_indices,
77 unsigned int num_primitives) {
89 std::cerr <<
"Split method not supported" << std::endl;
130 Vec3f center = bv.center();
133 if (bv.width() >= bv.height() && bv.width() >= bv.depth())
135 else if (bv.height() >= bv.width() && bv.height() >= bv.depth())
145 unsigned int num_primitives) {
148 if (bv.width() >= bv.height() && bv.width() >= bv.depth())
150 else if (bv.height() >= bv.width() && bv.height() >= bv.depth())
157 for (
unsigned int i = 0; i < num_primitives; ++i) {
165 for (
unsigned int i = 0; i < num_primitives; ++i) {
176 unsigned int num_primitives) {
179 if (bv.width() >= bv.height() && bv.width() >= bv.depth())
181 else if (bv.height() >= bv.width() && bv.height() >= bv.depth())
185 std::vector<FCL_REAL> proj((
size_t)num_primitives);
188 for (
unsigned int i = 0; i < num_primitives; ++i) {
195 for (
unsigned int i = 0; i < num_primitives; ++i)
199 std::sort(proj.begin(), proj.end());
201 if (num_primitives % 2 == 1) {
205 (proj[num_primitives / 2] + proj[num_primitives / 2 - 1]) / 2;
224 const OBB& bv,
unsigned int* primitive_indices,
225 unsigned int num_primitives);
229 const OBB& bv,
unsigned int* primitive_indices,
230 unsigned int num_primitives);
234 const OBB& bv,
unsigned int* primitive_indices,
235 unsigned int num_primitives);
239 const RSS& bv,
unsigned int* primitive_indices,
240 unsigned int num_primitives);
244 const RSS& bv,
unsigned int* primitive_indices,
245 unsigned int num_primitives);
249 const RSS& bv,
unsigned int* primitive_indices,
250 unsigned int num_primitives);
254 const kIOS& bv,
unsigned int* primitive_indices,
255 unsigned int num_primitives);
259 const kIOS& bv,
unsigned int* primitive_indices,
260 unsigned int num_primitives);
264 const kIOS& bv,
unsigned int* primitive_indices,
265 unsigned int num_primitives);
269 const OBBRSS& bv,
unsigned int* primitive_indices,
270 unsigned int num_primitives);
274 const OBBRSS& bv,
unsigned int* primitive_indices,
275 unsigned int num_primitives);
279 const OBBRSS& bv,
unsigned int* primitive_indices,
280 unsigned int num_primitives);
Eigen::Matrix< FCL_REAL, 3, 1 > Vec3f
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.
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.
Triangle * tri_indices
The triangles handled by the splitter.
void clear()
Clear the geometry data set before.
Vec3f * vertices
The mesh vertices or points handled by the splitter.
BVHModelType type
Whether the geometry is mesh or point cloud.
@ BVH_MODEL_TRIANGLES
unknown model type
SplitMethodType
Three types of split algorithms are provided in FCL as default.
BVHModelType
BVH model type.
BVSplitter(SplitMethodType method)
FCL_REAL split_value
The split threshold, different primitives are splitted according whether their projection on the spli...
virtual ~BVSplitter()
Default deconstructor.
SplitMethodType split_method
The split algorithm used.
void set(Vec3f *vertices_, Triangle *tri_indices_, BVHModelType type_)
Set the geometry data needed by the split rule.
void computeRule_bvcenter(const BV &bv, unsigned int *, unsigned int)
Split algorithm 1: Split the node from center.
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.
int split_axis
The axis based on which the split decision is made. For most BV, the axis is aligned with one of the ...
Triangle with 3 indices for points.
@ BVH_MODEL_POINTCLOUD
triangle model
bool apply(const Vec3f &q) const
Apply the split rule on a given point.
hpp-fcl
Author(s):
autogenerated on Fri Aug 2 2024 02:45:13