Go to the documentation of this file.
38 #ifndef FCL_TRAVERSAL_RECURSE_INL_H
39 #define FCL_TRAVERSAL_RECURSE_INL_H
113 if(node->
canStop() && !front_list)
return;
125 if(node->
canStop() && !front_list)
return;
132 template <
typename S>
143 if(node->
BVTesting(b1, b2, R, T))
return;
171 if(node->
canStop() && !front_list)
return;
175 Rc.noalias() = R.transpose() * bv2.
axis;
177 Tc[0] = bv2.
axis.col(0).dot(temp);
178 Tc[1] = bv2.
axis.col(1).dot(temp);
179 Tc[2] = bv2.
axis.col(2).dot(temp);
190 temp.noalias() = R * bv1.
axis.col(0);
191 Rc(0, 0) = temp[0]; Rc(1, 0) = temp[1]; Rc(2, 0) = temp[2];
192 temp.noalias() = R * bv1.
axis.col(1);
193 Rc(0, 1) = temp[0]; Rc(1, 1) = temp[1]; Rc(2, 1) = temp[2];
194 temp.noalias() = R * bv1.
axis.col(2);
195 Rc(0, 2) = temp[0]; Rc(1, 2) = temp[1]; Rc(2, 2) = temp[2];
201 if(node->
canStop() && !front_list)
return;
204 temp.noalias() = R * bv2.
axis.col(0);
205 Rc(0, 0) = temp[0]; Rc(1, 0) = temp[1]; Rc(2, 0) = temp[2];
206 temp.noalias() = R * bv2.
axis.col(1);
207 Rc(0, 1) = temp[0]; Rc(1, 1) = temp[1]; Rc(2, 1) = temp[2];
208 temp.noalias() = R * bv2.
axis.col(2);
209 Rc(0, 2) = temp[0]; Rc(1, 2) = temp[1]; Rc(2, 2) = temp[2];
211 Tc.noalias() += R * bv2.
To;
218 template <
typename S>
236 template <
typename S>
248 if(node->
canStop() && !front_list)
return;
251 if(node->
canStop() && !front_list)
return;
257 template <
typename S>
320 template <
typename S>
332 template <
typename S>
337 return lhs.
d > rhs.
d;
342 template <
typename S>
374 return (pq.size() + 1 >= qsize);
384 template <
typename S>
422 bvt1.
b2 = min_test.
b2;
426 bvt2.
b2 = min_test.
b2;
433 bvt1.
b1 = min_test.
b1;
437 bvt2.
b1 = min_test.
b1;
450 min_test = bvtq.
top();
463 template <
typename S>
467 BVHFrontList::iterator front_iter;
469 for(front_iter = front_list->begin(); front_iter != front_list->end(); ++front_iter)
471 int b1 = front_iter->left;
472 int b2 = front_iter->right;
478 front_iter->valid =
false;
485 front_iter->valid =
false;
509 for(front_iter = front_list->begin(); front_iter != front_list->end();)
511 if(!front_iter->valid)
512 front_iter = front_list->erase(front_iter);
517 for(front_iter = append.begin(); front_iter != append.end(); ++front_iter)
519 front_list->push_back(*front_iter);
Matrix3< S > axis
Orientation of OBB. The axes of the rotation matrix are the principle directions of the box....
bool BVTesting(int b1, int b2) const
BV test between b1 and b2.
bool canStop() const
Whether the traversal process can stop early.
virtual int getFirstRightChild(int b) const
Get the right child of the node b in the first tree.
virtual bool canStop(S c) const
Check whether the traversal can stop.
const BVNode< BV > & getBV(int id) const
We provide getBV() and getNumBVs() because BVH may be compressed (in future), so we must provide some...
Node structure encoding the information required for distance traversal.
virtual bool BVTesting(int b1, int b2) const
BV test between b1 and b2.
BV bv
bounding volume storing the geometry
bool isSecondNodeLeaf(int b) const
Whether the BV node in the second BVH tree is leaf.
template class FCL_EXPORT DistanceTraversalNodeBase< double >
Bounding volume test structure.
void leafTesting(int b1, int b2) const
Leaf test between node b1 and b2, if they are both leafs.
int getSecondRightChild(int b) const
Obtain the right child of BV node in the second BVH.
virtual bool firstOverSecond(int b1, int b2) const
Traverse the subtree of the node in the first tree first.
template class FCL_EXPORT MeshCollisionTraversalNodeRSS< double >
virtual void leafTesting(int b1, int b2) const
Leaf test between node b1 and b2, if they are both leafs.
template class FCL_EXPORT MeshCollisionTraversalNodeOBB< double >
const BVHModel< OBB< S > > * model2
The second BVH model.
virtual int getSecondLeftChild(int b) const
Get the left child of the node b in the second tree.
Eigen::Matrix< S, 3, 1 > Vector3
unsigned int qsize
Queue size.
Eigen::Matrix< S, 3, 3 > Matrix3
int b1
bv indices for a pair of bvs in two models
template void selfCollisionRecurse(CollisionTraversalNodeBase< double > *node, int b, BVHFrontList *front_list)
virtual void leafTesting(int b1, int b2) const
Leaf test between node b1 and b2, if they are both leafs.
std::priority_queue< BVT< S >, std::vector< BVT< S > >, BVT_Comparer< S > > pq
FCL_EXPORT void updateFrontList(BVHFrontList *front_list, int b1, int b2)
Add new front node into the front list.
const BVHModel< OBB< S > > * model1
The first BVH model.
int getFirstRightChild(int b) const
Obtain the right child of BV node in the first BVH.
virtual int getFirstLeftChild(int b) const
Get the left child of the node b in the first tree.
virtual S BVTesting(int b1, int b2) const
BV test between b1 and b2.
const BVT< S > & top() const
virtual int getSecondRightChild(int b) const
Get the right child of the node b in the second tree.
Node structure encoding the information required for collision traversal.
void push(const BVT< S > &x)
template class FCL_EXPORT CollisionTraversalNodeBase< double >
template void propagateBVHFrontListCollisionRecurse(CollisionTraversalNodeBase< double > *node, BVHFrontList *front_list)
template void distanceRecurse(DistanceTraversalNodeBase< double > *node, int b1, int b2, BVHFrontList *front_list)
virtual bool canStop() const
Check whether the traversal can stop.
template void distanceQueueRecurse(DistanceTraversalNodeBase< double > *node, int b1, int b2, BVHFrontList *front_list, int qsize)
bool isFirstNodeLeaf(int b) const
Whether the BV node in the first BVH tree is leaf.
Comparer between two BVT.
bool firstOverSecond(int b1, int b2) const
Determine the traversal order, is the first BVTT subtree better.
virtual bool isSecondNodeLeaf(int b) const
Whether b is a leaf node in the second BVH tree.
virtual bool isFirstNodeLeaf(int b) const
Whether b is a leaf node in the first BVH tree.
std::list< BVHFrontNode > BVHFrontList
BVH front list is a list of front nodes.
int getSecondLeftChild(int b) const
Obtain the left child of BV node in the second BVH.
int getFirstLeftChild(int b) const
Obtain the left child of BV node in the first BVH.
Traversal node for collision between two meshes if their underlying BVH node is oriented node (OBB,...
Vector3< S > To
Center of OBB.
template void collisionRecurse(CollisionTraversalNodeBase< double > *node, int b1, int b2, BVHFrontList *front_list)
fcl
Author(s):
autogenerated on Tue Dec 5 2023 03:40:49