broadphase_collision_manager.hh
Go to the documentation of this file.
1 //
2 // Software License Agreement (BSD License)
3 //
4 // Copyright (c) 2022 INRIA
5 // Author: Justin Carpentier
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 INRIA 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 #ifndef HPP_FCL_PYTHON_BROADPHASE_BROADPHASE_COLLISION_MANAGER_HH
36 #define HPP_FCL_PYTHON_BROADPHASE_BROADPHASE_COLLISION_MANAGER_HH
37 
38 #include <eigenpy/eigenpy.hpp>
39 
40 #include <hpp/fcl/fwd.hh>
43 
44 #include "../fcl.hh"
45 
46 #ifdef HPP_FCL_HAS_DOXYGEN_AUTODOC
47 #include "doxygen_autodoc/functions.h"
48 #include "doxygen_autodoc/hpp/fcl/broadphase/broadphase_collision_manager.h"
49 #endif
50 
51 #include <boost/algorithm/string/replace.hpp>
52 #include <boost/type_index.hpp>
53 
54 namespace hpp {
55 namespace fcl {
56 
59  bp::wrapper<BroadPhaseCollisionManager> {
61 
62  void registerObjects(const std::vector<CollisionObject *> &other_objs) {
63  this->get_override("registerObjects")(other_objs);
64  }
66  this->get_override("registerObjects")(obj);
67  }
69  this->get_override("unregisterObject")(obj);
70  }
71 
72  void update(const std::vector<CollisionObject *> &other_objs) {
73  this->get_override("update")(other_objs);
74  }
75  void update(CollisionObject *obj) { this->get_override("update")(obj); }
76  void update() { this->get_override("update")(); }
77 
78  void setup() { this->get_override("setup")(); }
79  void clear() { this->get_override("clear")(); }
80 
81  std::vector<CollisionObject *> getObjects() const {
82 #pragma GCC diagnostic push
83 #pragma GCC diagnostic ignored "-Wconversion"
84  return this->get_override("getObjects")();
85 #pragma GCC diagnostic pop
86  }
87 
89  this->get_override("collide")(callback);
90  }
92  this->get_override("collide")(obj, callback);
93  }
94  void collide(BroadPhaseCollisionManager *other_manager,
96  this->get_override("collide")(other_manager, callback);
97  }
98 
100  this->get_override("distance")(callback);
101  }
103  this->get_override("collide")(obj, callback);
104  }
107  this->get_override("collide")(other_manager, callback);
108  }
109 
110  bool empty() const {
111 #pragma GCC diagnostic push
112 #pragma GCC diagnostic ignored "-Wconversion"
113  return this->get_override("empty")();
114 #pragma GCC diagnostic pop
115  }
116  size_t size() const {
117 #pragma GCC diagnostic push
118 #pragma GCC diagnostic ignored "-Wconversion"
119  return this->get_override("size")();
120 #pragma GCC diagnostic pop
121  }
122 
123  static void expose() {
124  bp::class_<BroadPhaseCollisionManagerWrapper, boost::noncopyable>(
125  "BroadPhaseCollisionManager", bp::no_init)
126  .def("registerObjects", bp::pure_virtual(&Base::registerObjects),
128  bp::with_custodian_and_ward_postcall<1, 2>())
129  .def("registerObject", bp::pure_virtual(&Base::registerObject),
131  bp::with_custodian_and_ward_postcall<1, 2>())
132  .def("unregisterObject", bp::pure_virtual(&Base::unregisterObject),
134 
135  .def("update", bp::pure_virtual((void(Base::*)()) & Base::update),
137  .def("update",
138  bp::pure_virtual(
139  (void(Base::*)(const std::vector<CollisionObject *> &)) &
140  Base::update),
141  doxygen::member_func_doc((void(Base::*)(
142  const std::vector<CollisionObject *> &))(&Base::update)),
143  bp::with_custodian_and_ward_postcall<1, 2>())
144  .def("update",
145  bp::pure_virtual((void(Base::*)(CollisionObject * obj)) &
146  Base::update),
148  (void(Base::*)(CollisionObject * obj))(&Base::update)),
149  bp::with_custodian_and_ward_postcall<1, 2>())
150 
151  .def("setup", bp::pure_virtual(&Base::setup),
153  .def("clear", bp::pure_virtual(&Base::clear),
155  .def("empty", bp::pure_virtual(&Base::empty),
157  .def("size", bp::pure_virtual(&Base::size),
159 
160  .def(
161  "getObjects",
162  bp::pure_virtual((std::vector<CollisionObject *>(Base::*)() const) &
165  (std::vector<CollisionObject *>(Base::*)() const) &
167  bp::with_custodian_and_ward_postcall<0, 1>())
168 
169  .def(
170  "collide",
171  bp::pure_virtual((void(Base::*)(CollisionCallBackBase *) const) &
172  Base::collide),
174  (void(Base::*)(CollisionCallBackBase *) const) & Base::collide))
175  .def("collide",
176  bp::pure_virtual((void(Base::*)(CollisionObject *,
177  CollisionCallBackBase *) const) &
178  Base::collide),
181  const) &
182  Base::collide))
183  .def("collide",
184  bp::pure_virtual((void(Base::*)(BroadPhaseCollisionManager *,
185  CollisionCallBackBase *) const) &
186  Base::collide),
188  (void(Base::*)(BroadPhaseCollisionManager *,
189  CollisionCallBackBase *) const) &
190  Base::collide))
191 
192  .def(
193  "distance",
194  bp::pure_virtual((void(Base::*)(DistanceCallBackBase *) const) &
197  (void(Base::*)(DistanceCallBackBase *) const) & Base::distance))
198  .def("distance",
199  bp::pure_virtual((void(Base::*)(CollisionObject *,
200  DistanceCallBackBase *) const) &
204  const) &
206  .def("distance",
207  bp::pure_virtual((void(Base::*)(BroadPhaseCollisionManager *,
208  DistanceCallBackBase *) const) &
211  (void(Base::*)(BroadPhaseCollisionManager *,
212  DistanceCallBackBase *) const) &
213  Base::distance));
214  }
215 
216  template <typename Derived>
217  static void exposeDerived() {
218  std::string class_name = boost::typeindex::type_id<Derived>().pretty_name();
219  boost::algorithm::replace_all(class_name, "hpp::fcl::", "");
220 #if defined(WIN32)
221  boost::algorithm::replace_all(class_name, "class ", "");
222 #endif
223 
224  bp::class_<Derived, bp::bases<BroadPhaseCollisionManager> >(
225  class_name.c_str(), bp::no_init)
226  .def(dv::init<Derived>());
227  }
228 
229 }; // BroadPhaseCollisionManagerWrapper
230 
231 } // namespace fcl
232 } // namespace hpp
233 
234 #endif // ifndef HPP_FCL_PYTHON_BROADPHASE_BROADPHASE_COLLISION_MANAGER_HH
hpp::fcl::BroadPhaseCollisionManagerWrapper::registerObject
void registerObject(CollisionObject *obj)
add one object to the manager
Definition: broadphase_collision_manager.hh:65
hpp::fcl::BroadPhaseCollisionManagerWrapper::getObjects
std::vector< CollisionObject * > getObjects() const
return the objects managed by the manager
Definition: broadphase_collision_manager.hh:81
collision_manager.callback
callback
Definition: collision_manager.py:27
hpp::fcl::BroadPhaseCollisionManagerWrapper::clear
void clear()
clear the manager
Definition: broadphase_collision_manager.hh:79
eigenpy.hpp
hpp::fcl::BroadPhaseCollisionManagerWrapper::exposeDerived
static void exposeDerived()
Definition: broadphase_collision_manager.hh:217
hpp::fcl::BroadPhaseCollisionManagerWrapper::update
void update(const std::vector< CollisionObject * > &other_objs)
update the manager by explicitly given the set of objects update
Definition: broadphase_collision_manager.hh:72
hpp::fcl::BroadPhaseCollisionManagerWrapper::expose
static void expose()
Definition: broadphase_collision_manager.hh:123
default_broadphase_callbacks.h
broadphase_collision_manager.h
hpp::fcl::BroadPhaseCollisionManager::setup
virtual void setup()=0
initialize the manager, related with the specific type of manager
hpp::fcl::BroadPhaseCollisionManagerWrapper::setup
void setup()
initialize the manager, related with the specific type of manager
Definition: broadphase_collision_manager.hh:78
hpp::fcl::BroadPhaseCollisionManagerWrapper::Base
BroadPhaseCollisionManager Base
Definition: broadphase_collision_manager.hh:60
doxygen::def
void def(const char *name, Func func)
Definition: doxygen-boost.hh:106
hpp::fcl::BroadPhaseCollisionManager
Base class for broad phase collision. It helps to accelerate the collision/distance between N objects...
Definition: broadphase_collision_manager.h:54
hpp::fcl::BroadPhaseCollisionManagerWrapper::distance
void distance(BroadPhaseCollisionManager *other_manager, DistanceCallBackBase *callback) const
perform distance test with objects belonging to another manager
Definition: broadphase_collision_manager.hh:105
hpp::fcl::BroadPhaseCollisionManagerWrapper
Definition: broadphase_collision_manager.hh:57
hpp::fcl::DistanceCallBackBase
Base callback class for distance queries. This class can be supersed by child classes to provide desi...
Definition: broadphase_callbacks.h:73
hpp::fcl::BroadPhaseCollisionManagerWrapper::unregisterObject
void unregisterObject(CollisionObject *obj)
remove one object from the manager
Definition: broadphase_collision_manager.hh:68
hpp::fcl::BroadPhaseCollisionManagerWrapper::distance
void distance(DistanceCallBackBase *callback) const
perform distance test for the objects belonging to the manager (i.e., N^2 self distance)
Definition: broadphase_collision_manager.hh:99
hpp::fcl::BroadPhaseCollisionManager::registerObject
virtual void registerObject(CollisionObject *obj)=0
add one object to the manager
hpp::fcl::BroadPhaseCollisionManagerWrapper::collide
void collide(CollisionCallBackBase *callback) const
perform collision test for the objects belonging to the manager (i.e., N^2 self collision)
Definition: broadphase_collision_manager.hh:88
hpp::fcl::BroadPhaseCollisionManager::getObjects
virtual std::vector< CollisionObject * > getObjects() const
return the objects managed by the manager
Definition: broadphase_collision_manager.h:88
hpp
Main namespace.
Definition: broadphase_bruteforce.h:44
hpp::fcl::CollisionObject
the object for collision or distance computation, contains the geometry and the transform information
Definition: collision_object.h:215
hpp::fcl::BroadPhaseCollisionManagerWrapper::registerObjects
void registerObjects(const std::vector< CollisionObject * > &other_objs)
add objects to the manager
Definition: broadphase_collision_manager.hh:62
hpp::fcl::BroadPhaseCollisionManager::update
virtual void update()=0
update the condition of manager
hpp::fcl::BroadPhaseCollisionManager::size
virtual size_t size() const =0
the number of objects managed by the manager
hpp::fcl::BroadPhaseCollisionManagerWrapper::update
void update()
update the condition of manager
Definition: broadphase_collision_manager.hh:76
hpp::fcl::BroadPhaseCollisionManagerWrapper::empty
bool empty() const
whether the manager is empty
Definition: broadphase_collision_manager.hh:110
hpp::fcl::BroadPhaseCollisionManagerWrapper::update
void update(CollisionObject *obj)
update the manager by explicitly given the object updated
Definition: broadphase_collision_manager.hh:75
hpp::fcl::BroadPhaseCollisionManager::collide
virtual void collide(CollisionObject *obj, CollisionCallBackBase *callback) const =0
perform collision test between one object and all the objects belonging to the manager
hpp::fcl::BroadPhaseCollisionManager::empty
virtual bool empty() const =0
whether the manager is empty
hpp::fcl::BroadPhaseCollisionManager::unregisterObject
virtual void unregisterObject(CollisionObject *obj)=0
remove one object from the manager
hpp::fcl::BroadPhaseCollisionManager::distance
virtual void distance(CollisionObject *obj, DistanceCallBackBase *callback) const =0
perform distance computation between one object and all the objects belonging to the manager
fwd.hh
hpp::fcl::CollisionCallBackBase
Base callback class for collision queries. This class can be supersed by child classes to provide des...
Definition: broadphase_callbacks.h:50
hpp::fcl::BroadPhaseCollisionManagerWrapper::distance
void distance(CollisionObject *obj, DistanceCallBackBase *callback) const
perform distance computation between one object and all the objects belonging to the manager
Definition: broadphase_collision_manager.hh:102
hpp::fcl::BroadPhaseCollisionManager::clear
virtual void clear()=0
clear the manager
hpp::fcl::BroadPhaseCollisionManager::registerObjects
virtual void registerObjects(const std::vector< CollisionObject * > &other_objs)
add objects to the manager
Definition: broadphase_collision_manager.cpp:55
hpp::fcl::BroadPhaseCollisionManagerWrapper::collide
void collide(BroadPhaseCollisionManager *other_manager, CollisionCallBackBase *callback) const
perform collision test with objects belonging to another manager
Definition: broadphase_collision_manager.hh:94
hpp::fcl::BroadPhaseCollisionManagerWrapper::collide
void collide(CollisionObject *obj, CollisionCallBackBase *callback) const
perform collision test between one object and all the objects belonging to the manager
Definition: broadphase_collision_manager.hh:91
doxygen::member_func_doc
const char * member_func_doc(FuncPtr)
Definition: doxygen.hh:33
hpp::fcl::BroadPhaseCollisionManagerWrapper::size
size_t size() const
the number of objects managed by the manager
Definition: broadphase_collision_manager.hh:116


hpp-fcl
Author(s):
autogenerated on Fri Aug 2 2024 02:45:12