Commit e64e9ca7 authored by Joseph Mirabel's avatar Joseph Mirabel
Browse files

Clean TraversalNodeBase hierarchy.

parent fc5c10aa
......@@ -54,41 +54,46 @@ namespace fcl
class TraversalNodeBase
{
public:
virtual ~TraversalNodeBase();
TraversalNodeBase () : enable_statistics(false) {}
virtual ~TraversalNodeBase() {}
virtual void preprocess() {}
virtual void postprocess() {}
/// @brief Whether b is a leaf node in the first BVH tree
virtual bool isFirstNodeLeaf(int b) const;
virtual bool isFirstNodeLeaf(int /*b*/) const { return true; }
/// @brief Whether b is a leaf node in the second BVH tree
virtual bool isSecondNodeLeaf(int b) const;
virtual bool isSecondNodeLeaf(int /*b*/) const { return true; }
/// @brief Traverse the subtree of the node in the first tree first
virtual bool firstOverSecond(int b1, int b2) const;
virtual bool firstOverSecond(int /*b1*/, int /*b2*/) const { return true; }
/// @brief Get the left child of the node b in the first tree
virtual int getFirstLeftChild(int b) const;
virtual int getFirstLeftChild(int b) const { return b; }
/// @brief Get the right child of the node b in the first tree
virtual int getFirstRightChild(int b) const;
virtual int getFirstRightChild(int b) const { return b; }
/// @brief Get the left child of the node b in the second tree
virtual int getSecondLeftChild(int b) const;
virtual int getSecondLeftChild(int b) const { return b; }
/// @brief Get the right child of the node b in the second tree
virtual int getSecondRightChild(int b) const;
virtual int getSecondRightChild(int b) const { return b; }
/// @brief Enable statistics (verbose mode)
virtual void enableStatistics(bool enable) = 0;
/// @brief Whether store some statistics information during traversal
void enableStatistics(bool enable) { enable_statistics = enable; }
/// @brief configuation of first object
Transform3f tf1;
/// @brief configuration of second object
Transform3f tf2;
/// @brief Whether stores statistics
bool enable_statistics;
};
/// @defgroup Traversal_For_Collision
......@@ -100,9 +105,9 @@ class CollisionTraversalNodeBase : public TraversalNodeBase
{
public:
CollisionTraversalNodeBase (const CollisionRequest& request_) :
request (request_), result(NULL), enable_statistics(false) {}
request (request_), result(NULL) {}
virtual ~CollisionTraversalNodeBase();
virtual ~CollisionTraversalNodeBase() {}
/// @brief BV test between b1 and b2
virtual bool BVDisjoints(int b1, int b2) const = 0;
......@@ -120,10 +125,7 @@ public:
}
/// @brief Check whether the traversal can stop
virtual bool canStop() const;
/// @brief Whether store some statistics information during traversal
void enableStatistics(bool enable) { enable_statistics = enable; }
bool canStop() const { return this->request.isSatisfied(*(this->result)); }
/// @brief request setting for collision
const CollisionRequest& request;
......@@ -145,32 +147,30 @@ public:
class DistanceTraversalNodeBase : public TraversalNodeBase
{
public:
DistanceTraversalNodeBase() : result(NULL), enable_statistics(false) {}
DistanceTraversalNodeBase() : result(NULL) {}
virtual ~DistanceTraversalNodeBase();
virtual ~DistanceTraversalNodeBase() {}
/// @brief BV test between b1 and b2
/// @return a lower bound of the distance between the two BV.
/// @note except for OBB, this method returns the distance.
virtual FCL_REAL BVDistanceLowerBound(int b1, int b2) const;
virtual FCL_REAL BVDistanceLowerBound(int /*b1*/, int /*b2*/) const
{
return std::numeric_limits<FCL_REAL>::max();
}
/// @brief Leaf test between node b1 and b2, if they are both leafs
virtual void leafComputeDistance(int b1, int b2) const = 0;
/// @brief Check whether the traversal can stop
virtual bool canStop(FCL_REAL c) const;
/// @brief Whether store some statistics information during traversal
void enableStatistics(bool enable) { enable_statistics = enable; }
virtual bool canStop(FCL_REAL /*c*/) const
{ return false; }
/// @brief request setting for distance
DistanceRequest request;
/// @brief distance result kept during the traversal iteration
DistanceResult* result;
/// @brief Whether stores statistics
bool enable_statistics;
};
///@}
......
......@@ -253,12 +253,6 @@ public:
assert (!this->result->isCollision () || sqrDistLowerBound > 0);
}
/// @brief Whether the traversal process can stop early
bool canStop() const
{
return this->request.isSatisfied(*(this->result));
}
Vec3f* vertices;
Triangle* tri_indices;
......@@ -366,12 +360,6 @@ public:
assert (!this->result->isCollision () || sqrDistLowerBound > 0);
}
/// @brief Whether the traversal process can stop early
bool canStop() const
{
return this->request.isSatisfied(*(this->result));
}
Vec3f* vertices;
Triangle* tri_indices;
......
......@@ -252,12 +252,6 @@ public:
}
}
/// @brief Whether the traversal process can stop early
bool canStop() const
{
return this->request.isSatisfied(*(this->result));
}
Vec3f* vertices1;
Vec3f* vertices2;
......
......@@ -66,10 +66,7 @@ set(${LIBRARY_NAME}_SOURCES
distance_sphere_plane.cpp
intersect.cpp
math/transform.cpp
traversal/traversal_node_setup.cpp
traversal/traversal_node_bvhs.cpp
traversal/traversal_recurse.cpp
traversal/traversal_node_base.cpp
profile.cpp
distance.cpp
BVH/BVH_utility.cpp
......
/*
* Software License Agreement (BSD License)
*
* Copyright (c) 2011-2014, Willow Garage, Inc.
* Copyright (c) 2014-2015, Open Source Robotics Foundation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Open Source Robotics Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/** \author Jia Pan */
#include <hpp/fcl/internal/traversal_node_base.h>
#include <limits>
namespace hpp
{
namespace fcl
{
TraversalNodeBase::~TraversalNodeBase()
{
}
bool TraversalNodeBase::isFirstNodeLeaf(int /*b*/) const
{
return true;
}
bool TraversalNodeBase::isSecondNodeLeaf(int /*b*/) const
{
return true;
}
bool TraversalNodeBase::firstOverSecond(int /*b1*/, int /*b2*/) const
{
return true;
}
int TraversalNodeBase::getFirstLeftChild(int b) const
{
return b;
}
int TraversalNodeBase::getFirstRightChild(int b) const
{
return b;
}
int TraversalNodeBase::getSecondLeftChild(int b) const
{
return b;
}
int TraversalNodeBase::getSecondRightChild(int b) const
{
return b;
}
CollisionTraversalNodeBase::~CollisionTraversalNodeBase()
{
}
bool CollisionTraversalNodeBase::canStop() const
{
return false;
}
DistanceTraversalNodeBase::~DistanceTraversalNodeBase()
{
}
FCL_REAL DistanceTraversalNodeBase::BVDistanceLowerBound(int /*b1*/, int /*b2*/) const
{
return std::numeric_limits<FCL_REAL>::max();
}
bool DistanceTraversalNodeBase::canStop(FCL_REAL /*c*/) const
{
return false;
}
}
} // namespace hpp
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment