From c7e55d79985086afabc52721128702e8529ad622 Mon Sep 17 00:00:00 2001 From: "Javier V. Gomez" <jvgomez@rapyuta-robotics.com> Date: Thu, 16 Jun 2016 17:19:38 +0200 Subject: [PATCH] Octomap <1.8.0 compatible but not working --- CMakeLists.txt | 5 +++++ include/hpp/fcl/math/vec_3f.h | 16 ++++++++++++++++ include/hpp/fcl/octree.h | 16 ++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c98f6819..db7ab249 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,11 @@ if (OCTOMAP_INCLUDE_DIRS AND OCTOMAP_LIBRARY_DIRS) include_directories(${OCTOMAP_INCLUDE_DIRS}) link_directories(${OCTOMAP_LIBRARY_DIRS}) set(FCL_HAVE_OCTOMAP 1) + string(REPLACE "." ";" VERSION_LIST ${OCTOMAP_VERSION}) + list(GET VERSION_LIST 0 OCTOMAP_MAJOR_VERSION) + list(GET VERSION_LIST 1 OCTOMAP_MINOR_VERSION) + list(GET VERSION_LIST 2 OCTOMAP_PATCH_VERSION) + message(STATUS "FCL uses Octomap") else() message(STATUS "FCL does not use Octomap") diff --git a/include/hpp/fcl/math/vec_3f.h b/include/hpp/fcl/math/vec_3f.h index 4322ecdb..cdd6d770 100644 --- a/include/hpp/fcl/math/vec_3f.h +++ b/include/hpp/fcl/math/vec_3f.h @@ -56,4 +56,20 @@ namespace fcl } +#if FCL_HAVE_OCTOMAP + #define OCTOMAP_MAJOR_VERSION @OCTOMAP_MAJOR_VERSION@ + #define OCTOMAP_MINOR_VERSION @OCTOMAP_MINOR_VERSION@ + #define OCTOMAP_PATCH_VERSION @OCTOMAP_PATCH_VERSION@ + + #define OCTOMAP_VERSION_AT_LEAST(x,y,z) \ + (OCTOMAP_MAJOR_VERSION > x || (OCTOMAP_MAJOR_VERSION >= x && \ + (OCTOMAP_MINOR_VERSION > y || (OCTOMAP_MINOR_VERSION >= y && \ + OCTOMAP_PATCH_VERSION >= z)))) + + #define OCTOMAP_VERSION_AT_MOST(x,y,z) \ + (OCTOMAP_MAJOR_VERSION < x || (OCTOMAP_MAJOR_VERSION <= x && \ + (OCTOMAP_MINOR_VERSION < y || (OCTOMAP_MINOR_VERSION <= y && \ + OCTOMAP_PATCH_VERSION <= z)))) +#endif // FCL_HAVE_OCTOMAP + #endif diff --git a/include/hpp/fcl/octree.h b/include/hpp/fcl/octree.h index 56b123ba..86d3755a 100644 --- a/include/hpp/fcl/octree.h +++ b/include/hpp/fcl/octree.h @@ -190,25 +190,41 @@ public: /// @return ptr to child number childIdx of node OcTreeNode* getNodeChild(OcTreeNode* node, unsigned int childIdx) { +#if OCTOMAP_VERSION_AT_LEAST(1,8,0) return tree->getNodeChild(node, childIdx); +#else + return node->getChild(childIdx); +#endif } /// @return const ptr to child number childIdx of node const OcTreeNode* getNodeChild(const OcTreeNode* node, unsigned int childIdx) const { +#if OCTOMAP_VERSION_AT_LEAST(1,8,0) return tree->getNodeChild(node, childIdx); +#else + return node->getChild(childIdx); +#endif } /// @brief return true if the child at childIdx exists bool nodeChildExists(const OcTreeNode* node, unsigned int childIdx) const { +#if OCTOMAP_VERSION_AT_LEAST(1,8,0) return tree->nodeChildExists(node, childIdx); +#else + return node->childExists(childIdx); +#endif } /// @brief return true if node has at least one child bool nodeHasChildren(const OcTreeNode* node) const { +#if OCTOMAP_VERSION_AT_LEAST(1,8,0) return tree->nodeHasChildren(node); +#else + return node->hasChildren(); +#endif } /// @brief return object type, it is an octree -- GitLab