broadphase_SaP.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-2016, 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 FCL_BROAD_PHASE_SAP_H
39 #define FCL_BROAD_PHASE_SAP_H
40 
41 #include <map>
42 #include <list>
43 
45 
46 namespace fcl
47 {
48 
50 template <typename S>
51 class FCL_EXPORT SaPCollisionManager : public BroadPhaseCollisionManager<S>
52 {
53 public:
54 
56 
58 
60  void registerObjects(const std::vector<CollisionObject<S>*>& other_objs);
61 
63  void registerObject(CollisionObject<S>* obj);
64 
66  void unregisterObject(CollisionObject<S>* obj);
67 
69  void setup();
70 
72  void update();
73 
75  void update(CollisionObject<S>* updated_obj);
76 
78  void update(const std::vector<CollisionObject<S>*>& updated_objs);
79 
81  void clear();
82 
84  void getObjects(std::vector<CollisionObject<S>*>& objs) const;
85 
87  void collide(CollisionObject<S>* obj, void* cdata, CollisionCallBack<S> callback) const;
88 
90  void distance(CollisionObject<S>* obj, void* cdata, DistanceCallBack<S> callback) const;
91 
93  void collide(void* cdata, CollisionCallBack<S> callback) const;
94 
96  void distance(void* cdata, DistanceCallBack<S> callback) const;
97 
99  void collide(BroadPhaseCollisionManager<S>* other_manager, void* cdata, CollisionCallBack<S> callback) const;
100 
102  void distance(BroadPhaseCollisionManager<S>* other_manager, void* cdata, DistanceCallBack<S> callback) const;
103 
105  bool empty() const;
106 
108  size_t size() const;
109 
110 protected:
111 
113  struct SaPAABB;
114 
116  struct EndPoint;
117 
119  struct SaPPair;
120 
122  class FCL_EXPORT isUnregistered;
123 
125  class FCL_EXPORT isNotValidPair;
126 
127  void update_(SaPAABB* updated_aabb);
128 
129  void updateVelist();
130 
132  EndPoint* elist[3];
133 
135  std::vector<EndPoint*> velist[3];
136 
138  std::list<SaPAABB*> AABB_arr;
139 
141  std::list<SaPPair> overlap_pairs;
142 
143  size_t optimal_axis;
144 
145  std::map<CollisionObject<S>*, SaPAABB*> obj_aabb_map;
146 
147  bool distance_(CollisionObject<S>* obj, void* cdata, DistanceCallBack<S> callback, S& min_dist) const;
148 
149  bool collide_(CollisionObject<S>* obj, void* cdata, CollisionCallBack<S> callback) const;
150 
151  void addToOverlapPairs(const SaPPair& p);
152 
153  void removeFromOverlapPairs(const SaPPair& p);
154 };
155 
158 
160 template <typename S>
162 {
164  CollisionObject<S>* obj;
165 
167  typename SaPCollisionManager<S>::EndPoint* lo;
168 
170  typename SaPCollisionManager<S>::EndPoint* hi;
171 
173  AABB<S> cached;
174 };
175 
177 template <typename S>
179 {
181  char minmax;
182 
184  typename SaPCollisionManager<S>::SaPAABB* aabb;
185 
187  EndPoint* prev[3];
188 
190  EndPoint* next[3];
191 
193  const Vector3<S>& getVal() const;
194 
196  Vector3<S>& getVal();
197 
198  S getVal(size_t i) const;
199 
200  S& getVal(size_t i);
201 
202 };
203 
205 template <typename S>
207 {
209 
210  CollisionObject<S>* obj1;
211  CollisionObject<S>* obj2;
212 
213  bool operator == (const SaPPair& other) const;
214 };
215 
217 template <typename S>
218 class FCL_EXPORT SaPCollisionManager<S>::isUnregistered
219 {
221 
222 public:
223  isUnregistered(CollisionObject<S>* obj_);
224 
225  bool operator() (const SaPPair& pair) const;
226 };
227 
229 template <typename S>
230 class FCL_EXPORT SaPCollisionManager<S>::isNotValidPair
231 {
234 
235 public:
236  isNotValidPair(CollisionObject<S>* obj1_, CollisionObject<S>* obj2_);
237 
238  bool operator() (const SaPPair& pair);
239 };
240 
241 } // namespace fcl
242 
244 
245 #endif
fcl::SaPCollisionManager< S >::obj2
CollisionObject< S > * obj2
Definition: broadphase_SaP.h:233
fcl::SaPCollisionManager::optimal_axis
size_t optimal_axis
Definition: broadphase_SaP.h:143
obj2
CollisionObject< S > * obj2
Definition: broadphase_SaP.h:211
fcl::SaPCollisionManager::SaPAABB
SAP interval for one object.
Definition: broadphase_SaP.h:161
fcl::minmax
template void minmax(double a, double b, double &minv, double &maxv)
fcl::SaPCollisionManager::AABB_arr
std::list< SaPAABB * > AABB_arr
SAP interval list.
Definition: broadphase_SaP.h:138
fcl::distance
S distance(const Eigen::MatrixBase< DerivedA > &R0, const Eigen::MatrixBase< DerivedB > &T0, const kIOS< S > &b1, const kIOS< S > &b2, Vector3< S > *P, Vector3< S > *Q)
Approximate distance between two kIOS bounding volumes.
Definition: kIOS-inl.h:266
fcl::SaPCollisionManager::EndPoint
End point for an interval.
Definition: broadphase_SaP.h:178
testing::internal::operator==
bool operator==(T *ptr, const linked_ptr< T > &x)
Definition: gtest-linked_ptr.h:213
cached
AABB< S > cached
cached AABB value
Definition: broadphase_SaP.h:173
broadphase_SaP-inl.h
broadphase_collision_manager.h
obj1
CollisionObject< S > * obj1
Definition: broadphase_SaP.h:210
fcl::SaPCollisionManager::overlap_pairs
std::list< SaPPair > overlap_pairs
The pair of objects that should further check for collision.
Definition: broadphase_SaP.h:141
obj
CollisionObject< S > * obj
object
Definition: broadphase_SaP.h:164
fcl::DistanceCallBack
bool(*)(CollisionObject< S > *o1, CollisionObject< S > *o2, void *cdata, S &dist) DistanceCallBack
Callback for distance between two objects, Return value is whether can stop now, also return the mini...
Definition: broadphase_collision_manager.h:60
hi
SaPCollisionManager< S >::EndPoint * hi
higher bound end point of the interval
Definition: broadphase_SaP.h:170
fcl::CollisionCallBack
bool(*)(CollisionObject< S > *o1, CollisionObject< S > *o2, void *cdata) CollisionCallBack
Callback for collision between two objects. Return value is whether can stop now.
Definition: broadphase_collision_manager.h:53
prev
EndPoint * prev[3]
the previous end point in the end point list
Definition: broadphase_SaP.h:187
next
EndPoint * next[3]
the next end point in the end point list
Definition: broadphase_SaP.h:190
fcl::collide
template FCL_EXPORT std::size_t collide(const CollisionObject< double > *o1, const CollisionObject< double > *o2, const CollisionRequest< double > &request, CollisionResult< double > &result)
fcl::SaPCollisionManager::obj_aabb_map
std::map< CollisionObject< S > *, SaPAABB * > obj_aabb_map
Definition: broadphase_SaP.h:145
fcl::SaPCollisionManager< S >::obj
CollisionObject< S > * obj
Definition: broadphase_SaP.h:220
fcl::SaPCollisionManager::SaPPair
A pair of objects that are not culling away and should further check collision.
Definition: broadphase_SaP.h:206
lo
SaPCollisionManager< S >::EndPoint * lo
lower bound end point of the interval
Definition: broadphase_SaP.h:167
aabb
SaPCollisionManager< S >::SaPAABB * aabb
back pointer to SAP interval
Definition: broadphase_SaP.h:184
fcl::SaPCollisionManager< S >::obj1
CollisionObject< S > * obj1
Definition: broadphase_SaP.h:232
fcl::SaPCollisionManager
Rigorous SAP collision manager.
Definition: broadphase_SaP.h:51
fcl::CollisionObject
the object for collision or distance computation, contains the geometry and the transform information
Definition: collision_object.h:51
fcl
Main namespace.
Definition: broadphase_bruteforce-inl.h:45
fcl::BroadPhaseCollisionManager
Base class for broad phase collision. It helps to accelerate the collision/distance between N objects...
Definition: broadphase_collision_manager.h:66


fcl
Author(s):
autogenerated on Fri Apr 2 2021 02:37:59