pinocchio  3.7.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
 
Loading...
Searching...
No Matches
broadphase-manager.hpp
1//
2// Copyright (c) 2022 INRIA
3//
4
5#ifndef __pinocchio_python_collision_pool_broadphase_manager_hpp__
6#define __pinocchio_python_collision_pool_broadphase_manager_hpp__
7
8#include <eigenpy/eigen-to-python.hpp>
9
10#include "pinocchio/collision/pool/broadphase-manager.hpp"
11
12#include <boost/python/overloads.hpp>
13#include <boost/algorithm/string/replace.hpp>
14#include <eigenpy/memory.hpp>
15#include <eigenpy/exception.hpp>
16
17#include "pinocchio/algorithm/check.hpp"
18#include "pinocchio/bindings/python/utils/copyable.hpp"
19#include "pinocchio/bindings/python/utils/std-vector.hpp"
20
21namespace pinocchio
22{
23 namespace python
24 {
25 namespace bp = boost::python;
26
27 namespace helper
28 {
29 template<typename BroadPhaseManager>
31 {
32 static std::string get();
33 };
34
35 template<typename Manager>
37 {
38 static std::string get()
39 {
40 return "BroadPhaseManager";
41 }
42 };
43
44 template<typename Manager>
46 {
47 static std::string get()
48 {
49 return "TreeBroadPhaseManager";
50 }
51 };
52 } // namespace helper
53
54 template<typename BroadPhaseManagerPool>
55 struct BroadPhaseManagerPoolPythonVisitor
56 : public bp::def_visitor<BroadPhaseManagerPoolPythonVisitor<BroadPhaseManagerPool>>
57 {
58
59 typedef typename BroadPhaseManagerPool::Base Base;
60 typedef typename BroadPhaseManagerPool::Model Model;
61 typedef typename BroadPhaseManagerPool::GeometryModel GeometryModel;
62 typedef typename BroadPhaseManagerPool::GeometryData GeometryData;
63 typedef typename BroadPhaseManagerPool::BroadPhaseManagerVector BroadPhaseManagerVector;
64 typedef typename BroadPhaseManagerPool::BroadPhaseManager BroadPhaseManager;
65 typedef typename BroadPhaseManager::Manager Manager;
66
67 /* --- Exposing C++ API to python through the handler ----------------- */
68 template<class PyClass>
69 void visit(PyClass & cl) const
70 {
71 cl.def(bp::init<const Model &, const GeometryModel &, bp::optional<size_t>>(
72 bp::args("self", "model", "geometry_model", "size"), "Default constructor."))
73 .def(
74 bp::init<const BroadPhaseManagerPool &>(bp::args("self", "other"), "Copy constructor."))
75
76 .def(
77 "getBroadPhaseManager",
78 (BroadPhaseManager & (BroadPhaseManagerPool::*)(const size_t))
79 & BroadPhaseManagerPool::getBroadPhaseManager,
80 bp::args("self", "index"), "Return a specific broadphase manager.",
82 .def(
83 "getBroadPhaseManagers",
84 (BroadPhaseManagerVector & (BroadPhaseManagerPool::*)())
85 & BroadPhaseManagerPool::getBroadPhaseManagers,
86 bp::arg("self"), "Returns the vector of broadphase managers.",
88
89 .def(
90 "update",
92 bp::args("self", "geometry_data"),
93 "Update all the geometry datas with the input geometry data value.")
94
95 .def(
96 "check", &BroadPhaseManagerPool::check, bp::arg("self"),
97 "Check whether the current pool is valid.")
98
99 .def(
100 "asGeometryPool", downcast, bp::arg("self"),
101 "Cast the object as GeometryPool (equivalent to a C++ static_cast).",
102 bp::return_self<>());
103 }
104
105 static PyObject * downcast(BroadPhaseManagerPool & self)
106 {
107 bp::type_info type = bp::type_id<Base>();
108 const bp::converter::registration * registration = bp::converter::registry::query(type);
109
110 return registration->to_python(static_cast<Base *>(&self));
111 }
112
113 static void expose()
114 {
115 std::string manager_name = boost::typeindex::type_id<Manager>().pretty_name();
116 boost::algorithm::replace_all(manager_name, "hpp::fcl::", "");
117 const std::string broadphase_prefix = helper::base_class_name<BroadPhaseManager>::get();
118 const std::string class_name = broadphase_prefix + "Pool" + "_" + manager_name;
119
120 const std::string doc = "Pool containing a bunch of " + broadphase_prefix + ".";
121
122 bp::class_<BroadPhaseManagerPool, bp::bases<Base>>(
123 class_name.c_str(), doc.c_str(), bp::no_init)
124 .def(BroadPhaseManagerPoolPythonVisitor())
125 .def(CopyableVisitor<BroadPhaseManagerPool>());
126
127 const std::string vector_name = "StdVec_" + broadphase_prefix + "_" + manager_name;
128 StdVectorPythonVisitor<BroadPhaseManagerVector>::expose(vector_name);
129 }
130 };
131 } // namespace python
132} // namespace pinocchio
133
134#endif // ifnded __pinocchio_python_collision_pool_broadphase_manager_hpp__
Main pinocchio namespace.
Definition treeview.dox:11