From 931c66104d5948ff905d1b0a39f2d11b4fd34a9c Mon Sep 17 00:00:00 2001 From: zyi Date: Wed, 21 Aug 2024 10:03:20 +0200 Subject: [PATCH 1/3] fix issue #590 expose IdVisitor of all other collision geometries --- python/collision-geometries.cc | 40 +++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/python/collision-geometries.cc b/python/collision-geometries.cc index 57ebb1046..dee2c15eb 100644 --- a/python/collision-geometries.cc +++ b/python/collision-geometries.cc @@ -34,6 +34,7 @@ #include #include +#include #include "fcl.hh" #include "deprecation.hh" @@ -116,7 +117,8 @@ 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()) + .def(eigenpy::IdVisitor()); } template @@ -157,7 +159,8 @@ void exposeHeightField(const std::string& bvname) { Geometry::getBV), bp::return_internal_reference<>()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); } struct ConvexBaseWrapper { @@ -284,7 +287,8 @@ void exposeShapes() { .def("clone", &Box::clone, doxygen::member_func_doc(&Box::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr>( "Capsule", doxygen::class_doc(), no_init) @@ -296,7 +300,8 @@ void exposeShapes() { .def("clone", &Capsule::clone, doxygen::member_func_doc(&Capsule::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr>( "Cone", doxygen::class_doc(), no_init) @@ -308,7 +313,8 @@ void exposeShapes() { .def("clone", &Cone::clone, doxygen::member_func_doc(&Cone::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr, noncopyable>( "ConvexBase", doxygen::class_doc(), no_init) @@ -356,7 +362,8 @@ void exposeShapes() { .DEF_RO_CLASS_ATTRIB(Convex, num_polygons) .def("polygons", &ConvexWrapper::polygons) .def_pickle(PickleObject>()) - .def(SerializableVisitor>()); + .def(SerializableVisitor>()) + .def(eigenpy::IdVisitor>()); class_, shared_ptr>( "Cylinder", doxygen::class_doc(), no_init) @@ -369,7 +376,8 @@ void exposeShapes() { doxygen::member_func_doc(&Cylinder::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr>( "Halfspace", doxygen::class_doc(), no_init) @@ -383,7 +391,8 @@ void exposeShapes() { doxygen::member_func_doc(&Halfspace::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr>( "Plane", doxygen::class_doc(), no_init) @@ -396,7 +405,8 @@ void exposeShapes() { .def("clone", &Plane::clone, doxygen::member_func_doc(&Plane::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr>( "Sphere", doxygen::class_doc(), no_init) @@ -407,7 +417,8 @@ void exposeShapes() { .def("clone", &Sphere::clone, doxygen::member_func_doc(&Sphere::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr>( "Ellipsoid", doxygen::class_doc(), no_init) @@ -420,7 +431,8 @@ void exposeShapes() { doxygen::member_func_doc(&Ellipsoid::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); class_, shared_ptr>( "TriangleP", doxygen::class_doc(), no_init) @@ -434,7 +446,8 @@ void exposeShapes() { doxygen::member_func_doc(&TriangleP::clone), return_value_policy()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); } boost::python::tuple AABB_distance_proxy(const AABB& self, const AABB& other) { @@ -584,7 +597,8 @@ void exposeCollisionGeometries() { // (AABB::*)(const Vec3f &)>(&AABB::expand)), bp::return_internal_reference<>()) .def_pickle(PickleObject()) - .def(SerializableVisitor()); + .def(SerializableVisitor()) + .def(eigenpy::IdVisitor()); def("translate", (AABB(*)(const AABB&, const Vec3f&)) & translate, bp::args("aabb", "t"), "Translate the center of AABB by t"); From c144d4812732793319d5a2d176a57ba3d9fc0bde Mon Sep 17 00:00:00 2001 From: zyi Date: Wed, 21 Aug 2024 14:13:33 +0200 Subject: [PATCH 2/3] expose IdVisitor only if eigenpy>=3.8.0 available fix eigenpy/id.hpp not found --- python/collision-geometries.cc | 68 +++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/python/collision-geometries.cc b/python/collision-geometries.cc index dee2c15eb..256ad6bbc 100644 --- a/python/collision-geometries.cc +++ b/python/collision-geometries.cc @@ -34,8 +34,9 @@ #include #include +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) #include - +#endif #include "fcl.hh" #include "deprecation.hh" @@ -118,7 +119,10 @@ void exposeBVHModel(const std::string& bvname) { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; } template @@ -160,7 +164,10 @@ void exposeHeightField(const std::string& bvname) { bp::return_internal_reference<>()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; } struct ConvexBaseWrapper { @@ -288,7 +295,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Capsule", doxygen::class_doc(), no_init) @@ -301,7 +311,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Cone", doxygen::class_doc(), no_init) @@ -314,7 +327,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr, noncopyable>( "ConvexBase", doxygen::class_doc(), no_init) @@ -363,7 +379,10 @@ void exposeShapes() { .def("polygons", &ConvexWrapper::polygons) .def_pickle(PickleObject>()) .def(SerializableVisitor>()) - .def(eigenpy::IdVisitor>()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor>()) +#endif + ; class_, shared_ptr>( "Cylinder", doxygen::class_doc(), no_init) @@ -377,7 +396,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Halfspace", doxygen::class_doc(), no_init) @@ -392,7 +414,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Plane", doxygen::class_doc(), no_init) @@ -406,7 +431,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Sphere", doxygen::class_doc(), no_init) @@ -418,7 +446,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "Ellipsoid", doxygen::class_doc(), no_init) @@ -432,7 +463,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; class_, shared_ptr>( "TriangleP", doxygen::class_doc(), no_init) @@ -447,7 +481,10 @@ void exposeShapes() { return_value_policy()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#if EIGENPY_VERSION_AT_LEAST(3, 8, 0) + .def(eigenpy::IdVisitor()) +#endif + ; } boost::python::tuple AABB_distance_proxy(const AABB& self, const AABB& other) { @@ -598,7 +635,10 @@ void exposeCollisionGeometries() { bp::return_internal_reference<>()) .def_pickle(PickleObject()) .def(SerializableVisitor()) - .def(eigenpy::IdVisitor()); +#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"); From ccba515394f8e417165405fd74862a53da16ae97 Mon Sep 17 00:00:00 2001 From: Justin Carpentier Date: Wed, 21 Aug 2024 18:00:59 +0200 Subject: [PATCH 3/3] changelog: sync --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) 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