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