coal 3.0.1
Coal, The Collision Detection Library. Previously known as HPP-FCL, fork of FCL -- The Flexible Collision Library
Loading...
Searching...
No Matches
traversal_node_base.h
Go to the documentation of this file.
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2011-2014, Willow Garage, Inc.
5 * Copyright (c) 2014-2015, Open Source Robotics Foundation
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * * Neither the name of Open Source Robotics Foundation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 */
35
38#ifndef COAL_TRAVERSAL_NODE_BASE_H
39#define COAL_TRAVERSAL_NODE_BASE_H
40
42
43#include "coal/data_types.h"
44#include "coal/math/transform.h"
45#include "coal/collision_data.h"
46
47namespace coal {
48
50
51class TraversalNodeBase {
52 public:
53 TraversalNodeBase() : enable_statistics(false) {}
54
55 virtual ~TraversalNodeBase() {}
56
57 virtual void preprocess() {}
58
59 virtual void postprocess() {}
60
62 virtual bool isFirstNodeLeaf(unsigned int /*b*/) const { return true; }
63
65 virtual bool isSecondNodeLeaf(unsigned int /*b*/) const { return true; }
66
68 virtual bool firstOverSecond(unsigned int /*b1*/, unsigned int /*b2*/) const {
69 return true;
70 }
71
73 virtual int getFirstLeftChild(unsigned int b) const { return (int)b; }
74
76 virtual int getFirstRightChild(unsigned int b) const { return (int)b; }
77
79 virtual int getSecondLeftChild(unsigned int b) const { return (int)b; }
80
82 virtual int getSecondRightChild(unsigned int b) const { return (int)b; }
83
85 void enableStatistics(bool enable) { enable_statistics = enable; }
86
88 Transform3s tf1;
89
91 Transform3s tf2;
92
94 bool enable_statistics;
95};
96
100
103class CollisionTraversalNodeBase : public TraversalNodeBase {
104 public:
105 CollisionTraversalNodeBase(const CollisionRequest& request_)
106 : request(request_), result(NULL) {}
107
108 virtual ~CollisionTraversalNodeBase() {}
109
114 virtual bool BVDisjoints(unsigned int b1, unsigned int b2,
115 Scalar& sqrDistLowerBound) const = 0;
116
118 virtual void leafCollides(unsigned int /*b1*/, unsigned int /*b2*/,
119 Scalar& /*sqrDistLowerBound*/) const = 0;
120
122 bool canStop() const { return this->request.isSatisfied(*(this->result)); }
123
125 const CollisionRequest& request;
126
128 CollisionResult* result;
129};
130
132
136
139class DistanceTraversalNodeBase : public TraversalNodeBase {
140 public:
141 DistanceTraversalNodeBase() : result(NULL) {}
142
143 virtual ~DistanceTraversalNodeBase() {}
144
148 virtual Scalar BVDistanceLowerBound(unsigned int /*b1*/,
149 unsigned int /*b2*/) const {
150 return (std::numeric_limits<Scalar>::max)();
151 }
152
154 virtual void leafComputeDistance(unsigned int b1, unsigned int b2) const = 0;
155
157 virtual bool canStop(Scalar /*c*/) const { return false; }
158
160 DistanceRequest request;
161
163 DistanceResult* result;
164};
165
167
168} // namespace coal
169
171
172#endif
Main namespace.
Definition broadphase_bruteforce.h:44
double Scalar
Definition data_types.h:68