diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ff551c89..d3e4ab4df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Optimize EPA: ignore useless faces in EPA's polytope; warm-start support computation for `Convex`; fix edge-cases witness points computation. - Add `Serializable` trait to transform, collision data, collision geometries, bounding volumes, bvh models, hfields. Collision problems can now be serialized from C++ and sent to python and vice versa. - CMake: allow use of installed jrl-cmakemodules ([#564](https://github.com/humanoid-path-planner/hpp-fcl/pull/564)) +- Python: add id() support for geometries ([#618](https://github.com/humanoid-path-planner/hpp-fcl/pull/618)). ### Fixed diff --git a/python/collision-geometries.cc b/python/collision-geometries.cc index 57ebb1046..256ad6bbc 100644 --- a/python/collision-geometries.cc +++ b/python/collision-geometries.cc @@ -34,7 +34,9 @@ #include #include - +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) +#include +#endif #include "fcl.hh" #include "deprecation.hh" @@ -116,7 +118,11 @@ void exposeBVHModel(const std::string& bvname) { .def("clone", &BVH::clone, doxygen::member_func_doc(&BVH::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; } template @@ -157,7 +163,11 @@ void exposeHeightField(const std::string& bvname) { Geometry::getBV), bp::return_internal_reference<>()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; } struct ConvexBaseWrapper { @@ -284,7 +294,11 @@ void exposeShapes() { .def("clone", &Box::clone, doxygen::member_func_doc(&Box::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Capsule", doxygen::class_doc(), no_init) @@ -296,7 +310,11 @@ void exposeShapes() { .def("clone", &Capsule::clone, doxygen::member_func_doc(&Capsule::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Cone", doxygen::class_doc(), no_init) @@ -308,7 +326,11 @@ void exposeShapes() { .def("clone", &Cone::clone, doxygen::member_func_doc(&Cone::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr, noncopyable>( "ConvexBase", doxygen::class_doc(), no_init) @@ -356,7 +378,11 @@ void exposeShapes() { .DEF_RO_CLASS_ATTRIB(Convex, num_polygons) .def("polygons", &ConvexWrapper::polygons) .def_pickle(PickleObject>()) - .def(SerializableVisitor>()); + .def(SerializableVisitor>()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor>()) +#endif + ; class_, shared_ptr>( "Cylinder", doxygen::class_doc(), no_init) @@ -369,7 +395,11 @@ void exposeShapes() { doxygen::member_func_doc(&Cylinder::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Halfspace", doxygen::class_doc(), no_init) @@ -383,7 +413,11 @@ void exposeShapes() { doxygen::member_func_doc(&Halfspace::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Plane", doxygen::class_doc(), no_init) @@ -396,7 +430,11 @@ void exposeShapes() { .def("clone", &Plane::clone, doxygen::member_func_doc(&Plane::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Sphere", doxygen::class_doc(), no_init) @@ -407,7 +445,11 @@ void exposeShapes() { .def("clone", &Sphere::clone, doxygen::member_func_doc(&Sphere::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Ellipsoid", doxygen::class_doc(), no_init) @@ -420,7 +462,11 @@ void exposeShapes() { doxygen::member_func_doc(&Ellipsoid::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "TriangleP", doxygen::class_doc(), no_init) @@ -434,7 +480,11 @@ void exposeShapes() { doxygen::member_func_doc(&TriangleP::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; } boost::python::tuple AABB_distance_proxy(const AABB& self, const AABB& other) { @@ -584,7 +634,11 @@ void exposeCollisionGeometries() { // (AABB::*)(const Vec3f &)>(&AABB::expand)), bp::return_internal_reference<>()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; def("translate", (AABB(*)(const AABB&, const Vec3f&)) & translate, bp::args("aabb", "t"), "Translate the center of AABB by t");