v1.10.0: 2024-03-19
===================
- CMake: Fix duplicate uninstall target (#406)
- Fix errors with recent compilers and C++17/20 standard (#394)
- Fix ScanGraph.h c++20 compilation error (#398)
- Add smaller than operator for vectors (#330)
- Add vcpkg installation instructions to Readme (#382)
- Fix test dependencies in CMakeLists (#374)
- replace deprecated std::iterator by defining required types (#373)
- octovis: fix issue with saving not showing any dialog (#414)
- octovis: Fix deprecated QString and glext redefinition warning (#375)
- octovis: Declare missing dependency on opengl (#408)
- ROS: Updates to compile cleanly on ROS 2 Rolling on Ubuntu 24.04 (#415)
- ROS: Remove ccache  for ROS-Industrial CI yml (#413)
- ROS: Remove EOL ROS distros from CI actions



v1.9.8: 2022-05-12
==================
- Also set lowercase octomap_* variables in CMake config (#369)
- Fix float tests and overflow problem in binvox2bt
- Fix to freespace update when bbx is set. (#360)
- Update Doxygen & URLs  (#354,#352)
- make setBBXMin/Max parameters const (#348)
- ROS: Remove unused ament_cmake dependency.
- octovis: Implement volume selection features (#339)
- octovis: Link dependencies in octovis-static library (#340)

v1.9.7: 2021-05-03
==================
- Use explicit casting to prevent implicit sign conversion
- REP-136 compliance and compatibility with ROS1 & ROS2 using single branch

v1.9.6: 2021-01-23
==================
- Fixed ifstream >> byte with c++17
- strict warnings_as_errors compiler options and corresponding fixes
- octovis: Fixed qmake command to build libQGLViewer with Qt5.
- octovis: adapted to be compatible with libQGLViewer >= 2.7.0
- octovis: use -fPIC with all compilers

v1.9.5: 2020-03-25
==================
- octovis: Update ROS dependencies to Qt5

v1.9.4: 2020-03-15
==================
- octovis: Enable Qt5 by default
- Support added for configurable libdir for packaging
- Increased minimum CMake version to 3.0.2

v1.9.3: 2019-12-26
==================
- Fixed Wpedantic warnings
- Removed problematic INSTALL_NAME_DIR (maxOS workaround)

v1.9.2: 2019-11-28
==================
- Fixed ROS buildfarm failures for octovis

v1.9.1: 2019-11-23
==================
- Improved compatibility with modern compilers and ROS2

v1.9.0: 2017-04-28
==================
- Fixed getUnknownLeafCenters to return true leaf centers (thx to A. Ecins)
- dynamicEDT3D templated over OctoMap type (thx to J.V. Gomez)
- Added optimized rendering option and command line option for tree cutoff 
  in octovis (thx to F. Endres)
- Added optional Qt5 support in octovis (thx to K. Stepanas)
- Improved the generation of config.cmake and version.cmake files, make them
  relocatable via CONFIGURE_PACKAGE_CONFIG_FILE (thx to J.V. Gomez)
- Enable rpath on OS X when the CMake version supports it (thx to J. Snape)
- Added version information to *-config.cmake files and exported targets to
  CMakeLists.txt (thx to J. Snape)
- Improved CMake build by specifically targeting local includes (thx to 
  C.-E. Hrabia)

v1.8.1: 2017-01-13
==================
- Disambiguated isnan (C++11)
- Fixed #123: Set root=NULL in clear()
- Fixed #131: Portable binary read/write of Pointcloud and ScanGraph (uint32_t)

v1.8.0: 2016-04-20
==================
- Fixed #98: The tree structure in memory is now maintained in OcTreeBaseImpl to 
  enable safely deriving custom node classes. The following functions were 
  moved from OcTreeDataNode into OcTreeBaseImpl:
    createChild(...) -> OcTreeBaseImpl::createNodeChild(...)
    getChild(...)    -> OcTreeBaseImpl::getNodeChild(...)
    expandNode()     -> OcTreeBaseImpl::expandNode(...)
    pruneNode()      -> OcTreeBaseImpl::pruneNode(...)
    hasChildren()    -> OcTreeBaseImpl::nodeHasChildren(...)
    childExists(...) -> OcTreeBaseImpl::nodeChildExist(...)
    collapsible()    -> OcTreeBaseImpl::isNodeCollapsible(...)
  If you use custom derived node classes, you need to adjust your code to the 
  new API (have a look at ColorOcTree.h as an example). In particular, you 
  should no longer use the above node member functions in your nodes.
- Extended unit tests for the new memory management
- Added valgrind memcheck suppression file with known ("wanted") leaks due to 
  StaticMemberInitializer.
- Replaced `unsigned short int` for key values with octomap::key_type 
  (=uint16_t) and unsigned char with uint8_t in API.
- Cleaned up OcTreeKey and KeyRay API (used internally)
- Reduced unneeded memory for StaticMemberInitializer 
- Cleaned up const refs to primitive types in ColorOcTree interface
- Removed deprecated insertScan functions (replaced by insertPointCloud)
- Removed no longer used ROS logging macros and unmaintained  OcTreeLUT, 
  OcTreeBaseSE classes
- octovis: Internal version of libQGLViewer updated to 2.6.3

v1.7.2: 2016-03-26
==================
- BBX iterators fixed for empty trees (point3d version)
- Removed qglviewer.h from some public octovis headers
- Fixed QGLViewer library names for Ubuntu wily and xenial
- Fixed install path in CMakeConfigs

v1.7.1: 2016-01-31
==================
- Fixed #82: Enable uninstall target for complete project
- Fixed #47: Exported CMake library paths for Windows no longer
  have the Release/Debug prefix and correctly contain the .lib file
- Fixed #51: IO factory class registry with MSVC. Calling a dummy 
  function from an OcTree class c'tor enables reading general .ot files
  when compiling with MSVC
- Fixed #100: Explicit casts to avoid warnings with MSVC

v1.7.0: 2015-11-27
==================
- BBX iterators fixed for empty trees (thx to F. Boniardi)
- graph2tree tool option for nodes in global frame
- New octree2pointcloud PCL conversion tool (thx to F. Ferri)
- Improved change detection / diff calculation (thx to C. Brew)
- getUnknownLeafCenters now allows queries at a specified depth (thx to 
  A. Ecins)
- Fixed hashing overflow with clang (thx to L. Riano)


v1.6.9: 2016-01-13
==================
- Maintenance release for ROS: 
  Added function to determine state of change detection
  
v1.6.7: 2014-08-31
==================
- FSF address in octovis license header for OctoMap package in Fedora
- Separate build options for octovis and dynamicEDT3D. Thanks to C. Reist!

v1.6.6: 2014-05-26
==================
- Support for SOVERSION in the libraries for better packaging
- Warning for unknown space in castRay() removed (needs to be inferred by
  calling code depending on return value and endpoint voxel)
- Marching cubes for ray surface intersection extended
- Fixed QGLViewer include paths
- ScanGraph read error no longer exits the process

v1.6.5: 2014-03-14
==================
- Fix octovis includes for QGLViewer > 2.5

v1.6.4: 2014-01-20
==================
- Fix for raycasting termination condition in computeRayKeys() (affects
  insertScan / insertRay). Thanks to C. Sprunk!

v1.6.3: 2014-01-13
==================
- New function setNodeValue(...) to directly set a node's value (#31)
- New approximate point cloud insertion as fast variant (#39, see flag for
  insertPointCloud(...) / new function computeDiscreteUpdate(...)

v1.6.2: 2013-11-26
==================
- Improved OSX 10.9 compatibility (thx to B. Jensen)
- Improved  VC++ compatibility (thx to tmdiv)
- New fct. getRayIntersection to get real intersection of raycasting on
  voxel (thanks to F-M. de Rainville)
- Fix #54: Quote paths in CMake configs to avoid problems with spaces
- Fix #53: Auto-pruning after updateNode
- Fix #44: CMAKE_SHARED_LIBRARY_SUFFIX in CMakeConfig (Win / Mac compatibility)
- octovis now includes QGLViewer 2.4 (Qt5 support)
- octovis now looks for the octomap version of the same number

v1.6.1: 2013-06-19
==================
- New function swapContent to exchange the contents of two octrees (issue #32)
- New normal estimation based on marching cubes (thanks to F-M. de Rainville)
- Fixed octovis edit box affecting small selection ranges
- Fixed compilation with gcc 4.8 and OSX (issues #23 #28)

v1.6.0: 2013-04-05
==================
- Speedup: Pruning is now done only on affected nodes on each call to
  updateNode(). You no longer have to call prune(), except when you manually
  change nodes or use lazy_update.
- insertScan() renamed to insertPointCloud(), removed parameter "pruning"
- insertScanNaive() renamed to insertScanRays(), removed parameter "pruning"
- insertScan() / insertPointCloud() / insertScanRays() can now be parallelized
  with OpenMP, currently disabled by default. Enable with CMake flag OCTOMAP_OMP
- Empty octrees no longer contain a root node (#11)
- Library names in CMake configs are now absolute paths, you should no longer
  use OCTOMAP_LIBRARY_DIRS with FIND_PACKAGE (#14)
- graph2tree: pointcloud is transformed in batch before insertion, small changes
  in command line options
- octovis: more map editing options, fixed setting nodes to free/occupied (thx
  to C. Dornhege)
- Sample data is now in octomap/share

v1.5.7: 2014-01-20
==================
- Fix for raycasting termination condition in computeRayKeys() (affects
  insertScan / insertRay). Thanks to C. Sprunk!

v1.5.6: 2013-06-10
==================
- Fixed compilation with OSX 10.8 (issue #23)

v1.5.5: 2013-05-05
==================
- Fixed compilation of external code against OctoMap with gcc4.8 (issue #28)

v1.5.4: 2013-02-27
==================
- Removed binvox binaries from sources for improved packaging compatibility
  (ticket #18). Download from www.cs.princeton.edu/~min/binvox/ instead.

v1.5.3: 2012-12-18
==================
- CMakeConfig now installs into share/octomap instead of lib/cmake/octomap for
	better compatibility with ROS
- ROS package.xml removed, will be added in the release process
- added sensor model parameters to graph2tree
- new octree evaluation tool: eval_octree_accuracy and compare_octrees

v1.5.2: 2012-11-02
==================
- Fixed compilation with gcc 4.7 (Ubuntu Quantal)

v1.5.1: 2012-10-16
===================
- Fixed raycasting corner cases, expanded unit tests
- added double precision 3D coordinate conversions (ticket #13)
- Fixed compatibility with MSVC

v1.5.0: 2012-08-28
===================
- dynamicEDT3D, a library for dynamically updatable distance maps by C. Sprunk, 
	B. Lau, and W. Burgard is now available as part of the OctoMap distribution
- added AbstractOccupancyOcTree interface class, moved binary file IO
- delete functionality added to octrees and nodes
- octovis can now delete nodes inside or outside of a selection box
- operator== and copy constructor for octree nodes and octrees
- key / coordinate conversion functions are now clearly named and documented.
	genPos/genKey deprecated in favor of coordToKey, keyToCoord
- added limited-depth search
- deep-copy constructor for octrees and nodes, assignment op. is private
- improved compatibility with MSVC (thx to J. Aguado)
- internal QGLViewer version increased to 2.3.17
- cleanup: functions removed /deprecated in favor or iterator-base node traversal
- cleanup: private members renamed (tree root / node children)

v1.4.3: 2012-10-07
==================
- Fixed raycasting corner cases, expanded unit tests
- iterator_base derives public for boost::filter

v1.4.2: 2012-04-24
===================
- extended graph2tree with more verbose logging / statistics
- fixed conversion from color .ot to .bt in convert_octree
- minor fixes in octovis with color rendering 
- fixed octovis compilation with Qt 4.8 (Ubuntu 12.04)
- experimental editing functionality in octovis to clear and fill volumes

v1.4.1: 2012-03-12
===================
- added stack.yaml for release in ROS with catkin

v1.4: 2012-02-22
===================
 - New generalized file IO for all kinds of OcTrees to .ot files. The updated
 	file format requires a conversion of your old bt and ot files with the 
 	"convert_octree" tool. bt files are read and written as before. 
 	To write the general .ot file format use tree.write(...) and read it with 
 	AbstractOcTree::read(...) as factory (dynamic_cast to the correct class 
 	afterwards).
 - New ColorOcTree class to store color in addition to occupancy 
	(e.g. from Kinect), with visualization in octovis
 - New map collections of octrees (hierarchical octree maps, experimental)
 - Support for Linux, Mac OSX, and Windows
 - enhancements and fixes in changeDetection
 - minor fixes and unit tests added

v1.2: 2011-08-17
===================
 - divided code into a library (octomap) and visualization part (octvis) to 
	remove dependencies on Qt / OpenGL from library. Both can be built 
	independently or as a complete package.
 - iterators for fast and flexible tree access (check doxygen of OcTreeBase::
	 iterator) are the preferred way to traverse tree nodes now
 - improved speed of map update / scan insertion. A further speedup is possible
	when using the "lazy evaluation" flag for batch insertion
 - unit tests based on CTest ("make test")
 - CMake improvements: new targets "dist" (build package) and "uninstall",
	dynamic and static libs are built. CMake package config to ease integration 
	into other CMake-based systems (install octomap globally, or set the 
	environment variable octomap_DIR to your OctoMap location
 - occupancy and sensor parameters are now a property of the tree and not the
	nodes. Use e.g. tree->isNodeOccupied(node) instead of node->isOccupied()
 - cleanup of OcTree and OccupancyOcTree: the latter now holds most of the 
	implementation to ease deriving own tree and node types. 
        See OcTreeStamped for an example.
 - debug output is now muted when not compiling as "Debug", ROS logging levels
	are used when compiled in ROS
 - experimental change detection in occupancy octrees 
 - bugfixes and general compatibility improvements


v1.0: 2011-03-15
===================
 - cleanup of insertScan methods
 - key-based raycasting with pre-allocated KeyRay
 - speedup and cleanup of math, inlining


v0.8: 2010-11-16
===================
 - improved speed of map update / scan insertion 
 - improved speed of map queries (isOccupied / castRay)
 - key-based computations to improve numerical stability and efficiency 
